private static Operation astToOperation(SimpleNode node) throws SyntaxException { Operation op = null; switch (node.getId()) { case PanParserTreeConstants.JJTOPERATION: ASTOperation onode = (ASTOperation) node; switch (onode.getOperationType()) { case DML: op = astToDml(onode, true); break; case PLUS: op = UnaryPlus.newOperation( onode.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0))); break; case MINUS: op = UnaryMinus.newOperation( onode.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0))); break; case NOT: op = LogicalNot.newOperation( onode.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0))); break; case BIT_NOT: op = BitNot.newOperation( onode.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0))); break; case LITERAL: op = onode.getOperation(); break; case ASSIGN: op = astToAssign(onode); break; case IF: op = astToIfElse(onode); break; case WHILE: op = While.newOperation( onode.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case FOREACH: op = new Foreach( onode.getSourceRange(), astToSetValue((ASTVariable) node.jjtGetChild(0)), astToSetValue((ASTVariable) node.jjtGetChild(1)), astToOperation((SimpleNode) node.jjtGetChild(2)), astToOperation((SimpleNode) node.jjtGetChild(3))); break; case FOR: op = new For( onode.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1)), astToOperation((SimpleNode) node.jjtGetChild(2)), astToOperation((SimpleNode) node.jjtGetChild(3))); break; default: op = null; } break; case PanParserTreeConstants.JJTVARIABLE: op = astToVariable((ASTVariable) node, false); break; case PanParserTreeConstants.JJTLOGICALOREXPRESSION: op = LogicalOr.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTLOGICALANDEXPRESSION: op = LogicalAnd.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTBITWISEINCLUSIVEOROPERATION: op = BitIOR.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTBITWISEEXCLUSIVEOROPERATION: op = BitXOR.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTBITWISEANDOPERATION: op = BitAnd.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTEQOPERATION: op = LogicalEQ.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTNEOPERATION: op = LogicalNE.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTLTOPERATION: op = LogicalLT.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTGTOPERATION: op = LogicalGT.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTLEOPERATION: op = LogicalLE.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTGEOPERATION: op = LogicalGE.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTADDOPERATION: op = Add.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTSUBOPERATION: op = Sub.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTMULOPERATION: op = Mult.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTDIVOPERATION: op = Div.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTMODOPERATION: op = Mod.newOperation( node.getSourceRange(), astToOperation((SimpleNode) node.jjtGetChild(0)), astToOperation((SimpleNode) node.jjtGetChild(1))); break; case PanParserTreeConstants.JJTFUNCTION: op = astToFunction((ASTFunction) node); break; default: assert (false); break; } assert (op != null); return op; }