Antlr:创建组合运算符

时间:2018-02-09 04:44:29

标签: antlr

我使用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")

1 个答案:

答案 0 :(得分:1)

以下规则可能满足您的需求

andExpr
    :   inOrContainsExpr
        (
            AND
            inOrContainsExpr
        )*
    ;

inOrContainsExpr:   inExpr | containsExpr;

inExpr
    :   (eqcompareExpr) ( IN^ args ) ?
    ;

containsExpr
    :   CONTAINS^ args
    ;

等等。 希望这有帮助