Инструменты пользователя

Инструменты сайта


aq:netherscript

Различия

Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.

Ссылка на это сравнение

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