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

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


aq:netherscript

Различия

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

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

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