final public Expression comparisonExpression()

in filter/src/main/java/org/apache/rocketmq/filter/parser/SelectorParser.java [195:364]


    final public Expression comparisonExpression() throws ParseException {
        Expression left;
        Expression right;
        Expression low;
        Expression high;
        String t, u;
        boolean not;
        ArrayList list;
        left = unaryExpr();
        label_4:
        while (true) {
            switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
                case NOT:
                case BETWEEN:
                case IN:
                case CONTAINS:
                case STARTSWITH:
                case ENDSWITH:
                case 27:
                case 28:
                case 29:
                case 30:
                    break;
                default:
                    jjLa1[5] = jjGen;
                    break label_4;
            }
            switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
                case 27:
                    jj_consume_token(27);
                    right = unaryExpr();
                    left = ComparisonExpression.createGreaterThan(left, right);
                    break;
                case 28:
                    jj_consume_token(28);
                    right = unaryExpr();
                    left = ComparisonExpression.createGreaterThanEqual(left, right);
                    break;
                case 29:
                    jj_consume_token(29);
                    right = unaryExpr();
                    left = ComparisonExpression.createLessThan(left, right);
                    break;
                case 30:
                    jj_consume_token(30);
                    right = unaryExpr();
                    left = ComparisonExpression.createLessThanEqual(left, right);
                    break;
                case CONTAINS:
                    jj_consume_token(CONTAINS);
                    t = stringLitteral();
                    left = ComparisonExpression.createContains(left, t);
                    break;
                default:
                    jjLa1[8] = jjGen;
                    if (jj_2_2(2)) {
                        jj_consume_token(NOT);
                        jj_consume_token(CONTAINS);
                        t = stringLitteral();
                        left = ComparisonExpression.createNotContains(left, t);
                    } else {
                        switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
                            case STARTSWITH:
                                jj_consume_token(STARTSWITH);
                                t = stringLitteral();
                                left = ComparisonExpression.createStartsWith(left, t);
                                break;
                            default:
                                jjLa1[9] = jjGen;
                                if (jj_2_3(2)) {
                                    jj_consume_token(NOT);
                                    jj_consume_token(STARTSWITH);
                                    t = stringLitteral();
                                    left = ComparisonExpression.createNotStartsWith(left, t);
                                } else {
                                    switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
                                        case ENDSWITH:
                                            jj_consume_token(ENDSWITH);
                                            t = stringLitteral();
                                            left = ComparisonExpression.createEndsWith(left, t);
                                            break;
                                        default:
                                            jjLa1[10] = jjGen;
                                            if (jj_2_4(2)) {
                                                jj_consume_token(NOT);
                                                jj_consume_token(ENDSWITH);
                                                t = stringLitteral();
                                                left = ComparisonExpression.createNotEndsWith(left, t);
                                            } else {
                                                switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
                                                    case BETWEEN:
                                                        jj_consume_token(BETWEEN);
                                                        low = unaryExpr();
                                                        jj_consume_token(AND);
                                                        high = unaryExpr();
                                                        left = ComparisonExpression.createBetween(left, low, high);
                                                        break;
                                                    default:
                                                        jjLa1[11] = jjGen;
                                                        if (jj_2_5(2)) {
                                                            jj_consume_token(NOT);
                                                            jj_consume_token(BETWEEN);
                                                            low = unaryExpr();
                                                            jj_consume_token(AND);
                                                            high = unaryExpr();
                                                            left = ComparisonExpression.createNotBetween(left, low, high);
                                                        } else {
                                                            switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
                                                                case IN:
                                                                    jj_consume_token(IN);
                                                                    jj_consume_token(31);
                                                                    t = stringLitteral();
                                                                    list = new ArrayList();
                                                                    list.add(t);
                                                                    label_5:
                                                                    while (true) {
                                                                        switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
                                                                            case 32:
                                                                                break;
                                                                            default:
                                                                                jjLa1[6] = jjGen;
                                                                                break label_5;
                                                                        }
                                                                        jj_consume_token(32);
                                                                        t = stringLitteral();
                                                                        list.add(t);
                                                                    }
                                                                    jj_consume_token(33);
                                                                    left = ComparisonExpression.createInFilter(left, list);
                                                                    break;
                                                                default:
                                                                    jjLa1[12] = jjGen;
                                                                    if (jj_2_6(2)) {
                                                                        jj_consume_token(NOT);
                                                                        jj_consume_token(IN);
                                                                        jj_consume_token(31);
                                                                        t = stringLitteral();
                                                                        list = new ArrayList();
                                                                        list.add(t);
                                                                        label_6:
                                                                        while (true) {
                                                                            switch ((jjNtk == -1) ? jj_ntk() : jjNtk) {
                                                                                case 32:
                                                                                    break;
                                                                                default:
                                                                                    jjLa1[7] = jjGen;
                                                                                    break label_6;
                                                                            }
                                                                            jj_consume_token(32);
                                                                            t = stringLitteral();
                                                                            list.add(t);
                                                                        }
                                                                        jj_consume_token(33);
                                                                        left = ComparisonExpression.createNotInFilter(left, list);
                                                                    } else {
                                                                        jj_consume_token(-1);
                                                                        throw new ParseException();
                                                                    }
                                                            }
                                                        }
                                                }
                                            }
                                    }
                                }
                        }
                    }
            }
        }
        return left;
    }