Открыть главное меню

Изменения

ТОМ: язык программирования

7996 байт добавлено, 15:43, 5 декабря 2011
м
Нет описания правки
Справочник по языку программирования платформы [[ТОМ]].
страничка в разработке.Страничка заморожена.Все особенности ТОМа, не описанные ниже, являются недокументированными.
{{Содержание справа}}
=====key=====
Лингвистический Морфологический ключ - строка [[ТОМ: Лингвистический Морфологический ключ|специального формата]]. В лингвистических операциях может применяться без кавычек.
=====lexeme=====
Пустое значение.
Обращение к несуществующим свойствам, функциям и переменным всегда возвращает null.
В логических операциях null выполняет роль 3го логического значения "неизвестно"эквивалентно значению false.В операциях сравнения null не равен ни одному значению, кроме себя самого.
Все остальные операции с null всегда возвращают null.
====object.form====
Объект с указанными аспектом и формой. При присвоении преобразуется в строку, содержащую наименование объекта в требуемой форме.
====object.item====
=== Логические операции ===
====! / не====Логическое отрицаниеЗначение null в логических операциях эквивалентно false.
====!, not, не true (логическое отрицание)==== false
не ! true = false = true
не null ! false = nulltrue
! null = true
====| / , ||, or / , или(логическое сложение)====Логическое сложение
true или || true = true
true или || false = true
false || true или null = true
false или true || false = truefalse
false или false = false===&, &&, and, и (логическое умножение)====
false или null true && true = nulltrue
null или true && false = truefalse
null или false && true = nullfalse
null или null = null  ====false && / and / и====Логическое умножение true и true = true true и false = false true и null = null false и true = false false и false = false false и null = false null и true = null null и false = false null и null = null
===Лингвистические операторы===
Пример:
unique Test //создаем объект и задаем текстовые свойства
.{ title = "тестов% объект%; Мр; Ип; Ип=ы,; Рп=ого,а;" . description = "описание тестового объекта" . add_property = "дополнительное свойство" }
Выводим аспекты объекта:
По умолчанию, если Obj не управляется игроком, сообщения парсера на экран не выводятся.
==== - описание события====Оператор "-" позволяет описать событие, которое может спровоцировать реакцию персонажей находящихся в локации.Событие может быть введено только программно.
==Конструкции языка==
Результат: создана и инициализирована переменная X.
 
===Глобальные переменные===
Глобальные переменные на самом деле являются свойствами объекта global.
После объявления свойства global как:
global.X = 5
доступ к этому свойству возможен как к обычной переменной:
X = 55
var Y = X
В отличии от локальных переменных, глобальные переменные могут иметь относительные значения также как свойства объектов.
 
 
 
====global.secret====
Переменная предназначенна для передачи "секретного" сообщения между модулями игры.
Это единственная переменная, которая сохраняет свое значение при рестарте, при загрузке новой игры или при загрузке модуля игры.
 
 
==Константы==
===frontend===
*Константа используется в выражениях. Возвращает строку с именем используемого интерфейса (исполняемого файла). Например "constom.exe" или "Milena.exe".
 
==Специальные контекстные значения==
===this===
''(только для чтения)''
 
Во время выполнения метода this указывает на объект, которому принадлежит выполняемый метод.
 
===act===
===actor===
===talker===
===addressee===
===told===
===addressed===
==Объекты==
===Свойства объектов===
Свойство объекта - это переменная, связанная с объектом. Все данные объекта хранятся в его свойствах. Доступ к свойствам осуществляется по их имени.
Синтаксис:
obj.prop = х //присваивает свойству 'prop' значение 'x'
var x = obj.prop //читает значение свойства 'prop'
 
Где:
*obj - любой объект
*prop - имя свойства объекта
 
====Относительные значения свойств====
Помимо основного значения свойства объектов могут содержать относительные значения.
 
