gpt4 book ai didi

antlr - 在 antlr 中插入符号前缀而不是后缀

转载 作者:行者123 更新时间:2023-12-04 18:47:48 33 4
gpt4 key购买 nike

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

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


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

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

谢谢,
院长

最佳答案

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

例如,规则:

p : A B^ C;

创建以下 AST:
  B
/ \
A C

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

以之前的规则为例:
p : A B C;

并且您想反转 token ,但保持 ASST“平坦”(无根节点)。这可以使用以下重写规则来完成:
p : A B C -> C B A;

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

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

有关的:
  • Tree construction
  • How to output the AST built using ANTLR?
  • 关于antlr - 在 antlr 中插入符号前缀而不是后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11365781/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com