2013-02-22 2 views
1

antlr 4로 파일을 구문 분석하려고하는데 왜 두 자리 이상의 정수가 구문 분석되지 않는지 알 수 없습니다. (줄 79:44 입력 '17'에서 실용적인 대안 없음). ANTLR4 정수 구문 분석이 실패했습니다.

는 여기에 전혀 작동하지 않습니다 INT

fragment DIGIT : [0-9] ; 
integer : DIGIT+ ; 

의 정의입니다 ENTIER 문법 http://pastebin.com/rxktvUBi

입니다. 이 버전

integer : ('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9')+ ; 

은 1 자리 정수에서만 작동합니다.

는 parsified없는 라인의 일례이다

struct p_77_bound_17_or: ((bound(MEK)<=17) | (bound(MEKPP)<=17)) 

문제는

simple_expression: 

    (integer)+ 

주에 해당 I 식별자를 대신 정수

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


identifier: ID; 

사용할 경우

simple_expression: 

    identifier 

그 작품.

왜? 어떤 아이디어?

답변

7

integer 규칙은 렉서 규칙이 아닌 구문 분석 규칙입니다. '0', '1' 등이 참조하는 리터럴은 암시 적으로 각각 한자리 숫자와 일치하는 렉서 규칙으로 변환됩니다.

INTEGER : '0'..'9'+; 

또는 단순히이 ANTLR 4 :

INTEGER : [0-9]+; 
대신 다음 렉서 규칙을 만들어야합니다
관련 문제