2015-10-20 21 views
-1

我解析像語言SQL和我有串的問題,以數字開頭:ANTLR的4文本及數位一起

SELECT 90userN進行解析,以選擇90 AS用戶N

因爲我刪除空格,它以某種方式獲取數字作爲名稱和字符串作爲別名。

我甚至不知道從哪裏開始。

語法:SQL

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; 
+3

將是一個很好的開始張貼一些源代碼。這些天水晶球很貴。 –

+0

添加了語法的部分 –

+0

看起來似乎「刪除空格」的方式不正確。在任何情況下,90userN都不是語法中的字符串;它實際上是一個語法錯誤 - 既不是一個標識符也不是一個數字 –

回答

0

標識符不能以數字開頭,這是在你的IDENTIFIER統治的最後一個選擇是很清楚:你已經在使用它[a-zA-Z_] [a-zA-Z_0-9]*;

我想,而是指到SQLite4 grammar example