Синтаксис:
obj.prop = х //присваивает 'x' как основное значение свойства 'prop'
//все относительные значения свойства уничтожаются
obj.prop[] = х //присваивает 'x' как основное значение свойства 'prop'
//все относительные значения свойства сохраняются
obj.prop[i] = х //присваивает 'x' как относительное значение свойства 'prop' для 'i'
obj.prop = null //уничтожает основное и все относительные значения свойства 'prop'
obj.prop[] = null //уничтожает основное значениe свойства 'prop'
obj.prop[i] = null //уничтожает относительное значениe свойства 'prop' для 'i'
var x = obj.prop //читает значение свойства 'prop' для актера. Эквивалентно x = obj.prop[actor]
var x = obj.prop[] //читает основное значение свойства 'prop' независимо от actor
var x = obj.prop[i] //читает относительное значение свойства 'prop' для 'i'
 
Где:
*obj - любой объект
*prop - имя свойства объекта
*i - числовоe или строковое значение, либо объект
 
 
Основные отличия от массивов:
*нет такого понятия как размер массива;
*могут быть "дыры" в заполнении. Например, если значение .prop[3] не задано, то x = obj.prop[3] вернет основное значение obj.prop;
*индекс i может быть не только числом, но и строкой, а также объектом;
*если значение задано относительно класса, оно будет действовать для всех его элементов.
 
