AFL и препроцессор

Опубликовано в AmiBroker

В языке AFL имеется препроцессор. Правда, этот препроцессор располагает столь скромными возможностями, что и препроцессором его назвать язык не поворачивается. А можно ли использовать нормальный препроцессор с Амиброкером?

Можно, было бы желание. У меня оно наконец появилось. Что имеется во встроенном препроцессоре языка AFL? Есть всего две директивы - #include и #includeonce. Предназначены для включения внешних файлов. И третья директива (вот оно!) #pragma с единственно возможным параметром nocache. Если в тексте встречается конструкция

#pragma nocache

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

В качестве редактора я использую Notepad++, а препроцессором назначим все тот же универсальный препроцессор М4, прекрасно проявивший себя в связке с qpile. Последовательность действий:

В Амиброкере создаём новую формулу, к примеру в каталоге Systems. Открывает текст формулы для редактирования. Изначально она, очевидно, пустая. Вводим код формулы из двух строк: 

#pragma nocache
#include <Formula.afl>

Таким образом, весь текст формулы будет состоять из содержимого файла Formula.afl. При этом этот файл не будет кэшироваться и при любом изменении этого файла будет немедленно изменяться и формула пересчета в амиброкере. Замечу, что имя включаемого файла я поместил в угловые скобки. В этом случае при выполнении этого скрипта интерпретатор AFL будет искать файл с именем Formula.afl в директории Include.

С Амиброкером закончили. Теперь в любом удобном нам месте редактором Notepad++ создаём файл, который и будет содержать текст нашей формулы. Редактируем его, наслаждаясь всеми возможностями умного редактора и используем в тексте любые конструкции препроцессора M4.

В любой момент записываем файл скрипта на диск, запускаем препроцессор таким образом, чтобы он на входе получил наш файл со скриптом, а создал результирующий файл в каталоге Include Амиброкера с именем Formula.afl. Для этого удобно использовать командный файл Wiondows.

Собственно и все. Особенно добавить нечего. Любое изменение файла Formula.afl будет мгновенно сопровождаться пересчетом формулы и получением новых результатов, точно таким же образом, как это происходит и со встроенным редактором AFL.

После того как формула отлажена, файл Formula.afl можно использовать как любой иной файл с формулой на языке Afl. Собственно, это он и есть в чистом виде.

См также:

  1. Подсветка синтаксиса AFL (с поддержкой M4)
  2. Макропроцессор M4 для Windows
  3. M4 документация на русском языке

Комментарии   

# AlexLan 20.10.2012 00:29
Михаил, добрый вечер. :-)
Спасибо за идею :-)
Ревизовал очень удобно.
Спасибо.
С уважением, Александр.
# admin 20.10.2012 01:12
Вот и прекрасно. А не подскажете, как контекстный хелп в нотепаде сделать? Чтобы по F1 notepad++ выдавал хелп по функции. Что-то у меня сходу не получилось.
# AlexLan 20.10.2012 08:26
К сожалению не подскажу. Пока не использую этот редактор.

Недостаточно прав для комментирования