6

我知道插入符号后缀在 antlr 中的含义(即 make root)但是当插入符号是我一直在阅读的以下语法中的前缀时呢(这个语法是全新的,由学习 antlr 的新团队完成).. ..

selectClause
    : SELECT resultList -> ^(SELECT_CLAUSE resultList) 
    ;


fromClause
    : FROM tableList -> ^(FROM_CLAUSE tableList) 
    ;

另外,我知道 => 是什么意思,但是 -> 呢?-> 意味着什么?

谢谢,院长

4

1 回答 1

7

^用作内联树运算符,指示某个标记应成为树的根。

例如,规则:

p : A B^ C;

创建以下 AST:

  B
 / \
A   C

还有另一种创建使用重写规则的 AST 的方法。重写规则放置在解析器规则的替代项之后(或右侧)。您使用“箭头”开始重写规则->,然后是您希望在 AST 中出现的规则/令牌。

采取之前的规则:

p : A B C;

并且您想反转令牌,但保持 ASST“平坦”(无根节点)。这可以使用以下重写规则来完成:

p : A B C -> C B A;

如果你想创建一个类似于 的 AST p : A B^ C;,你开始重写规则^( ... )括号内的第一个令牌/规则将成为根节点。所以规则:

p : A B C -> ^(B A C);

产生与 相同的 AST p : A B^ C;


有关的:

于 2012-07-06T18:16:01.007 回答