private static void optimizeOperator(int operator, ASTNode tk, ASTNode tkOp, ASTLinkedList astLinkedList, ASTLinkedList optimizedAst) { switch (operator) { case Operator.REGEX: optimizedAst.addTokenNode(new RegExMatchNode(tk, astLinkedList.nextNode())); break; case Operator.CONTAINS: optimizedAst.addTokenNode(new Contains(tk, astLinkedList.nextNode())); break; case Operator.INSTANCEOF: optimizedAst.addTokenNode(new Instance(tk, astLinkedList.nextNode())); break; case Operator.CONVERTABLE_TO: optimizedAst.addTokenNode((new Convertable(tk, astLinkedList.nextNode()))); break; case Operator.SIMILARITY: optimizedAst.addTokenNode(new Strsim(tk, astLinkedList.nextNode())); break; case Operator.SOUNDEX: optimizedAst.addTokenNode(new Soundslike(tk, astLinkedList.nextNode())); break; default: optimizedAst.addTokenNode(tk, tkOp); } }
private static void optimizeOperator(int operator, ASTNode tk, ASTNode tkOp, ASTLinkedList astLinkedList, ASTLinkedList optimizedAst, ParserContext pCtx) { switch (operator) { case Operator.REGEX: optimizedAst.addTokenNode(new RegExMatchNode(tk, astLinkedList.nextNode(), pCtx)); break; case Operator.CONTAINS: optimizedAst.addTokenNode(new Contains(tk, astLinkedList.nextNode(), pCtx)); break; case Operator.INSTANCEOF: optimizedAst.addTokenNode(new Instance(tk, astLinkedList.nextNode(), pCtx)); break; case Operator.CONVERTABLE_TO: optimizedAst.addTokenNode((new Convertable(tk, astLinkedList.nextNode(), pCtx))); break; case Operator.SIMILARITY: optimizedAst.addTokenNode(new Strsim(tk, astLinkedList.nextNode(), pCtx)); break; case Operator.SOUNDEX: optimizedAst.addTokenNode(new Soundslike(tk, astLinkedList.nextNode(), pCtx)); break; case TERNARY: if ( pCtx.isStrongTyping() && tk.getEgressType() != Boolean.class && tk.getEgressType() != Boolean.TYPE ) throw new RuntimeException( "Condition of ternary operator is not of type boolean. Found " + tk.getEgressType() ); default: optimizedAst.addTokenNode(tk, tkOp); } }
private static void optimizeOperator(int operator, ASTNode tk, ASTNode tkOp, ASTLinkedList astLinkedList, ASTLinkedList optimizedAst, ParserContext pCtx) { switch (operator) { case Operator.REGEX: optimizedAst.addTokenNode(new RegExMatchNode(tk, astLinkedList.nextNode(), pCtx)); break; case Operator.CONTAINS: optimizedAst.addTokenNode(new Contains(tk, astLinkedList.nextNode(), pCtx)); break; case Operator.INSTANCEOF: optimizedAst.addTokenNode(new Instance(tk, astLinkedList.nextNode(), pCtx)); break; case Operator.CONVERTABLE_TO: optimizedAst.addTokenNode((new Convertable(tk, astLinkedList.nextNode(), pCtx))); break; case Operator.SIMILARITY: optimizedAst.addTokenNode(new Strsim(tk, astLinkedList.nextNode(), pCtx)); break; case Operator.SOUNDEX: optimizedAst.addTokenNode(new Soundslike(tk, astLinkedList.nextNode(), pCtx)); break; case TERNARY: if ( pCtx.isStrongTyping() && tk.getEgressType() != Boolean.class && tk.getEgressType() != Boolean.TYPE ) throw new RuntimeException( "Condition of ternary operator is not of type boolean. Found " + tk.getEgressType() ); default: optimizedAst.addTokenNode(tk, tkOp); } }
private boolean compileReduce(int opCode, ASTLinkedList astBuild) { switch (arithmeticFunctionReduction(opCode)) { case -1: /** * The reduction failed because we encountered a non-literal, * so we must now back out and cleanup. */ stk.xswap_op(); astBuild.addTokenNode(new LiteralNode(stk.pop(), pCtx)); astBuild.addTokenNode( (OperatorNode) splitAccumulator.pop(), verify(pCtx, (ASTNode) splitAccumulator.pop()) ); return false; case -2: /** * Back out completely, pull everything back off the stack and add the instructions * to the output payload as they are. */ LiteralNode rightValue = new LiteralNode(stk.pop(), pCtx); OperatorNode operator = new OperatorNode((Integer) stk.pop(), expr, st, pCtx); astBuild.addTokenNode(new LiteralNode(stk.pop(), pCtx), operator); astBuild.addTokenNode(rightValue, (OperatorNode) splitAccumulator.pop()); astBuild.addTokenNode(verify(pCtx, (ASTNode) splitAccumulator.pop())); } return true; }
private boolean compileReduce(int opCode, ASTLinkedList astBuild) { switch (arithmeticFunctionReduction(opCode)) { case -1: /** * The reduction failed because we encountered a non-literal, * so we must now back out and cleanup. */ stk.xswap_op(); astBuild.addTokenNode(new LiteralNode(stk.pop())); astBuild.addTokenNode( (OperatorNode) splitAccumulator.pop(), verify(pCtx, (ASTNode) splitAccumulator.pop()) ); return false; case -2: /** * Back out completely, pull everything back off the stack and add the instructions * to the output payload as they are. */ LiteralNode rightValue = new LiteralNode(stk.pop()); OperatorNode operator = new OperatorNode((Integer) stk.pop()); astBuild.addTokenNode(new LiteralNode(stk.pop()), operator); astBuild.addTokenNode(rightValue, (OperatorNode) splitAccumulator.pop()); astBuild.addTokenNode(verify(pCtx, (ASTNode) splitAccumulator.pop())); } return true; }
astBuild.addTokenNode(new LiteralNode(stk.pop(), pCtx)); astBuild.addTokenNode( (OperatorNode) splitAccumulator.pop(), verify(pCtx, (ASTNode) splitAccumulator.pop()) OperatorNode operator = new OperatorNode((Integer) stk.pop(), expr, st, pCtx); astBuild.addTokenNode(new LiteralNode(stk.pop(), pCtx), operator); astBuild.addTokenNode(rightValue, (OperatorNode) splitAccumulator.pop()); astBuild.addTokenNode(verify(pCtx, (ASTNode) splitAccumulator.pop())); return false; case OP_NOT_LITERAL: ASTNode tkLA2 = (ASTNode) stk.pop(); Integer tkOp2 = (Integer) stk.pop(); astBuild.addTokenNode(new LiteralNode(getStackValueResult(), pCtx)); astBuild.addTokenNode(new OperatorNode(tkOp2, expr, st, pCtx), verify(pCtx, tkLA2)); return false;
astBuild.addTokenNode(tk); continue; astBuild.addTokenNode(new LiteralNode(stk.pop(), pCtx), verify(pCtx, tkOp2)); break; astBuild.addTokenNode(new LiteralNode(getStackValueResult(), pCtx)); astBuild.addTokenNode(new OperatorNode(tkOp2.getOperator(), expr, st, pCtx), verify(pCtx, tkLA2)); break; astBuild.addTokenNode(new LiteralNode(getStackValueResult(), pCtx)); astBuild.addTokenNode(new LiteralNode(getStackValueResult(), pCtx), tkOp2); if (tkLA2 != null) astBuild.addTokenNode(verify(pCtx, tkLA2)); astBuild.addTokenNode(new LiteralNode(getStackValueResult(), pCtx)); astBuild.addTokenNode(verify(pCtx, tk), verify(pCtx, tkOp)); if (tkLA != null) astBuild.addTokenNode(verify(pCtx, tkLA)); continue; astBuild.addTokenNode(verify(pCtx, tk)); if (tkOp != null) astBuild.addTokenNode(verify(pCtx, tkOp)); continue; astBuild.addTokenNode(verify(pCtx, tk));
astBuild.addTokenNode(tk); continue; astBuild.addTokenNode(new LiteralNode(stk.pop(), pCtx), verify(pCtx, tkOp2)); break; astBuild.addTokenNode(new LiteralNode(getStackValueResult(), pCtx)); astBuild.addTokenNode(new OperatorNode(tkOp2.getOperator(), expr, st, pCtx), verify(pCtx, tkLA2)); break; astBuild.addTokenNode(new LiteralNode(getStackValueResult(), pCtx)); astBuild.addTokenNode(new LiteralNode(getStackValueResult(), pCtx), tkOp2); if (tkLA2 != null) astBuild.addTokenNode(verify(pCtx, tkLA2)); astBuild.addTokenNode(new LiteralNode(getStackValueResult(), pCtx)); astBuild.addTokenNode(verify(pCtx, tk), verify(pCtx, tkOp)); if (tkLA != null) astBuild.addTokenNode(verify(pCtx, tkLA)); continue; astBuild.addTokenNode(verify(pCtx, tk)); if (tkOp != null) astBuild.addTokenNode(verify(pCtx, tkOp)); continue; astBuild.addTokenNode(verify(pCtx, tk));
astBuild.addTokenNode(tk); continue; astBuild.addTokenNode(new LiteralNode(stk.pop()), verify(pCtx, tkOp2)); break; astBuild.addTokenNode(new LiteralNode(getStackValueResult())); astBuild.addTokenNode(new OperatorNode(tkOp2.getOperator()), verify(pCtx, tkLA2)); break; astBuild.addTokenNode(new LiteralNode(getStackValueResult())); astBuild.addTokenNode(new LiteralNode(getStackValueResult()), tkOp2); if (tkLA2 != null) astBuild.addTokenNode(verify(pCtx, tkLA2)); astBuild.addTokenNode(new LiteralNode(getStackValueResult())); astBuild.addTokenNode(verify(pCtx, tk), verify(pCtx, tkOp)); if (tkLA != null) astBuild.addTokenNode(verify(pCtx, tkLA)); continue; astBuild.addTokenNode(verify(pCtx, tk)); if (tkOp != null) astBuild.addTokenNode(verify(pCtx, tkOp)); continue; astBuild.addTokenNode(verify(pCtx, tk));
optimizedAst.addTokenNode(tk); optimizedAst.addTokenNode(tk, tkOp); optimizedAst.addTokenNode(tk); continue; optimizedAst.addTokenNode(bo); optimizedAst.addTokenNode(new DeclTypedVarNode(tkOp.getName(), tkOp.getExpr(), tkOp.getStart(), tk.getOffset(), (Class) tk.getLiteralValue(), 0, pCtx)); optimizedAst.addTokenNode(tkOp); optimizedAst.addTokenNode(tk, astLinkedList.nextNode()); optimizedAst.addTokenNode(tk); optimizedAst.addTokenNode(tk); optimizedAst.addTokenNode(tk); optimizedAst.addTokenNode(tk, tkOp); optimizedAst.addTokenNode(bool); optimizedAst.addTokenNode(tkOp2); optimizedAst.addTokenNode(tk, tkOp);
optimizedAst.addTokenNode(tk); optimizedAst.addTokenNode(tk, tkOp); optimizedAst.addTokenNode(tk); continue; optimizedAst.addTokenNode(bo); optimizedAst.addTokenNode(new DeclTypedVarNode(tkOp.getName(), tkOp.getExpr(), tkOp.getStart(), tk.getOffset(), (Class) tk.getLiteralValue(), 0, pCtx)); optimizedAst.addTokenNode(tkOp); optimizedAst.addTokenNode(tk, astLinkedList.nextNode()); optimizedAst.addTokenNode(tk); optimizedAst.addTokenNode(tk); optimizedAst.addTokenNode(tk); optimizedAst.addTokenNode(tk, tkOp); optimizedAst.addTokenNode(bool); optimizedAst.addTokenNode(tkOp2); optimizedAst.addTokenNode(tk, tkOp);
optimizedAst.addTokenNode(tk); optimizedAst.addTokenNode(tk, tkOp); optimizedAst.addTokenNode(tk); continue; optimizedAst.addTokenNode(bo); optimizedAst.addTokenNode(new DeclTypedVarNode(tkOp.getName(), (Class) tk.getLiteralValue(), 0, ctx)); optimizedAst.addTokenNode(tkOp); optimizedAst.addTokenNode(tk, astLinkedList.nextNode()); optimizedAst.addTokenNode(tk, tkOp); optimizedAst.addTokenNode(tk); optimizedAst.addTokenNode(tk); optimizedAst.addTokenNode(tk, tkOp); optimizedAst.addTokenNode(bool); optimizedAst.addTokenNode(tkOp2); optimizedAst.addTokenNode(tk, tkOp);