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

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


aq:netherscript

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
aq:netherscript [03.09.2009 15:25]
VorteX
aq:netherscript [06.07.2020 03:50] (текущий)
Строка 7: Строка 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). 
  
Строка 36: Строка 32:
 параметр вида <имя файла> - означает что инклюдится системный файл, и искать его парсер будет в каталоге script/system/  параметр вида <имя файла> - означает что инклюдится системный файл, и искать его парсер будет в каталоге script/system/ 
 в любом другом случае проверять файл парсер будет в папке scripts/  в любом другом случае проверять файл парсер будет в папке scripts/ 
 +
 Пример использования #include:  Пример использования #include: 
- +<code java> 
-  #include "./my_defs.ns2" +#include "./my_defs.ns2" 
-  #include "my_defs.ns2" +#include "my_defs.ns2" 
-  #include "monsters/mynewmonster.ns2" +#include "monsters/mynewmonster.ns2" 
-  #include "<my_defs.ns2>"+#include "<my_defs.ns2>" 
 +</code>
  
 Ограничения:  Ограничения: 
Строка 47: Строка 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 имя_константы текст_константы
Строка 97: Строка 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.1251977114.txt.gz · Последнее изменение: 06.07.2020 03:50 (внешнее изменение)