ANTLR - 从'IS NULL'中区分'IS NOT NULL'

时间:2014-06-23 10:31:35

标签: parsing antlr grammar antlr3

如何区分“ IS NOT NULL ”与“ IS NULL ”?

'IS'和'IS NOT'在解析器规则中定义,在另一个规则中定义为'NULL',第二个遵循第一个规则。

当我写'IS NULL'时,解析器除了'IS NOT NULL'之外,因为第二个单词都以'N'开头。

我如何区分两者?


语法文件

query
    :   expr EOF -> ^(QUERY expr)   
    ;

expr
    :   logical_expr
    ;

logical_expr
    :   equality_expr (logical_op^ equality_expr)*
    ;

equality_expr
    :   ID equality_op atom     -> ^(equality_op ID atom)
    ;

atom
    :   ID
    ;

equality_op
    :   '='
    |   '!='
    |   'IN'
    |   'NOT IN'
    |   'IS'
    |   'IS NOT'
    ;

logical_op
    :   'AND'
    |   'OR'
    ;

Number
    :   Int ('.' Digit*)?
    ;

ID
    :   ('a'..'z' | 'A'..'Z' | '_' | '.' | '-' | Digit)* 
    ;

... 

0 个答案:

没有答案