从左递归规则中删除相互左递归

时间:2016-11-25 04:22:10

标签: antlr4 left-recursion

使用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 ')'
  ;

1 个答案:

答案 0 :(得分:1)

一种选择是使用群组ID com.tunnelvisionlabs 切换到使用my fork的ANTLR 4 through Maven。此fork处理相互左递归,同时生成与您在语法中实际写入的表单匹配的解析树。

请注意,此功能有点实验性。如果您遇到问题,请随意在问题跟踪器上发布我的分叉问题。