什么^和!代表ANTLR语法

ssi*_*gh3 5 grammar antlr antlrworks antlr3

我很难搞清楚^和!代表ANTLR语法术语.

aio*_*obe 8

看看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是它的子;节点,并且从树中省略.