Поскольку правило должно начинаться с IDENTIFIER
, за которым следует LPAREN
, я не вижу, чтобы оно когда-либо совпадало с вводом, например typedef VOID (
, поскольку typedef
не учитывается.
Только глядя на macroExpansion
:
macroExpansion
: id=IDENTIFIER WS? LPAREN WS? RPAREN -> ^(EXPAND $id)
| id=IDENTIFIER WS? LPAREN WS? macArgs WS? RPAREN -> ^(EXPAND $id macArgs?)
; // ^ ^
// | |
// not optional optional
Я бы немного скептически отнесся к остальной части грамматики: macArgs?
сделан необязательным в правиле перезаписи, но это неверно: левая часть не является обязательной. Это можно переписать так:
macroExpansion
: id=IDENTIFIER WS? LPAREN WS? (macArgs WS?)? RPAREN -> ^(EXPAND $id macArgs?)
;
В этом случае macArgs?
является правильным.