Я использую ^ и! Операторы устанавливают корневой узел и не должны быть включены в AST соответственно. Тем не менее, это не имеет значения в дереве, которое генерируется ANTLRWorks. Поэтому я не уверен, что моя грамматика неверна или ANTLRWorks просто не создает правильное дерево.
Вот фрагмент моей грамматики
expr
: '('! logExpr ')'!;
Эти скобки не должны быть включены в AST.
addExpr
: multExpr ( (PLUS|MINUS)^ multExpr )*;
PLUS или MINUS должны быть корневым узлом в AST.
Однако ни одна из этих вещей не происходит так, как я ожидаю. Не имеет значения, когда я их снимаю или кладу обратно. ANTLRWorks 1.4.3 ANTLR 3.4