gpt4 book ai didi

antlr4 - ANTLR4 中的相互左递归规则

转载 作者:行者123 更新时间:2023-12-02 06:59:47 29 4
gpt4 key购买 nike

我不明白 ANTLR4 能够使用直接 let 递归实际上如何帮助我们。好吧,你可以编写一个可以识别语言的语法,好吧。但你很少停在这里。通常你想用解析树做一些事情。并且为了获得直接左递归而必须将多个规则合并为一个规则在这里没有帮助。

举个例子。假设我想定义 + 和 - 运算符并希望它们具有相同的优先级。在 GOLD 中我会写这样的东西:

expression
: binaryExpression
| unaryExpression
;

binaryExpression
: plusExpression
| minusExpression
;

plusExpression
: expression '+' unaryExpression

minusExpression
: expression '-' unaryExpression

当然在 ANTLR4 中我可以做到

expression
: expression '+' unaryExpression
| expression '-' unaryExpression
| unaryExpression
;

但是在生成的访问者中,我将只有 expressionunaryExpression 的方法。当我访问 ExpressionContext 时,我应该如何知道要做什么?是添加还是删减?

最佳答案

我找到了答案here .

可以像这样“标记”替代方案:

expression
: expression '+' unaryExpression # plusExpr
| expression '-' unaryExpression # minusExpr
| unaryExpression # unaryExpr
;

这样做之后你会发现在基础访问者中生成了相应的方法。

关于antlr4 - ANTLR4 中的相互左递归规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17561086/

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