2014-05-13 3 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

답변