ТОМ2 - платформа для парсерных игр

Объявление

Платформа ТОМ предназначена для создания текстовых игр на русском языке и имеет развитый парсер, позволяющий взаимодействовать с играми с помощью команд на близком к естественному языке. В данный момент активно разрабатывается версия ТОМ 2.
Последнюю версию платформы можно скачать здесь.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ТОМ2 - платформа для парсерных игр » Поддержка, FAQ, приёмы разработки » ТОМ2: Секции в функциях команд


ТОМ2: Секции в функциях команд

Сообщений 1 страница 14 из 14

1

Что такое секции и для чего они нужны?
Рассмотрим секции одного из трех типов функций - команд (функции других типов отличаются составом секций и их использованием).

устарело - удалено

2

Описание секций в вики безнадёжно устарело.
Сейчас с символов "--" начинается секция кода, с символов "==" - секция вывода текста, а вот с "**" ничего не понятно.
Иногда с неё начинается комментарий.

Код:
{ ** execute ********************************
    Действие просто выводит следующий текст:
  ===========================================
  Можно немного побродить по локациям. Цели в игре нет.

А иногда оно просто разделяет код для удобства:

Код:
********************************************************
action(Старт)
{ --parsing--
  if(loc!=null) fail
  ok
  --execute--
  %<clear>
  goto на_поверхности
}
********************************************************
далее начинается код
--------------------------------------------------------

Можно узнать поподробнее, как парсить такие неоднозначные звёздочки, чтобы, например, правильно сделать подсветку синтаксиса. Сейчас у меня парсер с ума сходит от этих звёздочек:
http://sa.uploads.ru/t/PHMky.png

3

Alexandr написал(а):

А иногда оно просто разделяет код для удобства:
Код:
********************************************************
action(Старт)
{ --parsing--
  if(loc!=null) fail
  ok
  --execute--
  %<clear>
  goto на_поверхности
}
********************************************************
далее начинается код
--------------------------------------------------------

Это же закомментированная функция! =) Две звёздочки в начале строки всегда означают начало комментария.

Alexandr написал(а):

Описание секций в вики безнадёжно устарело.

Это да...
Во встроенной документации есть актуальное описание секций.

4

Alexandr написал(а):

Можно узнать поподробнее, как парсить такие неоднозначные звёздочки, чтобы, например, правильно сделать подсветку синтаксиса. Сейчас у меня парсер с ума сходит от этих звёздочек:

Здесь дело не только в звёздочках.
При разборе секций надо учитывать скобки { }, так как секции внутри программных блоков живут независимо от внешних.

5

ASBer написал(а):

Это же закомментированная функция! =) Две звёздочки в начале строки всегда означают начало комментария.

А как же определить конец такого блока комментария? Всегда заканчивается ещё одной строкой на две звёздочки, или может закончиться началом другого блока, например на "--". Тогда строка "--execute--" внутри этой закомментированной функции должна была закончить блок комментария.

6

Alexandr написал(а):

А как же определить конец такого блока комментария? Всегда заканчивается ещё одной строкой на две звёздочки, или может закончиться началом другого блока, например на "--". Тогда строка "--execute--" внутри этой закомментированной функции должна была закончить блок комментария.

Следующая строка на две звёздочки начинает следующий комментарий. Т.е. формально там 2 комментария друг за другом.
Блок { } внутри комментария считается закомментированным целиком, так же как блок { } внутри текстовой секции == считается целиком кодовым.

7

ASBer написал(а):

Блок { } внутри комментария считается закомментированным целиком, так же как блок { } внутри текстовой секции == считается целиком текстом.

Плохо. Комментарии тоже парсить придётся, а ведь в них программист всё что угодно может написать. Ни в одном языке программирования не обрабатываются внутренности блока комментария. Он должен иметь строгое начало и строгий конец, между которыми программист может писать всё что душе угодно.
Например, в любом языке комментарий типа

Код:
/*==========
Если в комментарии написать скобочку {, то это не должно влиять на всё остальное.
===========*/

не будет иметь последствий, и только в ТОМ2 от такого:

Код:
***********
Если в комментарии написать скобочку {, то это не должно влиять на всё остальное.
**********
далее начинается код
--------------
location main
...

можно ожидать чего угодно.

8

Не думаю что это плохо, просто немного непривычно =)
Вложения строк и скобок ТОМ2 тоже парсит не так как все другие языки:

Код:
"текст {код "текст" код} текст"

- нормально для ТОМа, но обломает любой другой интерпретатор.

9

Прекрасно, приехали. Теперь я ещё и за комментариями должен следить, не сделал ли я где-нибудь опечатку. Комментарии на то и комментарии, чтобы туда можно было вставлять произвольный текст, чтобы можно было взять любой участок кода (не важно, с ошибками он или нет) и закомментировать его нафиг, не выверяя каждую скобочку. Комментарий - это когда тупо ставишь одну "открывашку" (/* (* --[[ и т.д.) и точно знаешь, что когда поставишь "закрывашку", то именно тут, а не раньше или позже, он закончится.
В ТОМ2 постоянно всё чрезмерно усложняется, скатывается в какие-то тонкости и не очевидные нюансы. Теперь вот даже при написании комментария нужно постоянно следить и случайно не опечататься. Такими темпами программирование превращается в мучение.

10

Невозможно сделать опечатку в комментарии. Не могу себе представить такую ситуацию...
Наоборот, удобно - ставишь **** и не думаешь что там у тебя было ниже в блоках. Иначе нужно было бы перелопачивать все секции в комментируемом коде.

11

ASBer написал(а):

Иначе нужно было бы перелопачивать все секции в комментируемом коде.

Достаточно было сделать какую-нибудь "закрывашку" блока комментария.
Понимаю, сейчас уже трудно переделать парсер на другую логику работы. Наверняка и в стандартной библиотеке уже всё написано с такими комментариями.

12

Alexandr написал(а):

Понимаю, сейчас уже трудно переделать парсер на другую логику работы.

Вообще, секции комментариев появились как побочный результат концепции секций. До этого многострочных комментариев вообще не было.
Поэтому переделать не сложно, но нужно ли?
Те же самые проблемы будут и в текстовых секциях - там тоже неосторожное обращение со скобочками чревато сюрпризом.

Выходом тут как раз была бы корректная подсветка синтаксиса, помогающая избегать ошибок со скобками.

13

ASBer написал(а):

Те же самые проблемы будут и в текстовых секциях - там тоже неосторожное обращение со скобочками чревато сюрпризом.

Текстовые секции - другая история, которая не должна иметь ничего общего с комментариями. Любые текстовые строки в ТОМ2 могут содержать код в скобках {}. Это нормально, и иногда подобное встречается и в других языках. Ведь при написании текстовой строки программист понимает, что она так или иначе влияет на работу программы, а значит нужно следить за тем, что пишешь. А вот комментарии в принципе не должны влиять на работу программы, а значит и правила разбора должны быть минимальными.

14

В таком случае правильно будет отказаться от секций-комментариев, и добавить стандартные /* */.
Рекомендую не использовать **

=)


Вы здесь » ТОМ2 - платформа для парсерных игр » Поддержка, FAQ, приёмы разработки » ТОМ2: Секции в функциях команд