2012-12-12 5 views
1

식별을 인식 할 수 없습니다에만 문자 'A'ID에 대한 ANTLR 문법에

ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* 
    ; 

내 규칙을 구문 분석 할 때, 단지 문자 'A'인식되지 않을 수 있지만, 'A'또는 'A'또는 'a'또는 'b'또는 'c'또는 'AAAZzzzxx'또는 .... 'a'를 제외한 우주의 모든 것들은 렉서에 의해 왜 'a'가 아닌지 인식 할 수 있습니까 ??

오류 :

mismatched input 'a' expecting 'u0005' 

감사합니다!

+2

은 파서 문법 참조' 'a'' 명시 적으로 어디 있습니까? 그렇다면, ANTLR은 조용히'ID '가 그것을 볼 수있는 기회를 갖기 전에'a '와 일치하는 새로운 렉서 규칙을 만들어 내고있다. 문법의 해당 부분을 질문에 추가 할 수 있다면 (추측 일 뿐이다) 누군가가 문제를 해결하는 데 도움을 줄 수 있습니다. – user1201210

+0

A : 'a'; \t \t이 basters를 발견했습니다 ... 감사합니다, 간단하지만 까다 롭습니다 :) – Yank

답변

-1

규칙이 0 자와 일치 할 수 있으므로 렉서가 얽히게 될 것입니다. 필요한 항목 :

ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')+ 
; 

'*'대신 '+'가 표시되어 있습니까?

+3

질문에서'ID' 규칙은 하나 이상의 문자와 일치합니다. 이 답안의 규칙은 두 개 이상의 문자와 일치합니다. – user1201210

+1

텐 후크가 옳다. – Yank