2016-06-18 3 views
0

는 다음 ANTLR 3 문법을 감안할 때 :ANTLR 문법 모호성

statement1 : CHAR_KEYWORD; 
statement2 : DIGIT_KEYWORD (COLON_KEYWORD DIGIT_KEYWORD)?; 

COLON_KEYWORD : ':'; 
DIGIT_KEYWORD : '0'..'9'; 
CHAR_KEYWORD : 'a'..'z' | COLON_KEYWORD; 

다음 텍스트 분석 :

1 

규칙은 문장 2 픽업이 텍스트를. 이것은 좋다.

1:2 

규칙 문장 2이 텍스트를 선택하지 않고 오류를 제공합니다 : 그러나, 하나는 이제 다음과 같은 텍스트가있는 경우. 이는 ":"가 규칙의 일부가 아닌 CHAR_KEYWORD와 일치하기 때문입니다. CHAR_KEYWORD에서 COLON_KEYWORD를 제거하면 statement2 규칙은 statement1 규칙이 현재 필요에 따라 작동하지 않는다는 점을 제외하고는 정상적으로 작동합니다. 이 문법을 어떻게 리펙토링하여 문 1문 2이 예상대로 작동 할 수 있습니까? 감사!

답변

0

CHAR_KEYWORD에서 COLON_KEYWORD alt를 제거하고 대신 alt1로 statement1에 추가하십시오.

statement1 : CHAR_KEYWORD | COLON_KEYWORD; 
statement2 : DIGIT_KEYWORD (COLON_KEYWORD DIGIT_KEYWORD)?; 

COLON_KEYWORD : ':'; 
DIGIT_KEYWORD : '0'..'9'; 
CHAR_KEYWORD : 'a'..'z';