Что такое секции и для чего они нужны?
Рассмотрим секции одного из трех типов функций - команд (функции других типов отличаются составом секций и их использованием).
устарело - удалено
ТОМ2 - платформа для парсерных игр |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » ТОМ2 - платформа для парсерных игр » Поддержка, FAQ, приёмы разработки » ТОМ2: Секции в функциях команд
Что такое секции и для чего они нужны?
Рассмотрим секции одного из трех типов функций - команд (функции других типов отличаются составом секций и их использованием).
устарело - удалено
Описание секций в вики безнадёжно устарело.
Сейчас с символов "--" начинается секция кода, с символов "==" - секция вывода текста, а вот с "**" ничего не понятно.
Иногда с неё начинается комментарий.
{ ** execute ******************************** Действие просто выводит следующий текст: =========================================== Можно немного побродить по локациям. Цели в игре нет.
А иногда оно просто разделяет код для удобства:
******************************************************** action(Старт) { --parsing-- if(loc!=null) fail ok --execute-- %<clear> goto на_поверхности } ******************************************************** далее начинается код --------------------------------------------------------
Можно узнать поподробнее, как парсить такие неоднозначные звёздочки, чтобы, например, правильно сделать подсветку синтаксиса. Сейчас у меня парсер с ума сходит от этих звёздочек:
А иногда оно просто разделяет код для удобства:
Код:
********************************************************
action(Старт)
{ --parsing--
if(loc!=null) fail
ok
--execute--
%<clear>
goto на_поверхности
}
********************************************************
далее начинается код
--------------------------------------------------------
Это же закомментированная функция! =) Две звёздочки в начале строки всегда означают начало комментария.
Описание секций в вики безнадёжно устарело.
Это да...
Во встроенной документации есть актуальное описание секций.
Можно узнать поподробнее, как парсить такие неоднозначные звёздочки, чтобы, например, правильно сделать подсветку синтаксиса. Сейчас у меня парсер с ума сходит от этих звёздочек:
Здесь дело не только в звёздочках.
При разборе секций надо учитывать скобки { }, так как секции внутри программных блоков живут независимо от внешних.
Это же закомментированная функция! =) Две звёздочки в начале строки всегда означают начало комментария.
А как же определить конец такого блока комментария? Всегда заканчивается ещё одной строкой на две звёздочки, или может закончиться началом другого блока, например на "--". Тогда строка "--execute--" внутри этой закомментированной функции должна была закончить блок комментария.
А как же определить конец такого блока комментария? Всегда заканчивается ещё одной строкой на две звёздочки, или может закончиться началом другого блока, например на "--". Тогда строка "--execute--" внутри этой закомментированной функции должна была закончить блок комментария.
Следующая строка на две звёздочки начинает следующий комментарий. Т.е. формально там 2 комментария друг за другом.
Блок { } внутри комментария считается закомментированным целиком, так же как блок { } внутри текстовой секции == считается целиком кодовым.
Блок { } внутри комментария считается закомментированным целиком, так же как блок { } внутри текстовой секции == считается целиком текстом.
Плохо. Комментарии тоже парсить придётся, а ведь в них программист всё что угодно может написать. Ни в одном языке программирования не обрабатываются внутренности блока комментария. Он должен иметь строгое начало и строгий конец, между которыми программист может писать всё что душе угодно.
Например, в любом языке комментарий типа
/*========== Если в комментарии написать скобочку {, то это не должно влиять на всё остальное. ===========*/
не будет иметь последствий, и только в ТОМ2 от такого:
*********** Если в комментарии написать скобочку {, то это не должно влиять на всё остальное. ********** далее начинается код -------------- location main ...
можно ожидать чего угодно.
Не думаю что это плохо, просто немного непривычно =)
Вложения строк и скобок ТОМ2 тоже парсит не так как все другие языки:
"текст {код "текст" код} текст"
- нормально для ТОМа, но обломает любой другой интерпретатор.
Прекрасно, приехали. Теперь я ещё и за комментариями должен следить, не сделал ли я где-нибудь опечатку. Комментарии на то и комментарии, чтобы туда можно было вставлять произвольный текст, чтобы можно было взять любой участок кода (не важно, с ошибками он или нет) и закомментировать его нафиг, не выверяя каждую скобочку. Комментарий - это когда тупо ставишь одну "открывашку" (/* (* --[[ и т.д.) и точно знаешь, что когда поставишь "закрывашку", то именно тут, а не раньше или позже, он закончится.
В ТОМ2 постоянно всё чрезмерно усложняется, скатывается в какие-то тонкости и не очевидные нюансы. Теперь вот даже при написании комментария нужно постоянно следить и случайно не опечататься. Такими темпами программирование превращается в мучение.
Невозможно сделать опечатку в комментарии. Не могу себе представить такую ситуацию...
Наоборот, удобно - ставишь **** и не думаешь что там у тебя было ниже в блоках. Иначе нужно было бы перелопачивать все секции в комментируемом коде.
Иначе нужно было бы перелопачивать все секции в комментируемом коде.
Достаточно было сделать какую-нибудь "закрывашку" блока комментария.
Понимаю, сейчас уже трудно переделать парсер на другую логику работы. Наверняка и в стандартной библиотеке уже всё написано с такими комментариями.
Понимаю, сейчас уже трудно переделать парсер на другую логику работы.
Вообще, секции комментариев появились как побочный результат концепции секций. До этого многострочных комментариев вообще не было.
Поэтому переделать не сложно, но нужно ли?
Те же самые проблемы будут и в текстовых секциях - там тоже неосторожное обращение со скобочками чревато сюрпризом.
Выходом тут как раз была бы корректная подсветка синтаксиса, помогающая избегать ошибок со скобками.
Те же самые проблемы будут и в текстовых секциях - там тоже неосторожное обращение со скобочками чревато сюрпризом.
Текстовые секции - другая история, которая не должна иметь ничего общего с комментариями. Любые текстовые строки в ТОМ2 могут содержать код в скобках {}. Это нормально, и иногда подобное встречается и в других языках. Ведь при написании текстовой строки программист понимает, что она так или иначе влияет на работу программы, а значит нужно следить за тем, что пишешь. А вот комментарии в принципе не должны влиять на работу программы, а значит и правила разбора должны быть минимальными.
В таком случае правильно будет отказаться от секций-комментариев, и добавить стандартные /* */.
Рекомендую не использовать **
=)
Вы здесь » ТОМ2 - платформа для парсерных игр » Поддержка, FAQ, приёмы разработки » ТОМ2: Секции в функциях команд