我正在解析一种类似SQL的语言,我有以数字开头的字符串的问题:
SELECT 90userN被解析为SELECT 90 AS userN
由于我删除了空格,它以某种方式获得数字作为名称和字符串作为别名。
我甚至不知道从哪里开始。
语法:result_column : '*'
| table_name '.' '*'
| table_name '.' any_name
| expr
any_name : keyword
| IDENTIFIER
| STRING_LITERAL
| '(' any_name ')'
;
expr: literal_value;
literal_value :
NUMERIC_LITERAL
| STRING_LITERAL
| DATE_LITERAL
| IDENTIFIER
| NULL
;
IDENTIFIER :
'"' (~'"' | '""')* '"'
| '`' (~'`' | '``')* '`'
| '[' ~']'* ']'
| [a-zA-Z_] [a-zA-Z_0-9]*;
STRING_LITERAL : ''' ( ~''' | '''' )* ''' ;
NUMERIC_LITERAL :
DIGIT+ ( '.' DIGIT* )? ( E [-+]? DIGIT+ )?
| '.' DIGIT+ ( E [-+]? DIGIT+ )? ;
DATE_LITERAL: DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT;
SQL中的标识符不能以数字开头,这在IDENTIFIER
规则的最后一个替代方案中非常清楚:[a-zA-Z_] [a-zA-Z_0-9]*;
我认为你已经在使用它,但请参考SQLite4语法示例