Antlr间接左递归



我看到这个问题被问了很多次,也见过人"解决";它……但它要么让我困惑,要么没有解决我的具体情况:

以下是大致情况:

block: statement*;
statement: <bunch of stuff> | expressionStatement;
expression_statement: <more stuff, for example> | method_invoke;
method_invoke: expression LEFT_PAREN <args...> RIGHT_PAREN block;
expression: <bunch of stuff> | expression_statement;

表达式开头的expression_statement中的所有内容都使用间接左递归,我不知道如何修复它,同时仍然可以将这些语法用作语句,以便它们在块中可用(可以执行类似Print("hello world");的操作它本身(一个语句),但也可以做一些类似int c = a + b.getValue()的事情,作为表达式(一个表达式)的一部分。。。

我该如何以不同的方式处理它?

如果你需要更多信息,请让我知道,我会尽力提供

我知道要解决间接左递归,我必须复制一个或多个规则。。。我希望有一种比网上写的和这里说的更好的方法来处理它,但没有。我最终做到了,它奏效了,谢谢

最新更新