看看ANTLR备忘单:
!不要在AST中包含
^AST根节点
并且^还可以用于重写规则:... -> ^( ... ).例如,以下两个解析器规则是等效的:
expression
: A '+'^ A ';'!
;
Run Code Online (Sandbox Code Playgroud)
和:
expression
: A '+' A ';' -> ^('+' A A)
;
Run Code Online (Sandbox Code Playgroud)
两者都创建以下AST:
+
/ \
A A
Run Code Online (Sandbox Code Playgroud)
换句话说:它+是以root身份创建的,两者A是它的子;节点,并且从树中省略.