Вверх ↑
Ответов: 5446
Рейтинг: 323
#1: 2009-12-18 11:52:04 ЛС | профиль | цитата
Представляю на суд общественности скрипт препроцессора для FTCG.

Вызов:
HWSPP.py <имя файла.hwp>
Результатом работы скрипта является файл hws, лежаший в той же директории и имеющий то же имя, что и исходный hwp

Синтаксис файла hwp совпадает с синтаксисом файла hws, дополняя его специальными комментариями, начинающимися на
//#.....
Такие "комментарии" являются командами препроцессора. В этой версии поддерживаются следующие команды:
#make_code(tpl)
#save_and_return(data,event[,var])
##tpl_char(open,close)
##code_var(name)

Препроцессором обрабатываются только строки, содержащие специальные комментарии, остальной код выводится в выходной файл без изменений.

Подробнее о каждой команде:
make_code(tpl) - генерирует hws-код по шаблону tpl. Пример шаблона
SomeFunc($X{,$Y{,$Z}},$Q,doit)

Символ $ является признаком начала имени свойства (в том смысле, какое это слово имеет для hws).

Скобки "{" и "}" определяют необязательные аргументы функции - они появятся в коде целевого языка только если все свойства внутри этого блока имеют отличные от дефолтного значения (isndef). ВНИМАНИЕ: запятые желательно втаскивать в блоки "{...}"!

Таким образом, вышеприведённый шаблон создаст следующий код:
fvar(pp_var_0, pp_var_1, pp_var_2, pp_var_3)
fvar(pp_br_0, pp_br_1)
fvar(code)

pp_var_1 = Y
pp_var_0 = X
pp_var_2 = Z
pp_var_3 = Q

if (isndef(Z))
pp_br_1 = ',' && pp_var_3 && ''
else
pp_br_1 = ''
end
if (isndef(Y))
pp_br_0 = ',' && pp_var_2 && '' && pp_br_1 && ''
else
pp_br_0 = ''
end

code = 'SomeFunc(' && pp_var_1 && '' && pp_br_0 && ',' && pp_var_4 && ',doit)'

save_and_return(code, event[, var]) - генерирует код вызова события event с данными code. Если указан параметр var, то также генерируется код для нижней точки var, поэтому вызов save_and_return должен завершать функцию в hws-коде

tpl_char(open,close) - позволяет задать свои символы-ограничители блоков необязательных аргументов (вместо { и }). Первый аргумент - символ начала блока, второй - конца. Символы начала и конца должны быть различны!

code_var(name) - позволяет задать имя переменной, используемой для хранения результата работы make_code (по умолчанию - code).

В архиве сам скрипт плюс пример hwp-скрипта
карма: 1

0
файлы: 1hwspp.rar [2.4KB] [294]