Search in sources :

Example 21 with BindingDescr

use of org.drools.drl.ast.descr.BindingDescr in project drools by kiegroup.

the class JavaConsequenceBuilderTest method setupTest.

private void setupTest(String consequence, Map<String, Object> namedConsequences) {
    InternalKnowledgePackage pkg = CoreComponentFactory.get().createKnowledgePackage("org.drools");
    pkg.addImport(new ImportDeclaration("org.drools.mvel.compiler.Cheese"));
    KnowledgeBuilderConfigurationImpl conf = new KnowledgeBuilderConfigurationImpl();
    // this test was originally intended with PropertyReactive.ALLOWED:
    conf.setOption(PropertySpecificOption.ALLOWED);
    KnowledgeBuilderImpl kBuilder = new KnowledgeBuilderImpl(pkg, conf);
    ruleDescr = new RuleDescr("test consequence builder");
    ruleDescr.setConsequence(consequence);
    for (Entry<String, Object> entry : namedConsequences.entrySet()) {
        ruleDescr.addNamedConsequences(entry.getKey(), entry.getValue());
    }
    RuleImpl rule = descrToRule(ruleDescr);
    PackageRegistry pkgRegistry = kBuilder.getPackageRegistry(pkg.getName());
    DialectCompiletimeRegistry reg = kBuilder.getPackageRegistry(pkg.getName()).getDialectCompiletimeRegistry();
    context = new RuleBuildContext(kBuilder, ruleDescr, reg, pkg, reg.getDialect(pkgRegistry.getDialect()));
    rule.addPattern(new Pattern(0, new ClassObjectType(Cheese.class), "$cheese"));
    Pattern p = new Pattern(1, new ClassObjectType(Person.class), "$persone");
    Declaration declr = p.addDeclaration("age");
    final InternalReadAccessor extractor = PatternBuilder.getFieldReadAccessor(context, new BindingDescr("age", "age"), p, "age", declr, true);
    rule.addPattern(p);
    context.getDeclarationResolver().pushOnBuildStack(rule.getLhs());
    context.getDialect().getConsequenceBuilder().build(context, RuleImpl.DEFAULT_CONSEQUENCE_NAME);
    for (String name : namedConsequences.keySet()) {
        context.getDialect().getConsequenceBuilder().build(context, name);
    }
    context.getDialect().addRule(context);
    pkgRegistry.getPackage().addRule(context.getRule());
    kBuilder.compileAll();
    kBuilder.reloadAll();
}
Also used : Pattern(org.drools.core.rule.Pattern) BindingDescr(org.drools.drl.ast.descr.BindingDescr) RuleBuildContext(org.drools.compiler.rule.builder.RuleBuildContext) ClassObjectType(org.drools.core.base.ClassObjectType) KnowledgeBuilderConfigurationImpl(org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl) DialectCompiletimeRegistry(org.drools.compiler.compiler.DialectCompiletimeRegistry) RuleImpl(org.drools.core.definitions.rule.impl.RuleImpl) PackageRegistry(org.drools.compiler.compiler.PackageRegistry) KnowledgeBuilderImpl(org.drools.compiler.builder.impl.KnowledgeBuilderImpl) ImportDeclaration(org.drools.core.rule.ImportDeclaration) RuleDescr(org.drools.drl.ast.descr.RuleDescr) InternalReadAccessor(org.drools.core.spi.InternalReadAccessor) Declaration(org.drools.core.rule.Declaration) ImportDeclaration(org.drools.core.rule.ImportDeclaration) Person(org.drools.mvel.compiler.Person) InternalKnowledgePackage(org.drools.core.definitions.InternalKnowledgePackage)

Example 22 with BindingDescr

use of org.drools.drl.ast.descr.BindingDescr in project drools by kiegroup.

the class DRL6Expressions method unaryExpressionNotPlusMinus.