Пример использования: class гном { ... } unique великан { ... } unique вход_в_шахту { //описание описание ="Круглая дыра в скале" описание[гном] ="Вход в шахту. Сделан гномами и для гномов" //действует для всех гномов описание[великан] ="Маленькая мерзкая дыра в скале. Тебе туда не залезть. Пахнет гномами." //флаги можно_пройти[гном] =Относительные свойства объектов===да //действует для всех гномов можно_пройти[великан] =нет }
===Элементы объекта===
Корзинка.item:пирожок[1] //возвращает 1й пирожок из корзинки
 
Также возможно согласование вложенных объектов:
Корзинка.item*Пп //возвращает перечень предметов из корзинки в предложном падеже.
===Методы объектов===
Пример:
location комната //создаем новую локацию
.{ title = "маленькая комната" //задаем наименование . description = "это светлое и уютное помещение." //задаем описание }
или
локация комната //создаем новую локацию
.{ наименование = "маленькая комната" //задаем наименование . описание = "это светлое и уютное помещение." //задаем описание }
Локация может содержать в себе другие локации, уникальные и счетные объекты, мыслимые объекты. Для [[TOM: язык программирования#Элементы объекта|элементов локации]] подразумевается что они находятся в этой локации.
=====Переменные в шаблоне=====
Шаблон может включать в себя переменные различных типов.
Переменная задается специальным знаком и именем роли после знака. После имени роли переменной может быть указан аспект и лингвистический ключ.
Например:
.шаблон = "осмотреть @Объект:Предмет*ВпЕч"
где:
*@ - символ, указывающий тип переменной;
*Объект - имя роли переменной;
*Предмет - аспект объекта;
*ВпЕч - лингвистический ключ.
Пример:
action NoSave
.{ шаблон = "save=сохранить" }
Мышонок.NoSave( ){ %сохранение запрещено! }
Метод объекта action, имя которого совпадает с именем переменной в шаблоне, и который имеет один аргумент, совпадающий с этой же переменной, является проверкой для значений этой переменной.
action Осмотреть //создаем действие осмотреть
.{ pat = "осмотреть @Предмет" //добавляем шаблон с переменной "Предмет" . Предмет(Предмет) //добавляем проверку для переменной "Предмет" { if(Предмет==pers) return "ты не можешь себя увидетьосмотреть!" //сообщение об ошибке }
}
phrase - специальная категория, предназначенная для описания диалоговых фраз, распознаваемых парсером.
===event / событие===event - специальная категория, предназначенная для описания произошедших событий, распознаваемых парсером.
==Предопределенные объекты==
Персонажем может быть только уникальный объект.
При старте системы значением переменной pers == является объект global  Управление персонажем:.
====Смена персонажа====
unique главный_герой //создаем уникальный объект
{
//... описание главного героя
}
pers = главный_герой //передаем управление на новый объект
===this / это===Во время выполнения методаЕсли смена персонажа приводит к изменению текущей локации, this указывает на объект, которому принадлежит выполняемый метод. ===actor / актер===actor указывает на объект, от имени которого выполняется действие. actor не изменяется при вызове методов других объектов.По умолчанию значения всех относительных свойств возвращаются относительно объекта actor. ===act / акт===act указывает на объект категории action и соответствует действию, выполняемому в данный момент.act имеет смысл в методах, вызываемых парсером и после парсера. Во всех остальных случаях значение act равно nullдля новой локации вызывается обработчик события OnEnter().
==Предопределенные свойства==
[[Изображение:TOM_prop.gif]]
===Свойства всех типов=Специальные поля значений==
Для любого [[TOM: язык программирования#Типы данных|типа данных]] возможен доступ к дополнительным полям.
(Но не для всех типов данных эти поля имеют смысл).
====.typ / .тип====
''(только для чтения)''
Работает для всех типов данных.
====.str / .строка====
''(только для чтения)''
====.num / .число====
''(только для чтения)''
====.obj / .объект====
''(только для чтения)''
Возвращает "чистый" объект без примеси количества и положения.
====.key / .ключ====
''(только для чтения)''
====.pos / .поз====
''(только для чтения)''
Для прочих значений .pos возвращает null.
===Свойства Специальные свойства объектов=======.name / .имя====
Возвращает программное имя объекта.
''(только для чтения)''
====.loc / .лок====
Возвращает локацию, в которой находится объект.
====.cls / .класс====
Синтаксис: O.cls
Где: C - объект категории class.
====.ctg / .категория====
Синтаксис: O.ctg
''(только для чтения)''
====.syn lex / .синоним=лексема===
''(только для чтения)''
====.lex / .лексема====''(только для записи)'' ====.pat / .шаблон====
Cвойство используется для установки [[TOM: язык программирования#Шаблоны|парсерных шаблонов]] для объектов категорий action, phrase и event.
Количество шаблонов для одного объекта не ограничено.
Пример
action осмотреть //создаем действие "осмотреть"
.{ pat = "осмотреть" //задаем 1й шаблон . pat = "осмотреть @объект" //задаем 2й шаблон . pat = "осмотреть @какой @объект" //задаем 3й шаблон }
====.item / .элемент====Свойство .item предоставляет доступ к [[TOM: язык программирования#Элементы объекта|вложенным объектам]].
====.title / .наименование====
====.menu_name / .заголовок_меню====
====Сообщения парсера====Сообщения парсера хранятся как в предопределенных глобальных переменных.ТОМ инициализирует их при старте, затем они могут быть переопределены в любое время. Более того, свойства объектовс этими же именами могут быть прописаны для актера, для действия или фразы, а также для объекта. При возникновении ошибки парсер ищет необходимое сообщение для объекта относительно действия, если не найдено - для действия относительно актера, если не найдено - для актера, и затем в объекте act, объекте actor или объекте global.
Для хранения парсерных сообщений предусмотрены зарезервированы следующие свойстваимена:=====is_not_recognized=====
*Это сообщение парсер выводит когда введенную команду не удалось сопоставить ни с одним шаблоном действий или фраз.
> подумай о сыре
Это предложение непонятно!
=====number_is_expected=====
*Это сообщение выводится когда в шаблоне команды указана числовая переменная, а игрок ввел слово. Например, ''первый'' вместо 1, или ''пара'' вместо 2.
> возьми несколько горошин
Необходимо указать число.
=====unknown_word=====
*Это сообщение выводится когда в команде использовано слово, не соответствующие ни одному объекту в игре, или написанное с ошибками.
> возьми горохи из мешка
Слово <горохи> мне неизвестно.
 
===incorrect_form===
*Это сообщение выводится когда слово в команде стоит в форме, не соответствующей форме, заданной в шаблоне команды.
> возьми горохом из мешка
"горохом" - слово в неверной форме.
=====incorrect_form==object_not_found===*Это сообщение выводится когда найденный парсером объект находится вне текущей локации, при том что в шаблоне команды указано его обязательное присутствие. > осмотри филина Филин отсутствует. =====object_not_found==unusable_object===* Это сообщение выводится когда найденный парсером объект не обладает свойством, указанном в шаблоне, или не принадлежит к классу, указанному в шаблоне. > брось крота Дядюшка-крот не годится для этого действия. =====unusable_object==too_difficult_statement===*Это сообщение выводится в случае, если парсинг команды требует перебора вариантов, количество которых превышает разумные пределы. =====too_difficult_statement==object_select=====*Это сообщение выводится при устранении неопределенности перед списком неоднозначно распознанных объектов: > взять еду Непонятно, что имелось в виду: малина в траве, стручок гороха на грядке, стручок гороха в траве, сушеные горошины в траве или малина на кустах; ===сan_not_execute=======*Это сообщение выводится когда введенная команда распознана, но для актера не задан метод для ее выполнения. > Крот, осмотри мешок Побойтесь бога! Крот слеп от рождения! ===no_reply=====*Это сообщение выводится когда введенная строка распознана как фраза, но никто из присутствующих в локации на неё не ответил. > расскажите мне про лес! Мышонку никто не ответил...
==Предопределенные методы объектов==
===menu() / меню()===
===.ChkMoveObj( ) / .ПроверкаПеремещенияОбъекта( )===
Метод вызывается перед попыткой перемещения объекта.
В этом методе можно разместить проверки на возможность перемещения.
Если метод возвратит true - перемещение выполняется, если false - отменяется.
===.BefMoveObj( ) / .ПередПеремещениемОбъекта( )===
Метод вызывается перед перемещением объекта.
===OnEnter( ) / НаВход( )===Обработчик события вызывается в случае когда персонаж, управляемый игроком, входит в локацию.Вызов происходит после перемещения персонажа в локацию, но до события AftMoveObj( ). Также этот обработчик вызывается при переключении управления на другого персонажа, если персонажи находятся в различных локацияхМетод OnEnter( ) должен быть определен для локации, но вызывается от имени управляемого персонажа. ===AftMoveObj( ) / .ПослеПеремещенияОбъекта( )===
Метод вызывается после перемещения объекта.
===.background( ) / ФоновыеДействия( )===
Метод используется для описания фоновых действий.
После каждого хода вызывается для объекта global, локации, в которой находится pers, и для всех объектов, находящихся в той же локации что и pers, за исключением самого объекта pers.
===.persbackground( ) / ФоновыеДействияПерсонажа( )===
Метод используется для описания фоновых действий объекта pers.
==Функции==
===Преобразование типов======Работа со строками======Прочие функции=======rnd() / шанс()====Синтаксис: rnd( )* Функция возвращает логическое значение ''да'' или ''нет'' с вероятностью 50/50.  Синтаксис: rnd(X)- где X - число больше нуля.* Функция возвращает случайное число в диапазоне от 1 до X включительно. ====set() / сет()========input() / ввод()========media() / медиа()====
==Теги==
===Теги TOMа===
Ниже описаны теги, автоматически вставляемые ТОМом в выводимый текст в специальных случаях:
 
 
'''<location></location>'''
 
При входе персонажа в локацию автоматически отображается название локации и её описание.
Название локации при этом заключается в тег:
<location>Название локации</location>
Опираясь на этот тег, название локации в интерфейсной оболочке может быть выделено цветом или помещено в специальное поле.
Используя эти теги, интерфейсная оболочка может формировать меню в виде набора кнопок, списком или другим образом.
===Теги оболочки ConTOMConstom===
Интерфейсная оболочка ConTOM обрабатывает теги:
*<location></location> - выделяет наименование локации цветом.
*<menu></menu> - выделяет строку меню цветом.
*<pause> - приостанавливает вывод текста до нажатия любой кнопки.
*<clear> - очищает экран.
*<nowiki><font color=Color></nowiki> - изменяет цвет шрифта. Color должен быть из списка: black, navy, green, teal, maroon, purple, olive, silver, gray, blue, lime, aqua, red, fuchsia, yellow или white.
*<nowiki></font></nowiki> - возвращает серый цвет шрифта.
===exit, quit, выход===
Команда закрывает приложение без сохранения данных.
 
[[Категория:Документация ТОМ]]
1379
правок