2014-05-13 131 views
1

我剛剛遇到了ANTLR 4.2.2的一個奇怪問題:ANTLR4相互左遞歸

考慮一個(簡化的)java語法。這並不編譯:

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

ANTLR輸出下列錯誤:

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

是的,我也看到了左遞歸。但我沒有看到一個相互左遞歸,只是一個通常的。

當我刪除了圍繞(classOrInterfaceType)的括號時,它編譯得很好。當然,括號是多餘的,但語法是自​​動生成的,並且代碼生成器在某些情況下總是插入括號。那麼這裏有什麼問題?

+1

可能是一個錯誤,在報告他們:https://github.com/antlr/antlr4/issues?milestone=4&sort=updated&state=open –

+0

好主意,做了! https://github.com/antlr/antlr4/issues/564 – gexicide

回答