ANTLR4相互左递归

时间:2014-05-13 08:36:40

标签: antlr grammar antlr4 left-recursion

我刚刚遇到ANTLR 4.2.2的一个奇怪问题:

考虑一个(简化的)java语法。这不编译:

 classOrInterfaceType
    :  (classOrInterfaceType) '.' Identifier
    |  Identifier 
    ;

ANTLR输出以下错误:

error(119): Java.g4::: The following sets of rules are mutually left-recursive [classOrInterfaceType]

是的,我也看到了一个左递归。但是我没有看到相互左递归,只有通常的递归。

当我删除(classOrInterfaceType)周围的括号时,它编译得很好。当然,括号是多余的,但语法是自​​动生成的,代码生成器总是在某些情况下插入括号。那么这里的问题是什么?

1 个答案:

答案 0 :(得分:2)

已经确认这是一个错误。修复计划在下一个里程碑4.x. 见https://github.com/antlr/antlr4/issues/564