Antlr 4文本和数字一起



我正在解析一种类似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语法示例

相关内容

  • 没有找到相关文章

最新更新