我刚刚遇到了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)
周围的圆括号时,它编译得很好。当然,括号是多余的,但是语法是自动生成的,代码生成器总是在某些情况下插入括号。那么问题是什么呢?
已经确认这是一个bug。该修复计划在下一个里程碑4.x中进行。见https://github.com/antlr/antlr4/issues/564