Search in sources :

Example 11 with Operation

use of org.apache.asterix.external.classad.Operation in project asterixdb by apache.

the class ClassAdParser method parseExclusiveORExpression.

// ExclusiveORExpression .= ANDExpression
// | ExclusiveORExpression '^' ANDExpression
private boolean parseExclusiveORExpression(ExprTreeHolder tree) throws IOException {
    if (!parseANDExpression(tree)) {
        return false;
    }
    while ((lexer.peekToken()) == TokenType.LEX_BITWISE_XOR) {
        lexer.consumeToken();
        ExprTreeHolder treeL = tree;
        ExprTreeHolder treeR = objectPool.mutableExprPool.get();
        parseANDExpression(treeR);
        if (treeL.getInnerTree() != null && treeR.getInnerTree() != null) {
            Operation newTree = objectPool.operationPool.get();
            Operation.createOperation(Operation.OpKind_BITWISE_XOR_OP, treeL, treeR, null, newTree);
            tree.setInnerTree(newTree);
        } else {
            tree.setInnerTree(null);
            return false;
        }
    }
    return true;
}
Also used : ExprTreeHolder(org.apache.asterix.external.classad.ExprTreeHolder) Operation(org.apache.asterix.external.classad.Operation)

Example 12 with Operation

use of org.apache.asterix.external.classad.Operation in project asterixdb by apache.

the class ClassAdParser method parsePostfixExpression.

// PostfixExpression .= PrimaryExpression
// | PostfixExpression '.' Identifier
// | PostfixExpression '[' Expression ']'
private boolean parsePostfixExpression(ExprTreeHolder tree) throws IOException {
    TokenType tt;
    if (!parsePrimaryExpression(tree)) {
        return false;
    }
    while ((tt = lexer.peekToken()) == TokenType.LEX_OPEN_BOX || tt == TokenType.LEX_SELECTION) {
        ExprTreeHolder treeL = tree;
        ExprTreeHolder treeR = objectPool.mutableExprPool.get();
        TokenValue tv = objectPool.tokenValuePool.get();
        lexer.consumeToken();
        if (tt == TokenType.LEX_OPEN_BOX) {
            // subscript operation
            parseExpression(treeR);
            if (treeL.getInnerTree() != null && treeR.getInnerTree() != null) {
                Operation newTree = objectPool.operationPool.get();
                Operation.createOperation(Operation.OpKind_SUBSCRIPT_OP, treeL, treeR, null, newTree);
                if (lexer.consumeToken() == TokenType.LEX_CLOSE_BOX) {
                    tree.setInnerTree(newTree);
                    continue;
                }
            }
            tree.setInnerTree(null);
            return false;
        } else if (tt == TokenType.LEX_SELECTION) {
            // field selection operation
            if ((tt = lexer.consumeToken(tv)) != TokenType.LEX_IDENTIFIER) {
                throw new HyracksDataException("second argument of selector must be an " + "identifier (got" + String.valueOf(Lexer.strLexToken(tt)) + ")");
            }
            AttributeReference newTree = objectPool.attrRefPool.get();
            AttributeReference.createAttributeReference(treeL, tv.getStrValue(), false, newTree);
            tree.setInnerTree(newTree);
        }
    }
    return true;
}
Also used : TokenType(org.apache.asterix.external.classad.Lexer.TokenType) ExprTreeHolder(org.apache.asterix.external.classad.ExprTreeHolder) AttributeReference(org.apache.asterix.external.classad.AttributeReference) Operation(org.apache.asterix.external.classad.Operation) HyracksDataException(org.apache.hyracks.api.exceptions.HyracksDataException) TokenValue(org.apache.asterix.external.classad.TokenValue)

Example 13 with Operation

use of org.apache.asterix.external.classad.Operation in project asterixdb by apache.

the class ClassAdParser method parseAdditiveExpression.

// AdditiveExpression .= MultiplicativeExpression
// | AdditiveExpression '+' MultiplicativeExpression
// | AdditiveExpression '-' MultiplicativeExpression
private boolean parseAdditiveExpression(ExprTreeHolder tree) throws IOException {
    if (!parseMultiplicativeExpression(tree)) {
        return false;
    }
    TokenType tt = lexer.peekToken();
    while (tt == TokenType.LEX_PLUS || tt == TokenType.LEX_MINUS) {
        ExprTreeHolder treeL = tree;
        ExprTreeHolder treeR = objectPool.mutableExprPool.get();
        lexer.consumeToken();
        parseMultiplicativeExpression(treeR);
        if (treeL.getInnerTree() != null && treeR.getInnerTree() != null) {
            Operation newTree = objectPool.operationPool.get();
            Operation.createOperation((tt == TokenType.LEX_PLUS) ? Operation.OpKind_ADDITION_OP : Operation.OpKind_SUBTRACTION_OP, treeL, treeR, null, newTree);
            tree.setInnerTree(newTree);
        } else {
            tree.setInnerTree(null);
            return false;
        }
        tt = lexer.peekToken();
    }
    return true;
}
Also used : TokenType(org.apache.asterix.external.classad.Lexer.TokenType) ExprTreeHolder(org.apache.asterix.external.classad.ExprTreeHolder) Operation(org.apache.asterix.external.classad.Operation)

Aggregations

ExprTreeHolder (org.apache.asterix.external.classad.ExprTreeHolder)13 Operation (org.apache.asterix.external.classad.Operation)13 TokenType (org.apache.asterix.external.classad.Lexer.TokenType)8 HyracksDataException (org.apache.hyracks.api.exceptions.HyracksDataException)7 AttributeReference (org.apache.asterix.external.classad.AttributeReference)1 TokenValue (org.apache.asterix.external.classad.TokenValue)1