Как сделать условную компиляцию на Coco/R?
Т.е. обработку вот такой конструкции:
Код:
<* IF condition THEN *>
<* ELSIF condition THEN *>
<* ELSE *>
<* END *>
По идее в зависимости от condition лексер должен был бы выкидывать всё лишнее. Как бы это покрасивше сделать на Coco/R?
Далее. Прагмы. Но не простые, а влияющие на синтаксис. Прагмы вида:
Код:
<* +O2NUMEXT *>
Если подобная прагма имеется, то в синтаксисе нет "**", если же прагма есть, то в синтаксисе внезапно появляется правило:
Код:
Exponent = Factor { "**" Factor }.
Соответственно правило Term модифицируется:
Код:
Term = Exponent { MulOp Exponent }.
Это простейшее. Есть прагмы меняющие (расширяющие) синтаксис сильнее.
Как тут быть?
Ну и наконец наши любимые ассемблерные вставки. Внутри блока начинающегося на "ASM" и оканчивающийся на "END" может быть некий произвольный ассемблер (синтаксис его мы не знаем). Нам нужно его хотя бы научиться игнорировать. А лучше -- выкусывать целиком, чтобы в последствии отдать этот кусок некой внешней утилиты на анализ/компилинг. Как это лучше сделать?