Цикл стиля С/С++/С# в QPILE
После периода программирования на языках семейства С или Pascal/Delphi у меня постоянно возникает проблема с синтаксисом циклов на языке qpile. Чтобы наконец перестать путаться, решил изменить синтаксис и привести его к удобоваримому виду.
Цикл в qpile выглядит так:
for i from 1 to 100
... тело цикла ..
end for
Приведем его к виду
For(i,1,100)
... тело цикла ..
End For
Дополнительно добавим приятное правило из паскалеподобных языков, когда переменная цикла автоматически имеет локальную область видимости (макрос Local) . Опеределим оператор цикла:
define(`For',`ifelse(`$1',,`for',Local(`$1')for `$1' from m4_default(`$2',0) to `$3')')
Что вполне решает нашу задачу. Автоматически определяется стиль задания цикла. Если он задан в стандартном qpile-синтаксисе for i from 1 to 100, то ничего не заменяется. Если в пользовательском виде for(i,from,to) - то он развернется в стандарт синтаксиса qpile. Если второй операнд пропущен, будет подстановлен 0.
Стоит отметить, что переменная цикла автоматически будет объявлена локальной, как это принято, например, а языках семейства Pascal. Исключение - зарезервированная переменная result.
См. также Расширение синтаксиса QPILE: Return и Loop, M4 документация, ForCollection и ForTable
