ANTLR, определения макросов в стиле C - PullRequest
0 голосов
/ 27 июля 2010

Какой самый простой (или лучший) способ реализовать определения макросов в ANTLR? То, что я хочу, это механизм, похожий на тот, который присутствует в языке C / C ++:

#define FUNCTION(a, b) a+b
#define PI 3.1415

Как и когда я должен выполнить замену?

1 Ответ

1 голос
/ 02 августа 2010

Если вы выполняете препроцессор в стиле C, то вы захотите сделать отдельный первый проход для предварительной обработки (что означает этот термин - проход обработки перед вашим стандартным проходом lex / parse) .

Как именно вы хотите выполнить передачу, зависит от вас - вы можете передать введенный текст одной грамматике в antlr, взять результат и передать его другой грамматике и т. Д.

Или вы можете создавать отдельные программы, которые могут принимать ввод на stdin и выводить на stdout, или передавать текст между каналами и т. Д.

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

...