Я пишу небольшую грамматику, используя ANLTR, и у меня есть такое правило:
operation : OPERATION (IDENT | EXPR) ',' (IDENT | EXPR);
...
OPERATION : 'ADD' | 'SUB' | 'MUL' | 'DIV' ;
IDENT : [a-z]+;
EXPR : INTEGER | FLOAT;
INTEGER : [0-9]+ | '-'[0-9]+
FLOAT : [0-9]+'.'[0-9]+ | '-'[0-9]+'.'[0-9]+
Теперь в слушателе внутри Java, как мне определить в случае такого сценария где операции состоят из IDENT и EXPR в том порядке, в котором они появляются? Очевидно, что правило может соответствовать как ADD 10, d
, так и ADD d, 10
. Но в слушателе для правила, сгенерированного ANTLR4, если есть и IDENT()
, и EXPR()
, как получить их порядок, так как я хочу назначить левое и правильные операнды правильно.
Я ломал голову над этим, есть какой-то простой способ или я должен переписать само правило? ctx.getTokens ()
требует, чтобы я указал тип токена, который побеждает цель, поскольку я не могу получить последовательность токенов в правиле, если я укажу их тип.