我不明白 ANTLR4 能够使用直接 let-recursion 对我们有何帮助。好的,您可以编写一个可以识别语言的语法,好吧。但你很少停在这里。通常你想对解析树做一些事情。并且为了获得直接的左递归而不得不将多个规则合二为一并没有帮助。
一个例子。假设我想定义 + 和 - 运算符并希望它们具有相同的优先级。在 GOLD 中,我会写这样的东西:
expression
: binaryExpression
| unaryExpression
;
binaryExpression
: plusExpression
| minusExpression
;
plusExpression
: expression '+' unaryExpression
minusExpression
: expression '-' unaryExpression
当然在ANTLR4中我可以做到
expression
: expression '+' unaryExpression
| expression '-' unaryExpression
| unaryExpression
;
但是在生成的访问者中,我将只有expression
和的方法unaryExpression
。当我访问时,我应该如何知道该怎么做ExpressionContext
?是加法还是减法?