我刚刚在 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)
周围的括号时,它可以正常编译。当然,括号是多余的,但语法是自动生成的,并且代码生成器在某些情况下总是插入括号。那么这里有什么问题呢?
请您参考如下方法:
已确认这是一个错误。该修复计划在下一个里程碑 4.x 中进行。 请参阅https://github.com/antlr/antlr4/issues/564