0
SQL 문에 대한 파서를 작성 중입니다. 내가 같이 입력을 통과 한ANTLR 파서 일치하는 토큰이 아닌 식별자
IDENTIFIER
:
(LETTER | '_') (NAMECHAR)*
;
REAL_NUMBER
: NUMBER_VALUE ('e' (PLUS | MINUS)? DIGIT)?
;
fragment
NUMBER_VALUE
: {numberDotValid()}?=> DIGIT DOT DIGIT?
| DOT DIGIT
| DIGIT
;
fragment NAMECHAR
: LETTER | DIGIT | '.' | '-' | '_' |'%'
;
fragment DIGIT
: '0' .. '9' ('0' .. '9')*
;
fragment LETTER
: 'a'..'z'
| 'A'..'Z'
;
로
tokens
{
CREATE = 'create';
TABLE = 'table';
YEAR = 'year';
NAME = 'name';
...
}
및 식별자 : 나는 같은 키워드에 대한 토큰을 정의 (표 nulll하지 SMALLINT)
만들기 테이블 EMP;
식별자가 일치하지 않는 입력이 일치하지 않습니다. 오류는 (Table smallint ...) 부분에 있습니다. 토큰 우선 순위가 파서 규칙보다 높고 현재 토큰 테이블과 일치한다는 것을 알고 있습니다. 그러한 유형의 문제를 처리하는 올바른 방법은 무엇입니까?
도와주세요.
가 사용하는 접근 방식 er 토큰을 사용하고 대소 문자를 구분하지 않는 렉서를 사용하십시오. –
내 언어 파서에서 식별자가 될 수있는 많은 토큰이 있기 때문에 너무 복잡합니다. 따라서 모든 토큰에 대해 이렇게하는 것이 좋지 않습니다. – user82504
아니요, 핵심어 일뿐입니다. antrl이 만든 방식이기도합니다. – Jersono