condition.right = analyzeNode(((Contains)node).getSecondStatement()); } else if (node instanceof Soundslike) { condition.left = analyzeNode(((Soundslike) node).getStatement()); condition.operation = BooleanOperator.SOUNDSLIKE; condition.right = analyzeNode(((Soundslike)node).getSoundslike()); } else if (node instanceof Instance) { condition.left = analyzeNode(((Instance) node).getStatement());
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 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); } }