2016-11-25 121 views
0

使用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

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

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