我使用antlr进行解析sql条件查询,例如:
[where] Field1 = "Param1" and Field2 = "Param2"
对于这种情况,我有一个antlr条件:
andExpr
: inExpr
(
AND^
inExpr
)*
;
inExpr
: (eqcompareExpr)
(
IN^
args
)?
;
eqcompareExpr
: (compareExpr)
(
(EQUAL^|NOTEQ^|IS^|LIKE^)
(compareExpr)
)?
;
compareExpr
: addExpr
(
(LESS^|MORE^|LESSEQ^|MOREEQ^)
addExpr
)?
;
和令牌如:
LIKE : "like"
;
AND : "and"
;
OR : "or"
如何使用' contains'更改组合条件的antlr代码?像:
[where] Field1 = "Param1" and Contains (Field2, "Param2")
此外,查询可以是这样的:
[where] Contains (Field2, "Param2")
或
[where] Field1 = "Param1" or Contains (Field2, "Param2")
答案 0 :(得分:1)
以下规则可能满足您的需求
andExpr
: inOrContainsExpr
(
AND
inOrContainsExpr
)*
;
inOrContainsExpr: inExpr | containsExpr;
inExpr
: (eqcompareExpr) ( IN^ args ) ?
;
containsExpr
: CONTAINS^ args
;
等等。 希望这有帮助