Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.
aq:netherscript [03.09.2009 15:46] VorteX |
aq:netherscript [06.07.2020 03:50] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | Это незаконченный документ! | ||
- | NetherScript 2.0 - это настраиваемый парсер, | ||
- | |||
- | Общие инструкции являются частью ядра NetherScript и работают одинаково для всех, они управляют ходом обработки документа. С помощью общих инструкций можно выносить в шаблоны часто используемый код, разбить файл скрипта на несколько файлов, | ||
- | |||
- | Предметные инструкции определяются в коде QuakeC в зависимости от области, | ||
- | |||
- | ====== Синтаксис ====== | ||
- | |||
- | Весь исходный текст подразделяется на сущности двух видов - слова и строки. Строки разделяются между собой символом возврата каретки, | ||
- | * пробел и табуляция - отделяют одно слово от другого | ||
- | * спецсимволы \ ( ) [ ] { } ; : , . являются сами по себе словами, | ||
- | * " | ||
- | * ' | ||
- | * // комментарий до конца строки // | ||
- | * /* комментарий в середине строки */ | ||
- | |||
- | |||
- | Внимание! Многострочный комментарий вида /* */ не поддерживается! Используйте вместо него условие #if 0 ... #endif (см п.6) | ||
- | |||
- | |||
- | ====== Подключение файлов ====== | ||
- | <code java> | ||
- | #include имя_файла | ||
- | </ | ||
- | Подключает содержание файла к процессу парсинга. В имени файла можно указывать добавочные пути (например monsters/ | ||
- | |||
- | Другие правила: | ||
- | |||
- | префикс ' | ||
- | параметр вида <имя файла> | ||
- | в любом другом случае проверять файл парсер будет в папке scripts/ | ||
- | |||
- | Пример использования # | ||
- | <code java> | ||
- | #include " | ||
- | #include " | ||
- | #include " | ||
- | #include "< | ||
- | </ | ||
- | |||
- | Ограничения: | ||
- | |||
- | Макс. 64 подключения файлов (включая начальный) | ||
- | |||
- | ====== Константы #define ====== | ||
- | |||
- | Константы используются для вставки в код готовых шаблонов. Чтобы вставить константу в произвольное место кода, нужно использовать синтаксис [имя_константы]. Самый простой пример использования констант: | ||
- | |||
- | <code java> | ||
- | #define true 1 | ||
- | #define false 2 | ||
- | // Вместо [true] и [false] обработчик кода увидит 1 и 0 | ||
- | MonsterClass MySoldier | ||
- | { | ||
- | health 40 | ||
- | cantaketamage [true] | ||
- | deathobituary [false] | ||
- | } | ||
- | </ | ||
- | |||
- | Константы типа #define при вставке сохраняют свою структуру слов: | ||
- | |||
- | <code java> | ||
- | // Вместо [true] и [false] обработчик кода увидит 1 и 0 | ||
- | #define defMySoldier MonsterClass MySoldier | ||
- | [defMySoldier] | ||
- | { | ||
- | health 40 | ||
- | cantaketamage 1 | ||
- | deathobituary 0 | ||
- | deathstring "You have killed my soldier!" | ||
- | } | ||
- | </ | ||
- | |||
- | Но если определить константу с помощью инструкции #defword, то она при вставке будет представлять из себя одно слово | ||
- | |||
- | <code java> | ||
- | // Вместо [true] и [false] обработчик кода увидит 1 и 0 | ||
- | #defword mySoldierDeathMessage You have killed my soldier! | ||
- | // еще можно описать константу так: | ||
- | // #define mySoldierDeathMessage "You have killed my soldier!" | ||
- | MonsterClass MySoldier | ||
- | { | ||
- | health 40 | ||
- | cantaketamage 0 | ||
- | deathobituary 1 | ||
- | deathstring [mySoldierDeathMessage] | ||
- | } | ||
- | </ | ||
- | + | ||
- | <code java> | ||
- | #define имя_константы (параметр1, | ||
- | #define имя_константы текст_константы | ||
- | #const имя_константы(параметр1, | ||
- | #const имя_константы текст_константы | ||
- | #undef имя_константы_или_макрокоманды | ||
- | #redef | ||
- | #redefword | ||
- | #undefall | ||
- | </ | ||
- | |||
- | Ограничения: | ||
- | * макс. параметров: | ||
- | * макс. длина имени параметра: | ||
- | |||
- | ====== Макрофункция #macro ====== | ||
- | |||
- | То же самое, что и #define, но для использования в коде нужно использовать синтаксис @имя_макро_команды(параметры). Сделана для удобочитаемости кода. Имя макрофункции может совпадать с именем константы, | ||
- | |||
- | <code java> | ||
- | #macro имя_константы(параметр1, | ||
- | #macro имя_константы содержание | ||
- | #macroword имя_константы(параметр1, | ||
- | #macroword имя_константы содержание | ||
- | </ | ||
- | |||
- | ====== Енумерация #enum ====== | ||
- | <code java> | ||
- | #enum int { ... } | ||
- | #enum flags { ... } | ||
- | </ | ||
- | |||
- | ====== Условия и переходы ====== | ||
- | < | ||
- | #if значение ... #elseif значение ... #else ... #endif | ||
- | #ifdef значение ... | ||
- | #goto метка | ||
- | #label имя_метки | ||
- | #skip количество words | ||
- | #skip колколичество lines | ||
- | #eof | ||
- | </ | ||
- | |||
- | ====== Управление парсером ====== | ||
- | < | ||
- | #pragma параметр значение | ||
- | #pragma precompiler on/off | ||
- | #pragma warnings 0/1/2/3 | ||
- | #pragma debug 0/1 | ||
- | #pragma debugmessages 0/1 | ||
- | #pragma labels_on_failed_ifs 0/1 | ||
- | </ | ||
- | |||
- | ====== Служебные инструкции ====== | ||
- | <code java> | ||
- | #message сообщение | ||
- | #error сообщение | ||
- | #warning сообщение | ||
- | #debug сообщение | ||
- | #printdef имя_константы | ||
- | #printmacro имя_макрокоманды | ||
- | </ | ||
- | |||
- | ====== Системные константы и макрофункции ====== | ||
- | <code java> | ||
- | @true | ||
- | @on | ||
- | @false | ||
- | @off | ||
- | @random | ||
- | @random(x, | ||
- | @crandom | ||
- | @chance(x) | ||
- | @defined(n) | ||
- | @equal(x,y) | ||
- | @bitand(x, | ||
- | @bitor(x,y) | ||
- | @label_list | ||
- | @define_list | ||
- | </ |