[英]How to fix mutual left recursion in ANTLR4
I have two rules that are mutually left recursive:我有两个相互左递归的规则:
frag : ID
| NUMBER
| TRUE
| FALSE
| expr
;
expr: frag (PLUS | MINUS) frag
| LBR expr RBR
| frag
;
And the issue is: The following sets of rules are mutually left-recursive [frag, expr]
问题是:
The following sets of rules are mutually left-recursive [frag, expr]
I'm new to ANTLR4 and am having difficulty removing this mutual left recursion.我是 ANTLR4 的新手,很难消除这种相互左递归。
I understand that left recursion can be removed such that:我知道可以删除左递归,以便:
A -> Aa | b
-- becomes --
A -> bR
R -> aR | ε
See this answer here 在这里看到这个答案
How might I go about this?我该怎么办?
Indirect left recursion isn”t allowed, but direct left recursion is.不允许间接左递归,但允许直接左递归。 This will work fine:
这将正常工作:
expr: expr (PLUS | MINUS) expr
| LBR expr RBR
| ID
| NUMBER
| TRUE
| FALSE
;
And if you still want a separate frag
rule, you can do this of course:如果你仍然想要一个单独的
frag
规则,你当然可以这样做:
frag : ID
| NUMBER
| TRUE
| FALSE
;
expr: expr (PLUS | MINUS) expr
| LBR expr RBR
| frag
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.