[BEEP] Как бы нам обустроить макросы
От: dmz Россия  
Дата: 04.03.09 17:49
Оценка:
Хочется странного, то есть макросов. Для начала — хотя бы самые примитивные, но хотелось бы честные — так что бы потом можно было потом извлечь из этого нечто большее.

По идее, для компилируемого языка макросы должны выглядеть как-то так:

1) В процессе разбора AST мы разбираем макрос — соответственно, у нас должны быть некие токены, которые определяют начало и конец макроса. Ну или хотя бы начало, конец может быть каким-то повторно используемым токеном.

2) Определение макроса может быть, наверное, распарсено тем же самым разборщиком, который разбирает и основной синтаксис.

3) Насколько я себе представляю, результатом разбора определения макроса является построение динамического разборщика

4) В месте, где макрос используется (вероятно, тоже надо отбить какими-то спец. токенами) — поток от начала макры до конца скармливается построенному разборщику, интерпретируется и результат интепретации применяется к некоему узлу AST.

Правильно ли это понимание, и есть ли какие-то более простые подходы? Серьезная засада мне тут видится с тем, что, например, сейчас очень многие проверки — вплоть до типизации некоторых моментов — делаются в парсере, совсем декларативно. Возможность делать произвольные преобразования над AST приведет к дополнительному анализу уже после раскрытия макросов, что может быть нетривиально, и вообще время компиляции никак не сократит.

Конкретно сейчас, хочется научиться определять именованные константы времени компиляции — но по идее, любых типов — так что, что бы делать константные, например, туплы — уже нужны честные макросы.

Где бы посмотреть? Кроме немерле есть что нибудь статическое, вменяемое и с макрами (не надо только про с++) ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.