Search in sources :

Example 1 with OpPlus

use of cn.taketoday.expression.spel.ast.OpPlus in project today-infrastructure by TAKETODAY.

the class InternalSpelExpressionParser method eatSumExpression.

// sumExpression: productExpression ( (PLUS^ | MINUS^) productExpression)*;
@Nullable
private SpelNodeImpl eatSumExpression() {
    SpelNodeImpl expr = eatProductExpression();
    while (peekToken(TokenKind.PLUS, TokenKind.MINUS, TokenKind.INC)) {
        // consume PLUS or MINUS or INC
        Token t = takeToken();
        SpelNodeImpl rhExpr = eatProductExpression();
        checkRightOperand(t, rhExpr);
        if (t.kind == TokenKind.PLUS) {
            expr = new OpPlus(t.startPos, t.endPos, expr, rhExpr);
        } else if (t.kind == TokenKind.MINUS) {
            expr = new OpMinus(t.startPos, t.endPos, expr, rhExpr);
        }
    }
    return expr;
}
Also used : SpelNodeImpl(cn.taketoday.expression.spel.ast.SpelNodeImpl) OpPlus(cn.taketoday.expression.spel.ast.OpPlus) OpMinus(cn.taketoday.expression.spel.ast.OpMinus) Nullable(cn.taketoday.lang.Nullable)

Example 2 with OpPlus

use of cn.taketoday.expression.spel.ast.OpPlus in project today-framework by TAKETODAY.

the class InternalSpelExpressionParser method eatSumExpression.

// sumExpression: productExpression ( (PLUS^ | MINUS^) productExpression)*;
@Nullable
private SpelNodeImpl eatSumExpression() {
    SpelNodeImpl expr = eatProductExpression();
    while (peekToken(TokenKind.PLUS, TokenKind.MINUS, TokenKind.INC)) {
        // consume PLUS or MINUS or INC
        Token t = takeToken();
        SpelNodeImpl rhExpr = eatProductExpression();
        checkRightOperand(t, rhExpr);
        if (t.kind == TokenKind.PLUS) {
            expr = new OpPlus(t.startPos, t.endPos, expr, rhExpr);
        } else if (t.kind == TokenKind.MINUS) {
            expr = new OpMinus(t.startPos, t.endPos, expr, rhExpr);
        }
    }
    return expr;
}
Also used : SpelNodeImpl(cn.taketoday.expression.spel.ast.SpelNodeImpl) OpPlus(cn.taketoday.expression.spel.ast.OpPlus) OpMinus(cn.taketoday.expression.spel.ast.OpMinus) Nullable(cn.taketoday.lang.Nullable)

Example 3 with OpPlus

use of cn.taketoday.expression.spel.ast.OpPlus in project today-framework by TAKETODAY.

the class InternalSpelExpressionParser method eatUnaryExpression.

// unaryExpression: (PLUS^ | MINUS^ | BANG^ | INC^ | DEC^) unaryExpression | primaryExpression ;
@Nullable
private SpelNodeImpl eatUnaryExpression() {
    if (peekToken(TokenKind.PLUS, TokenKind.MINUS, TokenKind.NOT)) {
        Token t = takeToken();
        SpelNodeImpl expr = eatUnaryExpression();
        Assert.state(expr != null, "No node");
        if (t.kind == TokenKind.NOT) {
            return new OperatorNot(t.startPos, t.endPos, expr);
        }
        if (t.kind == TokenKind.PLUS) {
            return new OpPlus(t.startPos, t.endPos, expr);
        }
        Assert.isTrue(t.kind == TokenKind.MINUS, "Minus token expected");
        return new OpMinus(t.startPos, t.endPos, expr);
    }
    if (peekToken(TokenKind.INC, TokenKind.DEC)) {
        Token t = takeToken();
        SpelNodeImpl expr = eatUnaryExpression();
        if (t.kind == TokenKind.INC) {
            return new OpInc(t.startPos, t.endPos, false, expr);
        }
        return new OpDec(t.startPos, t.endPos, false, expr);
    }
    return eatPrimaryExpression();
}
Also used : OpInc(cn.taketoday.expression.spel.ast.OpInc) SpelNodeImpl(cn.taketoday.expression.spel.ast.SpelNodeImpl) OpPlus(cn.taketoday.expression.spel.ast.OpPlus) OperatorNot(cn.taketoday.expression.spel.ast.OperatorNot) OpMinus(cn.taketoday.expression.spel.ast.OpMinus) OpDec(cn.taketoday.expression.spel.ast.OpDec) Nullable(cn.taketoday.lang.Nullable)

Example 4 with OpPlus

use of cn.taketoday.expression.spel.ast.OpPlus in project today-infrastructure by TAKETODAY.

the class InternalSpelExpressionParser method eatUnaryExpression.

// unaryExpression: (PLUS^ | MINUS^ | BANG^ | INC^ | DEC^) unaryExpression | primaryExpression ;
@Nullable
private SpelNodeImpl eatUnaryExpression() {
    if (peekToken(TokenKind.PLUS, TokenKind.MINUS, TokenKind.NOT)) {
        Token t = takeToken();
        SpelNodeImpl expr = eatUnaryExpression();
        Assert.state(expr != null, "No node");
        if (t.kind == TokenKind.NOT) {
            return new OperatorNot(t.startPos, t.endPos, expr);
        }
        if (t.kind == TokenKind.PLUS) {
            return new OpPlus(t.startPos, t.endPos, expr);
        }
        Assert.isTrue(t.kind == TokenKind.MINUS, "Minus token expected");
        return new OpMinus(t.startPos, t.endPos, expr);
    }
    if (peekToken(TokenKind.INC, TokenKind.DEC)) {
        Token t = takeToken();
        SpelNodeImpl expr = eatUnaryExpression();
        if (t.kind == TokenKind.INC) {
            return new OpInc(t.startPos, t.endPos, false, expr);
        }
        return new OpDec(t.startPos, t.endPos, false, expr);
    }
    return eatPrimaryExpression();
}
Also used : OpInc(cn.taketoday.expression.spel.ast.OpInc) SpelNodeImpl(cn.taketoday.expression.spel.ast.SpelNodeImpl) OpPlus(cn.taketoday.expression.spel.ast.OpPlus) OperatorNot(cn.taketoday.expression.spel.ast.OperatorNot) OpMinus(cn.taketoday.expression.spel.ast.OpMinus) OpDec(cn.taketoday.expression.spel.ast.OpDec) Nullable(cn.taketoday.lang.Nullable)

Aggregations

OpMinus (cn.taketoday.expression.spel.ast.OpMinus)4 OpPlus (cn.taketoday.expression.spel.ast.OpPlus)4 SpelNodeImpl (cn.taketoday.expression.spel.ast.SpelNodeImpl)4 Nullable (cn.taketoday.lang.Nullable)4 OpDec (cn.taketoday.expression.spel.ast.OpDec)2 OpInc (cn.taketoday.expression.spel.ast.OpInc)2 OperatorNot (cn.taketoday.expression.spel.ast.OperatorNot)2