ANTLR4 Mutual left recursion

2019-07-16 06:14发布

I just ran into a strange problem with ANTLR 4.2.2:

Consider a (simplified) java grammar. This does not compile:

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

ANTLR outputs the following error:

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

Yes, I also see a left recursion. But I do not see a mutual left recursion, only a usual one.

When I remove the parenthesis around (classOrInterfaceType), then it compiles fine. Of course, the parenthesis are superfluous, but the grammar is generated automatically and the code generator always inserts parenthesis in some situations. So what is the problem here?

1条回答
戒情不戒烟
2楼-- · 2019-07-16 06:38

It has been confirmed that this is a bug. The fix is scheduled for the next milestone 4.x. See https://github.com/antlr/antlr4/issues/564

查看更多
登录 后发表回答