인용 된 식별자 (테이블 이름, 필드 이름 등) 및 인용 된 리터럴 문자열을 허용하는 ANTLR의 SQL 문법 작업 중입니다.ANTLR 리터럴 및 인용 된 ID 구문 분석
이 문법은 따옴표로 묶인 입력을 항상 "QUOTED_LITERAL"로 간주하고 ID는 따옴표로 묶지 않는 것으로 보입니다.
- 입력 : 'blahblah'결과, 예상대로 string_literal 여기 내 결과입니다.
- 입력 : 필드 1 restul : table.field1 결과 :
- 입력 예상대로 COLUMN_NAME 결과 '필드 1' '테이블':.
- 입력을 예상대로 column_spec string_literal, MissingTokenException는 아래
은 내 누가 SQL 문법의 표현 부분에 대해 간단한 문법을 사용하는지, 인용 된 리터럴 이외의 인용 된 규칙과 일치하는 데 필요한 것이 무엇인지 식별하는 데 도움이 될 수 있다면 감사합니다.
grammar test;
expression
:
simpleExpression EOF!
;
simpleExpression
:
column_spec
| literal_value
;
column_spec
:
(table_name '.')? column_name
| ('\''table_name '\'''.')? '\'' column_name '\''
| ('\"'table_name '\"' '.')? '\"' column_name '\"'
;
string_literal: QUOTED_LITERAL ;
boolean_literal: 'TRUE' | 'FALSE' ;
literal_value :
(
string_literal
| boolean_literal
)
;
table_name :ID;
column_name :ID;
QUOTED_LITERAL:
( '\''
(('\\' '\\') | ('\'' '\'') | ('\\' '\'') | ~('\''))*
'\'' )
|
( '\"'
(('\\' '\\') | ('\"' '\"') | ('\\' '\"') | ~('\"'))*
'\"' )
;
ID
:
('A'..'Z' | 'a'..'z') ('A'..'Z' | 'a'..'z' | '_' | '0'..'9'| '::')*
;
WHITE_SPACE : (' '|'\r'|'\t'|'\n') {$channel=HIDDEN;} ;
답을 수락하면 "대답이없는"풀에서 질문을 제거합니다. 나는 그것을 upvote 수도 있습니다 ... –