final public primaryExisiting2_AST PrimaryExisting_2() throws ParseException {
    Token t = null;
    List<binaryExpression_AST> args = null;
    binaryExpression_AST arrayExpression = null;
    primaryExisiting2_AST p2 = null;
      primaryExisiting2_AST jjtn004 = new primaryExisiting2_AST(JJTPRIMARYEXISITING2_AST);
      boolean jjtc004 = true;
      jjtree.openNodeScope(jjtn004);
    try {
      jj_consume_token(DOT);
              fieldExpr_AST jjtn001 = new fieldExpr_AST(JJTFIELDEXPR_AST);
              boolean jjtc001 = true;
              jjtree.openNodeScope(jjtn001);
      try {
        t = jj_consume_token(ID);
      } finally {
              if (jjtc001) {
                jjtree.closeNodeScope(jjtn001, true);
              }
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case LP:
      case LSB:
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case LP:
          jj_consume_token(LP);
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case NEW:
          case SUPER:
          case THIS:
          case INTEGER:
          case TRUE:
          case FALSE:
          case CHARLITERAL:
          case STRINGLITERAL:
          case NULL:
          case LP:
          case NOT:
          case PLUS:
          case MINUS:
          case ID:
            args = ActualArguments();
            break;
          default:
            jj_la1[63] = jj_gen;
            ;
          }
                                                                          methodExpr_AST jjtn002 = new methodExpr_AST(JJTMETHODEXPR_AST);
                                                                          boolean jjtc002 = true;
                                                                          jjtree.openNodeScope(jjtn002);
          try {
            jj_consume_token(RP);
          } finally {
                                                                          if (jjtc002) {
                                                                            jjtree.closeNodeScope(jjtn002, true);
                                                                          }
          }
      jjtn004.isMethodCall = true;
          break;
        case LSB:
          jj_consume_token(LSB);
          arrayExpression = Expression();
                                              arrayExpr_AST jjtn003 = new arrayExpr_AST(JJTARRAYEXPR_AST);
                                              boolean jjtc003 = true;
                                              jjtree.openNodeScope(jjtn003);
          try {
            jj_consume_token(RSB);
          } finally {
                                              if (jjtc003) {
                                                jjtree.closeNodeScope(jjtn003, true);
                                              }
          }
          break;
        default:
          jj_la1[64] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
        break;
      default:
        jj_la1[65] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case DOT:
        p2 = PrimaryExisting_2();
        break;
      default:
        jj_la1[66] = jj_gen;
        ;
      }
      jjtree.closeNodeScope(jjtn004, true);
      jjtc004 = false;
      jjtn004.attribute = t.image;
      jjtn004.arguments = args;
      jjtn004.arrayExpression = arrayExpression;
      jjtn004.p2 = p2;
      {if (true) return jjtn004;}
    } catch (Throwable jjte004) {
      if (jjtc004) {
        jjtree.clearNodeScope(jjtn004);
        jjtc004 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte004 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte004;}
      }
      if (jjte004 instanceof ParseException) {
        {if (true) throw (ParseException)jjte004;}
      }
      {if (true) throw (Error)jjte004;}
    } finally {
      if (jjtc004) {
        jjtree.closeNodeScope(jjtn004, true);
      }
    }
    throw new Error("Missing return statement in function");
  }