如何区分“ 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)*
;
...