use of com.linkedin.pinot.pql.parsers.pql2.ast.AstNode in project pinot by linkedin.
the class TransformExpressionTree method buildTree.
/**
* Given the root node for AST tree, builds the expression tree, and returns
* the root node of the expression tree.
*
* @param rootNode Root Node of AST tree
* @return Root node of the Expression tree
*/
public static TransformExpressionTree buildTree(AstNode rootNode) {
TransformExpressionTree expressionTree;
if (!rootNode.hasChildren()) {
return new TransformExpressionTree(rootNode);
} else {
expressionTree = new TransformExpressionTree(rootNode);
expressionTree._children = new ArrayList<>();
for (AstNode child : rootNode.getChildren()) {
expressionTree._children.add(buildTree(child));
}
}
return expressionTree;
}
use of com.linkedin.pinot.pql.parsers.pql2.ast.AstNode in project pinot by linkedin.
the class Pql2AstListener method pushNode.
private void pushNode(AstNode node) {
if (_rootNode == null) {
_rootNode = node;
}
AstNode parentNode = null;
if (!_nodeStack.isEmpty()) {
parentNode = _nodeStack.peek();
}
if (parentNode != null) {
parentNode.addChild(node);
}
node.setParent(parentNode);
_nodeStack.push(node);
}
use of com.linkedin.pinot.pql.parsers.pql2.ast.AstNode in project pinot by linkedin.
the class Pql2Compiler method compileToBrokerRequest.
@Override
public BrokerRequest compileToBrokerRequest(String expression) throws Pql2CompilationException {
try {
//
CharStream charStream = new ANTLRInputStream(expression);
PQL2Lexer lexer = new PQL2Lexer(charStream);
lexer.setTokenFactory(new CommonTokenFactory(true));
TokenStream tokenStream = new UnbufferedTokenStream<CommonToken>(lexer);
PQL2Parser parser = new PQL2Parser(tokenStream);
parser.setErrorHandler(new BailErrorStrategy());
// Parse
ParseTree parseTree = parser.root();
ParseTreeWalker walker = new ParseTreeWalker();
Pql2AstListener listener = new Pql2AstListener(expression);
walker.walk(listener, parseTree);
AstNode rootNode = listener.getRootNode();
BrokerRequest brokerRequest = new BrokerRequest();
rootNode.updateBrokerRequest(brokerRequest);
return brokerRequest;
} catch (Pql2CompilationException e) {
throw e;
} catch (Exception e) {
throw new Pql2CompilationException(e.getMessage());
}
}
use of com.linkedin.pinot.pql.parsers.pql2.ast.AstNode in project mvel by mikebrock.
the class DebugTools method decompile.
private static String decompile(CompiledExpression cExp, boolean nest, DecompileContext context) {
ASTIterator iter = new ASTLinkedList(cExp.getFirstNode());
ASTNode tk;
StringBuffer sbuf = new StringBuffer();
if (!nest) {
sbuf.append("Expression Decompile\n-------------\n");
}
while (iter.hasMoreNodes()) {
sbuf.append("(").append(context.node++).append(") ");
if ((tk = iter.nextNode()) instanceof NestedStatement && ((NestedStatement) tk).getNestedStatement() instanceof CompiledExpression) {
//noinspection StringConcatenationInsideStringBufferAppend
sbuf.append("NEST [" + tk.getClass().getSimpleName() + "]: { " + tk.getName() + " }\n");
sbuf.append(decompile((CompiledExpression) ((NestedStatement) tk).getNestedStatement(), true, context));
}
if (tk instanceof Substatement && ((Substatement) tk).getStatement() instanceof CompiledExpression) {
//noinspection StringConcatenationInsideStringBufferAppend
sbuf.append("NEST [" + tk.getClass().getSimpleName() + "]: { " + tk.getName() + " }\n");
sbuf.append(decompile((CompiledExpression) ((Substatement) tk).getStatement(), true, context));
} else // }
if (tk.isDebuggingSymbol()) {
//noinspection StringConcatenationInsideStringBufferAppend
sbuf.append("DEBUG_SYMBOL :: " + tk.toString());
} else if (tk.isLiteral()) {
sbuf.append("LITERAL :: ").append(tk.getLiteralValue()).append("'");
} else if (tk.isOperator()) {
sbuf.append("OPERATOR [").append(getOperatorName(tk.getOperator())).append("]: ").append(tk.getName());
if (tk.isOperator(Operator.END_OF_STMT))
sbuf.append("\n");
} else if (tk.isIdentifier()) {
sbuf.append("REFERENCE :: ").append(tk.getClass().getSimpleName()).append(":").append(tk.getName());
} else if (tk instanceof BinaryOperation) {
BinaryOperation bo = (BinaryOperation) tk;
sbuf.append("OPERATION [" + getOperatorName(bo.getOperation()) + "] {").append(bo.getLeft().getName()).append("} {").append(bo.getRight().getName()).append("}");
} else {
//noinspection StringConcatenationInsideStringBufferAppend
sbuf.append("NODE [" + tk.getClass().getSimpleName() + "] :: " + tk.getName());
}
sbuf.append("\n");
}
sbuf.append("==END==");
return sbuf.toString();
}
use of com.linkedin.pinot.pql.parsers.pql2.ast.AstNode in project mvel by mikebrock.
the class ASTLinkedList method finish.
public void finish() {
reset();
ASTNode last = null;
ASTNode curr;
while (hasMoreNodes()) {
if ((curr = nextNode()).isDiscard()) {
if (last == null) {
last = firstASTNode = nextNode();
} else {
last.nextASTNode = nextNode();
}
continue;
}
if (!hasMoreNodes())
break;
last = curr;
}
this.last = last;
reset();
}
Aggregations