Здесь представлены материалы, относящиеся к формализации и спецификации языка IFML. Исходя из пока чисто проектировочной ценности, данные материалы могут много раз меняться, обновляться и дополняться. Так что просим сверяться с датой опубликования.
Дата опубликования: 13 мая 2002 года
Я бы рекомендовал обратиться непосредственно на сайт "ЯРИЛ 2.0"
Условные обозначения и правила для схематического кода:
маленькими буквами пишутся зарезервированные слова
БОЛЬШИМИ БУКВАМИ пишутся псевдо-имена идентификаторов
знаками # обозначаются цифры
знак ... означает многократное, возможное повторение
между знаками < и > пишется символическое название структурного элемента кода
1. Модули
Модуль имеет расширение .imd
Начинается со слов модуль ИМЯ;
Не содержит установок объектов Среды, Проигрывателя и Игрока
Не содержит объявлений объектов
2. Исходные файлы
Имеет расширение .ifm
Начинается со слов ярил #.#;, где #.# заменяется версией IFML (в этой редакции - 2.0)
Содержит установки глобальных объектов (Среда, Проигрыватель, Игрок) и объявления объектов
3. Классы
Объявление класса начинается со слов класс ИМЯ(ИМЯ_КЛАССА_РОДИТЕЛЯ);
Затем идёт набор свойств
Затем идёт набор методов (функций и событий)
Объявление заканчивается словом конец;
4. Свойства
Свойства объявляются внутри классов
Свойство объявляется таким способом: ИМЯ: <тип>;. Существующие типы: Признак1 (говорит о принадлежности класса к категории), Логический, Число, Текст, объект, набор. Т.о. любое обращение к объекту ИМЯ.СВОЙСТВО расценивается как обращение к его свойству. Если такого свойства у класса нет, то оно ищется в списке категорий. Если есть в списке, то возвращается логическое значение "Ложь"; если нет, то происходит Ошибка. Если же такое свойство есть у класса и оно - типа Признак, возвращается логическая "Истина".
Свойства типов Логический, Число и Текст обозначаются такими же словами.
Тип объект заменяется именем класса объекта.
Тип набор является списком или массивом (динамическим) элементов любого типа, кроме набора. Описывается так: ИМЯ: * <тип>. (Пример: Места: * Вещь).
Примечание 1. Свойства с типом Признак могут объявляться так: ИМЯ;.
5. Методы
Методы объявляются как внутри классов, так и снаружи (тогда они относятся к Среде).
Методы бывают 2х типов: функция и событие (не объявляется внутри класса).
Функция является отдельно-стоящим скриптом обработки данных (её параметров) и возвращает какое-либо значение. В принципе, является, чисто вспомогательным инструментом.
Событие является скриптовым описанием реакции Среды на какие-либо игровые События. События бывают 2х типов: исходящими от Игрока, т.е. командами; или внутрипроцессными, т.е. происходящими при изменении свойств объектов.
Метод объявляется таким способом:
Функция объявляется в виде: функция ИМЯ(ИМЯ: <тип>; ...): <тип>;
События объявляются в виде:
Команды: команда ГЛАГОЛ;
<шаблон>: ИМЯ_ФУНКЦИИ;
...
конец;
Изменение свойств объектов: событие ИМЯ_ОБЪЕКТА_ИЛИ_КЛАССА.СВОЙСТВО;
<код>;
...
конец;