使用ANTLR 4.6,2016年11月23日的快照。
我有两个规则,每个规则都是左递归的。我扩展了几个替代方案来暴露左递归。 ANTLR4处理这个问题,因为左递归是显式的。但是,这两个规则也是相互左递归的。
如何解决相互左递归问题,以便规则不会完全混乱?现在我有很好的评论显示扩展的内容,我把它移到了primary2和constant_primary2,它们不参与相互的左递归。
constant_primary :
constant_primary2
| primary '.' method_call_body
| constant_primary '\'' '(' constant_expr ')'
;
primary :
primary2
| primary '.' method_call_body
| constant_primary '\'' '(' expr ')'
;
答案 0 :(得分:1)
一种选择是使用群组ID com.tunnelvisionlabs 切换到使用my fork的ANTLR 4 through Maven。此fork处理相互左递归,同时生成与您在语法中实际写入的表单匹配的解析树。
请注意,此功能有点实验性。如果您遇到问题,请随意在问题跟踪器上发布我的分叉问题。