示例#1
0
  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;
  }