2014-04-21 2 views
0

구문 분석시 다음 오류가 발생하지만 그 이유는 확실하지 않습니다.antlr4 SQL 구문 분석기의 입력 오류가 잘못되었습니다.

라인 1:24가 일치하지 않음 '1'이 (가) NUM 라인 1:24가 일치하지 않습니다. '1'이 (가) NUM 을 예상합니다. abc 제한 1을 선택하십시오.

-

문법 SQLCmd;

parse : sql ;

SQL : (((열 (','열) ) '선택'| '에서'카운트)) 테이블을 ('여기서'조건 ((그리고 | 또는) 조건)) * (제한) ? ';' ;

한계 : '제한'NUM ;

num : NUM ;

카운트 : '카운트 (*)' ;

열 : VAL ;

테이블 : VAL ;

조건 : (왼쪽 '='오른쪽) + ;

및 : '및' ;

또는 '또는' ;

왼쪽 : VAL ;

오른쪽 : VAL ;

VAL : [* a-z0-9A-Z ~?] + ;

NUM : [0-9] + ;

WS : [\ t \ n \ r] + -> skip ;

답변

0

대신 VAL이있는 것 같습니다.

은 "1"모두 VALNUM하지만 VAL이 먼저 있기 때문에 모든 NUMVAL되기 때문에, NUM 토큰이 결코 것입니다.

VAL 규칙 앞에 NUM 규칙을 넣으십시오.

렉서에서 토큰 유형을 살펴보면 혼자서 발견 할 수 있습니다. 이것은 존재하는 토큰의 유형을 알려줍니다.

@TheAntlrGuy : 아마도 실제 토큰 유형을 오류 메시지에 추가 할 수 있습니까?

+0

고마워요! 파서 규칙에서 '제한'NUM을 명시 적으로 말하면 왜 VAL이 먼저 일치합니까? – user3536913

+0

_all_ lexing은 파서가 관련되기 전에 수행됩니다. 이것은 문맥에 의존해서는 안되는 미리보기와 관련이 있습니다 ("문맥 자유 문법"참조). – Onur

관련 문제