final public newArray_AST NewArray() throws ParseException {
        SimpleNode type = null;
        List<binaryExpression_AST> arrayIndices = new ArrayList<binaryExpression_AST>();
        binaryExpression_AST arrayIndex  = null;
        int size  = 0;
    newArray_AST jjtn001 = new newArray_AST(JJTNEWARRAY_AST);
    boolean jjtc001 = true;
    jjtree.openNodeScope(jjtn001);
    try {
      jj_consume_token(NEW);
      type = Type();
      label_14:
      while (true) {
        jj_consume_token(LSB);
        arrayIndex = Expression();
        jj_consume_token(RSB);
        size = size + 1;
        arrayIndices.add(arrayIndex);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case LSB:
          ;
          break;
        default:
          jj_la1[67] = jj_gen;
          break label_14;
        }
      }
    jjtree.closeNodeScope(jjtn001, true);
    jjtc001 = false;
    type.typeObj.arraySize = size;
    type.typeObj.isArray = true;
    jjtn001.size = size;
    jjtn001.arrayIndices = arrayIndices;
    jjtn001.typeObj = type.typeObj;
    {if (true) return jjtn001;}
    } catch (Throwable jjte001) {
    if (jjtc001) {
      jjtree.clearNodeScope(jjtn001);
      jjtc001 = false;
    } else {
      jjtree.popNode();
    }
    if (jjte001 instanceof RuntimeException) {
      {if (true) throw (RuntimeException)jjte001;}
    }
    if (jjte001 instanceof ParseException) {
      {if (true) throw (ParseException)jjte001;}
    }
    {if (true) throw (Error)jjte001;}
    } finally {
    if (jjtc001) {
      jjtree.closeNodeScope(jjtn001, true);
    }
    }
    throw new Error("Missing return statement in function");
  }