Всем добра! Сегодня я хочу поговорить с заинтересованными людьми о моем небольшом препроцессоре под названием JASP. Многие уже слышали про него, ведь я очень назойливый человек и уже не единожды приседал на мозг кому только можно... :-D В сегодняшней статье (точнее, в небольшом "опусе") я хочу рассказать что же можно делать с помощью JASP, как можно упростить себе работу по написанию кода и просто пополоскать вам мозги Итак, приступим!
Думаю, что многие уже читали оффициальный мануал жаспа от вашего покорного слуги. В нем я сухо и по факту описал возможности парсера, но привел мало примеров. Что ж, время исправлять ошибки прошлого :-D Начнем, как и в мануале, с объявления новых переменных. Но тут, увы, сильно не разгуляешься. Все как в мануале:
Code
new timer t -> local timer t = CreateTimer()
//===============================================
new force f, hashtable hash;
->
local force f = CreateForce()
local hashtable hash = InitHashtable()
Сразу же оговорю создание глобальных переменных:
Code
new global timer t
->
globals
timer t = CreateTimer()
endglobals
//================================================
new global force f, hashtable hash
->
globals
force f = CreateForce()
hashtable hash = InitHashtable()
endglobals
Т.е. вы не может объявлять на одной строке глобальные и локальные переменные. Да это и не нужно думаю. Далее идет уничтожение переменных. Помимо стандартного
Code
new timer t;
free t;
->
local timer t = CreateTimer()
call DestroyTimer(t)
так же можно юзать чуть более сложные конструкции. Например,
Code
free GetExpiredTimer() -> call DestroyTimer(GetExpiredTimer())
free LoadUnitHandle(hash, hid, 0) -> call RemoveUnit(LoadUnitHandle(hash, hid, 0))
Ну и конечно же множественное уничтожение, куда без него
Code
new timer t, group g;
free t, g;
Но без нескольких аргументов в виде функций. Увы. Пока.
Обнуление переменных. Никаких финтов делать не позволяет, кроме как перечислить несколько обнуляемых переменных:
Code
flush t, g, f, h
->
set t = null
set g = null
set f = null
set h = null
Следом идет цикл repeat-until, который я без зазрения совести стащил из делфи. Он является менее громоздкой альтернативой
пример приводить не буду, ибо это будет копипастом с моего же мануала. Смысл?
Как говорится- все вкусное на последок. Динамическая типизация... Парсер сам определит тип вашей переменной, если вы его не указали, но задали ей значение в пределах данной функции. Например
Code
var t = CreateTimer() -> local timer t = CreateTimer()
//================================================
var t;
if (cond)
{
t = CreateTimer()
}
->
local timer t
if (cond)
{
t = CreateTimer()
}
Пока что парсер хорошо понимает переменные из стандартных функций, функций пользователя, но не работает со структурными типами переменных и с ссылками на другие нетипизированные пременные. Т.е.
Code
var s = "Hello";
var temp = s;
РАБОТАТЬ НЕ БУДЕТ. Пока.
Так же можно перечислать динамические переменные с тем условием, что в значении нет функции. Т.е.
Code
var s = "Hello", i = 0, r = .15;
//НО НЕ ТАК
var s = "Hello", i = LoadInteger(hash, hid, 0), r = .15;
//БУДЕТ БЕЛИБЕРДА. ПОКА.
Статья (точнее очерк) не претендует ни на какие писательские награды. Плюс она очень скудна. Но вместе с развитием парсера она будет дополнятся, а этой информацией я лишь хоел заинтересовать вас
Всем спасибо, ждите продолжения :3