// $ANTLR start "unaryExpressionNotPlusMinus"
// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:500:1: unaryExpressionNotPlusMinus returns [BaseDescr result] : ( TILDE unaryExpression | NEGATION ue= unaryExpression | ( castExpression )=> castExpression | ( backReferenceExpression )=> backReferenceExpression | ( ({...}? (var= ID COLON ) ) | ({...}? (var= ID UNIFY ) ) )? ( ( xpathSeparator ID )=>left2= xpathPrimary |left1= primary ) ( ( selector )=> selector )* ( ( INCR | DECR )=> ( INCR | DECR ) )? );
public final DRL6Expressions.unaryExpressionNotPlusMinus_return unaryExpressionNotPlusMinus() throws RecognitionException {
    DRL6Expressions.unaryExpressionNotPlusMinus_return retval = new DRL6Expressions.unaryExpressionNotPlusMinus_return();
    retval.start = input.LT(1);
    Token var = null;
    Token COLON9 = null;
    Token UNIFY10 = null;
    BaseDescr ue = null;
    BaseDescr left2 = null;
    BaseDescr left1 = null;
    boolean isLeft = false;
    BindingDescr bind = null;
    try {
        // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:502:5: ( TILDE unaryExpression | NEGATION ue= unaryExpression | ( castExpression )=> castExpression | ( backReferenceExpression )=> backReferenceExpression | ( ({...}? (var= ID COLON ) ) | ({...}? (var= ID UNIFY ) ) )? ( ( xpathSeparator ID )=>left2= xpathPrimary |left1= primary ) ( ( selector )=> selector )* ( ( INCR | DECR )=> ( INCR | DECR ) )? )
        int alt54 = 5;
        int LA54_0 = input.LA(1);
        if ((LA54_0 == TILDE)) {
            alt54 = 1;
        } else if ((LA54_0 == NEGATION)) {
            alt54 = 2;
        } else if ((LA54_0 == LEFT_PAREN)) {
            int LA54_3 = input.LA(2);
            if ((synpred15_DRL6Expressions())) {
                alt54 = 3;
            } else if ((true)) {
                alt54 = 5;
            }
        } else if ((LA54_0 == DOT) && (synpred16_DRL6Expressions())) {
            alt54 = 4;
        } else if ((LA54_0 == BOOL || LA54_0 == DECIMAL || LA54_0 == DIV || LA54_0 == FLOAT || LA54_0 == HEX || LA54_0 == ID || (LA54_0 >= LEFT_SQUARE && LA54_0 <= LESS) || LA54_0 == NULL || LA54_0 == QUESTION_DIV || (LA54_0 >= STAR && LA54_0 <= STRING) || LA54_0 == TIME_INTERVAL)) {
            alt54 = 5;
        } else {
            if (state.backtracking > 0) {
                state.failed = true;
                return retval;
            }
            NoViableAltException nvae = new NoViableAltException("", 54, 0, input);
            throw nvae;
        }
        switch(alt54) {
            case 1:
                // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:502:9: TILDE unaryExpression
                {
                    match(input, TILDE, FOLLOW_TILDE_in_unaryExpressionNotPlusMinus2453);
                    if (state.failed)
                        return retval;
                    pushFollow(FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus2455);
                    unaryExpression();
                    state._fsp--;
                    if (state.failed)
                        return retval;
                }
                break;
            case 2:
                // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:503:8: NEGATION ue= unaryExpression
                {
                    match(input, NEGATION, FOLLOW_NEGATION_in_unaryExpressionNotPlusMinus2464);
                    if (state.failed)
                        return retval;
                    pushFollow(FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus2468);
                    ue = unaryExpression();
                    state._fsp--;
                    if (state.failed)
                        return retval;
                    if (state.backtracking == 0) {
                        if (buildDescr && ue != null) {
                            retval.result = ue.negate();
                        }
                    }
                }
                break;
            case 3:
                // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:509:9: ( castExpression )=> castExpression
                {
                    pushFollow(FOLLOW_castExpression_in_unaryExpressionNotPlusMinus2492);
                    castExpression();
                    state._fsp--;
                    if (state.failed)
                        return retval;
                }
                break;
            case 4:
                // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:510:9: ( backReferenceExpression )=> backReferenceExpression
                {
                    pushFollow(FOLLOW_backReferenceExpression_in_unaryExpressionNotPlusMinus2506);
                    backReferenceExpression();
                    state._fsp--;
                    if (state.failed)
                        return retval;
                }
                break;
            case 5:
                // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:511:9: ( ({...}? (var= ID COLON ) ) | ({...}? (var= ID UNIFY ) ) )? ( ( xpathSeparator ID )=>left2= xpathPrimary |left1= primary ) ( ( selector )=> selector )* ( ( INCR | DECR )=> ( INCR | DECR ) )?
                {
                    if (state.backtracking == 0) {
                        isLeft = helper.getLeftMostExpr() == null;
                    }
                    // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:512:9: ( ({...}? (var= ID COLON ) ) | ({...}? (var= ID UNIFY ) ) )?
                    int alt50 = 3;
                    int LA50_0 = input.LA(1);
                    if ((LA50_0 == ID)) {
                        int LA50_1 = input.LA(2);
                        if ((LA50_1 == COLON)) {
                            int LA50_3 = input.LA(3);
                            if (((inMap == 0 && ternOp == 0 && input.LA(2) == DRL6Lexer.COLON))) {
                                alt50 = 1;
                            }
                        } else if ((LA50_1 == UNIFY)) {
                            alt50 = 2;
                        }
                    }
                    switch(alt50) {
                        case 1:
                            // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:512:11: ({...}? (var= ID COLON ) )
                            {
                                // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:512:11: ({...}? (var= ID COLON ) )
                                // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:512:12: {...}? (var= ID COLON )
                                {
                                    if (!((inMap == 0 && ternOp == 0 && input.LA(2) == DRL6Lexer.COLON))) {
                                        if (state.backtracking > 0) {
                                            state.failed = true;
                                            return retval;
                                        }
                                        throw new FailedPredicateException(input, "unaryExpressionNotPlusMinus", "inMap == 0 && ternOp == 0 && input.LA(2) == DRL6Lexer.COLON");
                                    }
                                    // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:512:75: (var= ID COLON )
                                    // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:512:76: var= ID COLON
                                    {
                                        var = (Token) match(input, ID, FOLLOW_ID_in_unaryExpressionNotPlusMinus2534);
                                        if (state.failed)
                                            return retval;
                                        COLON9 = (Token) match(input, COLON, FOLLOW_COLON_in_unaryExpressionNotPlusMinus2536);
                                        if (state.failed)
                                            return retval;
                                        if (state.backtracking == 0) {
                                            hasBindings = true;
                                            helper.emit(var, DroolsEditorType.IDENTIFIER_VARIABLE);
                                            helper.emit(COLON9, DroolsEditorType.SYMBOL);
                                            if (buildDescr) {
                                                bind = new BindingDescr((var != null ? var.getText() : null), null, false);
                                                helper.setStart(bind, var);
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                        case 2:
                            // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:514:11: ({...}? (var= ID UNIFY ) )
                            {
                                // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:514:11: ({...}? (var= ID UNIFY ) )
                                // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:514:12: {...}? (var= ID UNIFY )
                                {
                                    if (!((inMap == 0 && ternOp == 0 && input.LA(2) == DRL6Lexer.UNIFY))) {
                                        if (state.backtracking > 0) {
                                            state.failed = true;
                                            return retval;
                                        }
                                        throw new FailedPredicateException(input, "unaryExpressionNotPlusMinus", "inMap == 0 && ternOp == 0 && input.LA(2) == DRL6Lexer.UNIFY");
                                    }
                                    // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:514:75: (var= ID UNIFY )
                                    // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:514:76: var= ID UNIFY
                                    {
                                        var = (Token) match(input, ID, FOLLOW_ID_in_unaryExpressionNotPlusMinus2575);
                                        if (state.failed)
                                            return retval;
                                        UNIFY10 = (Token) match(input, UNIFY, FOLLOW_UNIFY_in_unaryExpressionNotPlusMinus2577);
                                        if (state.failed)
                                            return retval;
                                        if (state.backtracking == 0) {
                                            hasBindings = true;
                                            helper.emit(var, DroolsEditorType.IDENTIFIER_VARIABLE);
                                            helper.emit(UNIFY10, DroolsEditorType.SYMBOL);
                                            if (buildDescr) {
                                                bind = new BindingDescr((var != null ? var.getText() : null), null, true);
                                                helper.setStart(bind, var);
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                    }
                    // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:518:9: ( ( xpathSeparator ID )=>left2= xpathPrimary |left1= primary )
                    int alt51 = 2;
                    int LA51_0 = input.LA(1);
                    if ((LA51_0 == DIV || LA51_0 == QUESTION_DIV) && (synpred17_DRL6Expressions())) {
                        alt51 = 1;
                    } else if ((LA51_0 == BOOL || LA51_0 == DECIMAL || LA51_0 == FLOAT || LA51_0 == HEX || LA51_0 == ID || (LA51_0 >= LEFT_PAREN && LA51_0 <= LESS) || LA51_0 == NULL || (LA51_0 >= STAR && LA51_0 <= STRING) || LA51_0 == TIME_INTERVAL)) {
                        alt51 = 2;
                    } else {
                        if (state.backtracking > 0) {
                            state.failed = true;
                            return retval;
                        }
                        NoViableAltException nvae = new NoViableAltException("", 51, 0, input);
                        throw nvae;
                    }
                    switch(alt51) {
                        case 1:
                            // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:518:11: ( xpathSeparator ID )=>left2= xpathPrimary
                            {
                                pushFollow(FOLLOW_xpathPrimary_in_unaryExpressionNotPlusMinus2631);
                                left2 = xpathPrimary();
                                state._fsp--;
                                if (state.failed)
                                    return retval;
                                if (state.backtracking == 0) {
                                    if (buildDescr) {
                                        retval.result = left2;
                                    }
                                }
                            }
                            break;
                        case 2:
                            // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:519:13: left1= primary
                            {
                                pushFollow(FOLLOW_primary_in_unaryExpressionNotPlusMinus2649);
                                left1 = primary();
                                state._fsp--;
                                if (state.failed)
                                    return retval;
                                if (state.backtracking == 0) {
                                    if (buildDescr) {
                                        retval.result = left1;
                                    }
                                }
                            }
                            break;
                    }
                    // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:522:9: ( ( selector )=> selector )*
                    loop52: while (true) {
                        int alt52 = 2;
                        int LA52_0 = input.LA(1);
                        if ((LA52_0 == DOT) && (synpred18_DRL6Expressions())) {
                            alt52 = 1;
                        } else if ((LA52_0 == NULL_SAFE_DOT) && (synpred18_DRL6Expressions())) {
                            alt52 = 1;
                        } else if ((LA52_0 == LEFT_SQUARE) && (synpred18_DRL6Expressions())) {
                            alt52 = 1;
                        }
                        switch(alt52) {
                            case 1:
                                // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:522:10: ( selector )=> selector
                                {
                                    pushFollow(FOLLOW_selector_in_unaryExpressionNotPlusMinus2677);
                                    selector();
                                    state._fsp--;
                                    if (state.failed)
                                        return retval;
                                }
                                break;
                            default:
                                break loop52;
                        }
                    }
                    if (state.backtracking == 0) {
                        if (buildDescr) {
                            String expr = input.toString(retval.start, input.LT(-1));
                            if (isLeft) {
                                helper.setLeftMostExpr(expr);
                            }
                            if (bind != null) {
                                if (bind.isUnification()) {
                                    expr = expr.substring(expr.indexOf(":=") + 2).trim();
                                } else {
                                    expr = expr.substring(expr.indexOf(":") + 1).trim();
                                }
                                bind.setExpressionAndBindingField(expr);
                                helper.setEnd(bind);
                                retval.result = bind;
                            }
                        }
                    }
                    // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:541:9: ( ( INCR | DECR )=> ( INCR | DECR ) )?
                    int alt53 = 2;
                    int LA53_0 = input.LA(1);
                    if ((LA53_0 == DECR || LA53_0 == INCR) && (synpred19_DRL6Expressions())) {
                        alt53 = 1;
                    }
                    switch(alt53) {
                        case 1:
                            // src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:541:10: ( INCR | DECR )=> ( INCR | DECR )
                            {
                                if (input.LA(1) == DECR || input.LA(1) == INCR) {
                                    input.consume();
                                    state.errorRecovery = false;
                                    state.failed = false;
                                } else {
                                    if (state.backtracking > 0) {
                                        state.failed = true;
                                        return retval;
                                    }
                                    MismatchedSetException mse = new MismatchedSetException(null, input);
                                    throw mse;
                                }
                            }
                            break;
                    }
                }
                break;
        }
        retval.stop = input.LT(-1);
    } catch (RecognitionException re) {
        throw re;
    } finally {
    // do for sure before leaving
    }
    return retval;
}
Also used : BindingDescr(org.drools.drl.ast.descr.BindingDescr) BaseDescr(org.drools.drl.ast.descr.BaseDescr)

Example 23 with BindingDescr

use of org.drools.drl.ast.descr.BindingDescr in project drools by kiegroup.

the class DRL5Expressions method relationalExpression.

// $ANTLR start "relationalExpression"
// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:354:1: relationalExpression returns [BaseDescr result] : left= shiftExpression ( ( operator | LEFT_PAREN )=>right= orRestriction )* ;
public final BaseDescr relationalExpression() throws RecognitionException {
    relationalExpression_stack.push(new relationalExpression_scope());
    BaseDescr result = null;
    ParserRuleReturnScope left = null;
    BaseDescr right = null;
    relationalExpression_stack.peek().lsd = null;
    try {
        // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:357:3: (left= shiftExpression ( ( operator | LEFT_PAREN )=>right= orRestriction )* )
        // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:357:5: left= shiftExpression ( ( operator | LEFT_PAREN )=>right= orRestriction )*
        {
            pushFollow(FOLLOW_shiftExpression_in_relationalExpression1750);
            left = shiftExpression();
            state._fsp--;
            if (state.failed)
                return result;
            if (state.backtracking == 0) {
                if (buildDescr) {
                    if ((left != null ? ((DRL5Expressions.shiftExpression_return) left).result : null) == null) {
                        result = new AtomicExprDescr((left != null ? input.toString(left.start, left.stop) : null));
                    } else if ((left != null ? ((DRL5Expressions.shiftExpression_return) left).result : null) instanceof AtomicExprDescr) {
                        if ((left != null ? input.toString(left.start, left.stop) : null).equals(((AtomicExprDescr) (left != null ? ((DRL5Expressions.shiftExpression_return) left).result : null)).getExpression())) {
                            result = (left != null ? ((DRL5Expressions.shiftExpression_return) left).result : null);
                        } else {
                            result = new AtomicExprDescr((left != null ? input.toString(left.start, left.stop) : null));
                        }
                    } else if ((left != null ? ((DRL5Expressions.shiftExpression_return) left).result : null) instanceof BindingDescr) {
                        if ((left != null ? input.toString(left.start, left.stop) : null).equals(((BindingDescr) (left != null ? ((DRL5Expressions.shiftExpression_return) left).result : null)).getExpression())) {
                            result = (left != null ? ((DRL5Expressions.shiftExpression_return) left).result : null);
                        } else {
                            BindingDescr bind = (BindingDescr) (left != null ? ((DRL5Expressions.shiftExpression_return) left).result : null);
                            int offset = bind.isUnification() ? 2 : 1;
                            String fullExpression = (left != null ? input.toString(left.start, left.stop) : null).substring((left != null ? input.toString(left.start, left.stop) : null).indexOf(":") + offset).trim();
                            result = new BindingDescr(bind.getVariable(), bind.getExpression(), fullExpression, bind.isUnification());
                        }
                    } else {
                        result = (left != null ? ((DRL5Expressions.shiftExpression_return) left).result : null);
                    }
                    relationalExpression_stack.peek().lsd = result;
                }
            }
            // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:382:3: ( ( operator | LEFT_PAREN )=>right= orRestriction )*
            loop37: while (true) {
                int alt37 = 2;
                int LA37_0 = input.LA(1);
                if ((LA37_0 == ID)) {
                    int LA37_2 = input.LA(2);
                    if (((synpred8_DRL5Expressions() && (((helper.validateIdentifierKey(DroolsSoftKeywords.NOT))) || ((helper.isPluggableEvaluator(false))))))) {
                        alt37 = 1;
                    }
                } else if ((LA37_0 == EQUALS)) {
                    int LA37_3 = input.LA(2);
                    if ((synpred8_DRL5Expressions())) {
                        alt37 = 1;
                    }
                } else if ((LA37_0 == NOT_EQUALS)) {
                    int LA37_4 = input.LA(2);
                    if ((synpred8_DRL5Expressions())) {
                        alt37 = 1;
                    }
                } else if ((LA37_0 == LESS)) {
                    int LA37_20 = input.LA(2);
                    if ((synpred8_DRL5Expressions())) {
                        alt37 = 1;
                    }
                } else if ((LA37_0 == GREATER)) {
                    int LA37_21 = input.LA(2);
                    if ((synpred8_DRL5Expressions())) {
                        alt37 = 1;
                    }
                } else if ((LA37_0 == TILDE) && (synpred8_DRL5Expressions())) {
                    alt37 = 1;
                } else if ((LA37_0 == LESS_EQUALS) && (synpred8_DRL5Expressions())) {
                    alt37 = 1;
                } else if ((LA37_0 == GREATER_EQUALS) && (synpred8_DRL5Expressions())) {
                    alt37 = 1;
                } else if ((LA37_0 == LEFT_PAREN) && (synpred8_DRL5Expressions())) {
                    alt37 = 1;
                }
                switch(alt37) {
                    case 1:
                        // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:382:5: ( operator | LEFT_PAREN )=>right= orRestriction
                        {
                            pushFollow(FOLLOW_orRestriction_in_relationalExpression1775);
                            right = orRestriction();
                            state._fsp--;
                            if (state.failed)
                                return result;
                            if (state.backtracking == 0) {
                                if (buildDescr) {
                                    result = right;
                                    relationalExpression_stack.peek().lsd = result;
                                }
                            }
                        }
                        break;
                    default:
                        break loop37;
                }
            }
        }
    } catch (RecognitionException re) {
        throw re;
    } finally {
        // do for sure before leaving
        relationalExpression_stack.pop();
    }
    return result;
}
Also used : BindingDescr(org.drools.drl.ast.descr.BindingDescr) BaseDescr(org.drools.drl.ast.descr.BaseDescr) AtomicExprDescr(org.drools.drl.ast.descr.AtomicExprDescr)

Example 24 with BindingDescr

use of org.drools.drl.ast.descr.BindingDescr in project drools by kiegroup.

the class DRL5Expressions method unaryExpressionNotPlusMinus.

// $ANTLR start "unaryExpressionNotPlusMinus"
// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:486:1: unaryExpressionNotPlusMinus returns [BaseDescr result] : ( TILDE unaryExpression | NEGATION unaryExpression | ( castExpression )=> castExpression | ( ({...}? (var= ID COLON ) ) | ({...}? (var= ID UNIFY ) ) )? left= primary ( ( selector )=> selector )* ( ( INCR | DECR )=> ( INCR | DECR ) )? );
public final DRL5Expressions.unaryExpressionNotPlusMinus_return unaryExpressionNotPlusMinus() throws RecognitionException {
    DRL5Expressions.unaryExpressionNotPlusMinus_return retval = new DRL5Expressions.unaryExpressionNotPlusMinus_return();
    retval.start = input.LT(1);
    Token var = null;
    Token COLON9 = null;
    Token UNIFY10 = null;
    BaseDescr left = null;
    boolean isLeft = false;
    BindingDescr bind = null;
    try {
        // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:488:5: ( TILDE unaryExpression | NEGATION unaryExpression | ( castExpression )=> castExpression | ( ({...}? (var= ID COLON ) ) | ({...}? (var= ID UNIFY ) ) )? left= primary ( ( selector )=> selector )* ( ( INCR | DECR )=> ( INCR | DECR ) )? )
        int alt53 = 4;
        switch(input.LA(1)) {
            case TILDE:
                {
                    alt53 = 1;
                }
                break;
            case NEGATION:
                {
                    alt53 = 2;
                }
                break;
            case LEFT_PAREN:
                {
                    int LA53_3 = input.LA(2);
                    if ((synpred14_DRL5Expressions())) {
                        alt53 = 3;
                    } else if ((true)) {
                        alt53 = 4;
                    }
                }
                break;
            case BOOL:
            case DECIMAL:
            case FLOAT:
            case HEX:
            case ID:
            case LEFT_SQUARE:
            case LESS:
            case NULL:
            case STAR:
            case STRING:
            case TIME_INTERVAL:
                {
                    alt53 = 4;
                }
                break;
            default:
                if (state.backtracking > 0) {
                    state.failed = true;
                    return retval;
                }
                NoViableAltException nvae = new NoViableAltException("", 53, 0, input);
                throw nvae;
        }
        switch(alt53) {
            case 1:
                // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:488:9: TILDE unaryExpression
                {
                    match(input, TILDE, FOLLOW_TILDE_in_unaryExpressionNotPlusMinus2371);
                    if (state.failed)
                        return retval;
                    pushFollow(FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus2373);
                    unaryExpression();
                    state._fsp--;
                    if (state.failed)
                        return retval;
                }
                break;
            case 2:
                // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:489:8: NEGATION unaryExpression
                {
                    match(input, NEGATION, FOLLOW_NEGATION_in_unaryExpressionNotPlusMinus2382);
                    if (state.failed)
                        return retval;
                    pushFollow(FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus2384);
                    unaryExpression();
                    state._fsp--;
                    if (state.failed)
                        return retval;
                }
                break;
            case 3:
                // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:490:9: ( castExpression )=> castExpression
                {
                    pushFollow(FOLLOW_castExpression_in_unaryExpressionNotPlusMinus2398);
                    castExpression();
                    state._fsp--;
                    if (state.failed)
                        return retval;
                }
                break;
            case 4:
                // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:491:9: ( ({...}? (var= ID COLON ) ) | ({...}? (var= ID UNIFY ) ) )? left= primary ( ( selector )=> selector )* ( ( INCR | DECR )=> ( INCR | DECR ) )?
                {
                    if (state.backtracking == 0) {
                        isLeft = helper.getLeftMostExpr() == null;
                    }
                    // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:492:9: ( ({...}? (var= ID COLON ) ) | ({...}? (var= ID UNIFY ) ) )?
                    int alt50 = 3;
                    int LA50_0 = input.LA(1);
                    if ((LA50_0 == ID)) {
                        int LA50_1 = input.LA(2);
                        if ((LA50_1 == COLON)) {
                            int LA50_3 = input.LA(3);
                            if (((inMap == 0 && ternOp == 0 && input.LA(2) == DRL5Lexer.COLON))) {
                                alt50 = 1;
                            }
                        } else if ((LA50_1 == UNIFY)) {
                            alt50 = 2;
                        }
                    }
                    switch(alt50) {
                        case 1:
                            // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:492:11: ({...}? (var= ID COLON ) )
                            {
                                // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:492:11: ({...}? (var= ID COLON ) )
                                // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:492:12: {...}? (var= ID COLON )
                                {
                                    if (!((inMap == 0 && ternOp == 0 && input.LA(2) == DRL5Lexer.COLON))) {
                                        if (state.backtracking > 0) {
                                            state.failed = true;
                                            return retval;
                                        }
                                        throw new FailedPredicateException(input, "unaryExpressionNotPlusMinus", "inMap == 0 && ternOp == 0 && input.LA(2) == DRL5Lexer.COLON");
                                    }
                                    // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:492:75: (var= ID COLON )
                                    // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:492:76: var= ID COLON
                                    {
                                        var = (Token) match(input, ID, FOLLOW_ID_in_unaryExpressionNotPlusMinus2426);
                                        if (state.failed)
                                            return retval;
                                        COLON9 = (Token) match(input, COLON, FOLLOW_COLON_in_unaryExpressionNotPlusMinus2428);
                                        if (state.failed)
                                            return retval;
                                        if (state.backtracking == 0) {
                                            hasBindings = true;
                                            helper.emit(var, DroolsEditorType.IDENTIFIER_VARIABLE);
                                            helper.emit(COLON9, DroolsEditorType.SYMBOL);
                                            if (buildDescr) {
                                                bind = new BindingDescr((var != null ? var.getText() : null), null, false);
                                                helper.setStart(bind, var);
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                        case 2:
                            // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:494:11: ({...}? (var= ID UNIFY ) )
                            {
                                // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:494:11: ({...}? (var= ID UNIFY ) )
                                // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:494:12: {...}? (var= ID UNIFY )
                                {
                                    if (!((inMap == 0 && ternOp == 0 && input.LA(2) == DRL5Lexer.UNIFY))) {
                                        if (state.backtracking > 0) {
                                            state.failed = true;
                                            return retval;
                                        }
                                        throw new FailedPredicateException(input, "unaryExpressionNotPlusMinus", "inMap == 0 && ternOp == 0 && input.LA(2) == DRL5Lexer.UNIFY");
                                    }
                                    // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:494:75: (var= ID UNIFY )
                                    // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:494:76: var= ID UNIFY
                                    {
                                        var = (Token) match(input, ID, FOLLOW_ID_in_unaryExpressionNotPlusMinus2467);
                                        if (state.failed)
                                            return retval;
                                        UNIFY10 = (Token) match(input, UNIFY, FOLLOW_UNIFY_in_unaryExpressionNotPlusMinus2469);
                                        if (state.failed)
                                            return retval;
                                        if (state.backtracking == 0) {
                                            hasBindings = true;
                                            helper.emit(var, DroolsEditorType.IDENTIFIER_VARIABLE);
                                            helper.emit(UNIFY10, DroolsEditorType.SYMBOL);
                                            if (buildDescr) {
                                                bind = new BindingDescr((var != null ? var.getText() : null), null, true);
                                                helper.setStart(bind, var);
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                    }
                    pushFollow(FOLLOW_primary_in_unaryExpressionNotPlusMinus2514);
                    left = primary();
                    state._fsp--;
                    if (state.failed)
                        return retval;
                    if (state.backtracking == 0) {
                        if (buildDescr) {
                            retval.result = left;
                        }
                    }
                    // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:498:9: ( ( selector )=> selector )*
                    loop51: while (true) {
                        int alt51 = 2;
                        int LA51_0 = input.LA(1);
                        if ((LA51_0 == DOT) && (synpred15_DRL5Expressions())) {
                            alt51 = 1;
                        } else if ((LA51_0 == LEFT_SQUARE) && (synpred15_DRL5Expressions())) {
                            alt51 = 1;
                        }
                        switch(alt51) {
                            case 1:
                                // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:498:10: ( selector )=> selector
                                {
                                    pushFollow(FOLLOW_selector_in_unaryExpressionNotPlusMinus2531);
                                    selector();
                                    state._fsp--;
                                    if (state.failed)
                                        return retval;
                                }
                                break;
                            default:
                                break loop51;
                        }
                    }
                    if (state.backtracking == 0) {
                        if (buildDescr) {
                            String expr = input.toString(retval.start, input.LT(-1));
                            if (isLeft) {
                                helper.setLeftMostExpr(expr);
                            }
                            if (bind != null) {
                                if (bind.isUnification()) {
                                    expr = expr.substring(expr.indexOf(":=") + 2).trim();
                                } else {
                                    expr = expr.substring(expr.indexOf(":") + 1).trim();
                                }
                                bind.setExpressionAndBindingField(expr);
                                helper.setEnd(bind);
                                retval.result = bind;
                            }
                        }
                    }
                    // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:517:9: ( ( INCR | DECR )=> ( INCR | DECR ) )?
                    int alt52 = 2;
                    int LA52_0 = input.LA(1);
                    if ((LA52_0 == DECR || LA52_0 == INCR) && (synpred16_DRL5Expressions())) {
                        alt52 = 1;
                    }
                    switch(alt52) {
                        case 1:
                            // src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:517:10: ( INCR | DECR )=> ( INCR | DECR )
                            {
                                if (input.LA(1) == DECR || input.LA(1) == INCR) {
                                    input.consume();
                                    state.errorRecovery = false;
                                    state.failed = false;
                                } else {
                                    if (state.backtracking > 0) {
                                        state.failed = true;
                                        return retval;
                                    }
                                    MismatchedSetException mse = new MismatchedSetException(null, input);
                                    throw mse;
                                }
                            }
                            break;
                    }
                }
                break;
        }
        retval.stop = input.LT(-1);
    } catch (RecognitionException re) {
        throw re;
    } finally {
    // do for sure before leaving
    }
    return retval;
}
Also used : BindingDescr(org.drools.drl.ast.descr.BindingDescr) BaseDescr(org.drools.drl.ast.descr.BaseDescr)

Example 25 with BindingDescr

use of org.drools.drl.ast.descr.BindingDescr in project drools by kiegroup.

the class JavaConsequenceBuilderPRAlwaysTest method setupTest.

private void setupTest(String consequence, Map<String, Object> namedConsequences) {
    InternalKnowledgePackage pkg = CoreComponentFactory.get().createKnowledgePackage("org.drools");
    pkg.addImport(new ImportDeclaration("org.drools.mvel.compiler.Cheese"));
    KnowledgeBuilderConfigurationImpl conf = new KnowledgeBuilderConfigurationImpl();
    // Although it should be the default, for completeness we explicit this is the test cases how RHS should be rewritten as:
    conf.setOption(PropertySpecificOption.ALWAYS);
    KnowledgeBuilderImpl kBuilder = new KnowledgeBuilderImpl(pkg, conf);
    ruleDescr = new RuleDescr("test consequence builder");
    ruleDescr.setConsequence(consequence);
    for (Entry<String, Object> entry : namedConsequences.entrySet()) {
        ruleDescr.addNamedConsequences(entry.getKey(), entry.getValue());
    }
    RuleImpl rule = descrToRule(ruleDescr);
    PackageRegistry pkgRegistry = kBuilder.getPackageRegistry(pkg.getName());
    DialectCompiletimeRegistry reg = kBuilder.getPackageRegistry(pkg.getName()).getDialectCompiletimeRegistry();
    context = new RuleBuildContext(kBuilder, ruleDescr, reg, pkg, reg.getDialect(pkgRegistry.getDialect()));
    rule.addPattern(new Pattern(0, new ClassObjectType(Cheese.class), "$cheese"));
    Pattern p = new Pattern(1, new ClassObjectType(Person.class), "$persone");
    Declaration declr = p.addDeclaration("age");
    final InternalReadAccessor extractor = PatternBuilder.getFieldReadAccessor(context, new BindingDescr("age", "age"), p, "age", declr, true);
    rule.addPattern(p);
    context.getDeclarationResolver().pushOnBuildStack(rule.getLhs());
    context.getDialect().getConsequenceBuilder().build(context, RuleImpl.DEFAULT_CONSEQUENCE_NAME);
    for (String name : namedConsequences.keySet()) {
        context.getDialect().getConsequenceBuilder().build(context, name);
    }
    context.getDialect().addRule(context);
    pkgRegistry.getPackage().addRule(context.getRule());
    kBuilder.compileAll();
    kBuilder.reloadAll();
}
Also used : Pattern(org.drools.core.rule.Pattern) BindingDescr(org.drools.drl.ast.descr.BindingDescr) RuleBuildContext(org.drools.compiler.rule.builder.RuleBuildContext) ClassObjectType(org.drools.core.base.ClassObjectType) KnowledgeBuilderConfigurationImpl(org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl) DialectCompiletimeRegistry(org.drools.compiler.compiler.DialectCompiletimeRegistry) RuleImpl(org.drools.core.definitions.rule.impl.RuleImpl) PackageRegistry(org.drools.compiler.compiler.PackageRegistry) KnowledgeBuilderImpl(org.drools.compiler.builder.impl.KnowledgeBuilderImpl) ImportDeclaration(org.drools.core.rule.ImportDeclaration) RuleDescr(org.drools.drl.ast.descr.RuleDescr) InternalReadAccessor(org.drools.core.spi.InternalReadAccessor) Declaration(org.drools.core.rule.Declaration) ImportDeclaration(org.drools.core.rule.ImportDeclaration) Person(org.drools.mvel.compiler.Person) InternalKnowledgePackage(org.drools.core.definitions.InternalKnowledgePackage)

Aggregations

BindingDescr (org.drools.drl.ast.descr.BindingDescr)42 ConstraintConnectiveDescr (org.drools.drl.ast.descr.ConstraintConnectiveDescr)17 Test (org.junit.Test)17 BaseDescr (org.drools.drl.ast.descr.BaseDescr)13 PatternDescr (org.drools.drl.ast.descr.PatternDescr)11 RuleDescr (org.drools.drl.ast.descr.RuleDescr)11 AtomicExprDescr (org.drools.drl.ast.descr.AtomicExprDescr)10 ExprConstraintDescr (org.drools.drl.ast.descr.ExprConstraintDescr)10 KnowledgeBuilderImpl (org.drools.compiler.builder.impl.KnowledgeBuilderImpl)9 AndDescr (org.drools.drl.ast.descr.AndDescr)8 Cheese (org.drools.mvel.compiler.Cheese)8 PackageDescr (org.drools.drl.ast.descr.PackageDescr)7 RelationalExprDescr (org.drools.drl.ast.descr.RelationalExprDescr)7 DumperContext (org.drools.compiler.lang.DumperContext)6 GlobalDescr (org.drools.drl.ast.descr.GlobalDescr)6 ClassObjectType (org.drools.core.base.ClassObjectType)5 Declaration (org.drools.core.rule.Declaration)5 TypeDeclaration (org.drools.core.rule.TypeDeclaration)5 InternalKnowledgePackage (org.drools.core.definitions.InternalKnowledgePackage)4 PredicateConstraint (org.drools.core.rule.PredicateConstraint)4