我收到了这个着名的错误
由于递归规则调用,规则具有非LL(*)决策
用于遵循简单的语法。
expr
: INTEGER
| '(' expr '+' expr ')'
;
bool_expr
: '(' bool_expr 'and' bool_expr ')'
| '(' expr '<' expr ')'
;
INTEGER
: '0'..'9'+
;
WS
: (' ' | '\t' | ('\r')? '\n')+ {$channel = HIDDEN; }
;
我已经按照以下答案进行了检查。
This Question:我不想将数学表达式和布尔表达式合并为一个,所以我不必通过AST验证它。我试图分别保留这两个表达式。
This Question维基百科无法帮助我了解这一具体情况。而且我认为我不能简化这种语法。
This Question我认为我们有不同的情况。
我无法理解这里的左递归是什么。我没有看到任何A-->Ab|b
或类似的东西。任何人都可以帮我解决这个问题。
请注意以下内容。
答案 0 :(得分:1)
问题是你在bool_expr的两个人的开头就已经开始了。
A-->'('AB|'('B
也包含递归问题。 @see生成的解析器。
解决方案是在语法中添加回溯选项:
options {
backtrack=true;
}