Я загружаю грамматику препроцессора c на веб-сайт antlr. Но у нее есть ошибка, и я понятия не имею, как ее исправить.ANTLR-грамматика для предварительного процессора C
macroExpansion
: id=IDENTIFIER WS? LPAREN WS? RPAREN -> ^(EXPAND $id)
| id=IDENTIFIER WS? LPAREN WS? macArgs WS? RPAREN -> ^(EXPAND $id macArgs?)
правило macroExpansion ошибется для кода ниже:
typedef VOID (WINAPI *PFIBER_START_ROUTINE)(LPVOID lpFiberParameter);
Поскольку лексемы следующих VOID будут рассматриваться в качестве аргументов, но на самом деле это просто VOID макрос не является функцией марко.
Как я могу изменить грамматику? Надеюсь, кто-нибудь может мне помочь. Спасибо!