final public fieldAccess1_AST FieldAccess_1() throws ParseException {
  SimpleNode primaryFieldAccess = null;
  Token id =null;
  binaryExpression_AST index = null;
  List<binaryExpression_AST> arrayIndices = null;
    if (jj_2_15(6)) {
      primaryFieldAccess = PrimaryFieldAccess();
      jj_consume_token(DOT);
                                                     fieldExpr_AST jjtn001 = new fieldExpr_AST(JJTFIELDEXPR_AST);
                                                     boolean jjtc001 = true;
                                                     jjtree.openNodeScope(jjtn001);
      try {
        id = jj_consume_token(ID);
      } finally {
                                                     if (jjtc001) {
                                                       jjtree.closeNodeScope(jjtn001, true);
                                                     }
      }
                                                                                arrayExpr_AST jjtn002 = new arrayExpr_AST(JJTARRAYEXPR_AST);
                                                                                boolean jjtc002 = true;
                                                                                jjtree.openNodeScope(jjtn002);
      try {
        label_10:
        while (true) {
          jj_consume_token(LSB);
          index = Expression();
          jj_consume_token(RSB);
        if (arrayIndices == null) {
          arrayIndices = new ArrayList<binaryExpression_AST>();
        }
        arrayIndices.add(index);
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case LSB:
            ;
            break;
          default:
            jj_la1[25] = jj_gen;
            break label_10;
          }
        }
      } catch (Throwable jjte002) {
                                                                                if (jjtc002) {
                                                                                  jjtree.clearNodeScope(jjtn002);
                                                                                  jjtc002 = false;
                                                                                } else {
                                                                                  jjtree.popNode();
                                                                                }
                                                                                if (jjte002 instanceof RuntimeException) {
                                                                                  {if (true) throw (RuntimeException)jjte002;}
                                                                                }
                                                                                if (jjte002 instanceof ParseException) {
                                                                                  {if (true) throw (ParseException)jjte002;}
                                                                                }
                                                                                {if (true) throw (Error)jjte002;}
      } finally {
                                                                                if (jjtc002) {
                                                                                  jjtree.closeNodeScope(jjtn002, true);
                                                                                }
      }
    } else if (jj_2_16(6)) {
      primaryFieldAccess = PrimaryFieldAccess();
      jj_consume_token(DOT);
                                                    fieldExpr_AST jjtn003 = new fieldExpr_AST(JJTFIELDEXPR_AST);
                                                    boolean jjtc003 = true;
                                                    jjtree.openNodeScope(jjtn003);
      try {
        id = jj_consume_token(ID);
      } finally {
                                                    if (jjtc003) {
                                                      jjtree.closeNodeScope(jjtn003, true);
                                                    }
      }
    } else if (jj_2_17(6)) {
     idExpr_AST jjtn004 = new idExpr_AST(JJTIDEXPR_AST);
     boolean jjtc004 = true;
     jjtree.openNodeScope(jjtn004);
      try {
        id = jj_consume_token(ID);
      } finally {
     if (jjtc004) {
       jjtree.closeNodeScope(jjtn004, true);
     }
      }
                             arrayExpr_AST jjtn005 = new arrayExpr_AST(JJTARRAYEXPR_AST);
                             boolean jjtc005 = true;
                             jjtree.openNodeScope(jjtn005);
      try {
        label_11:
        while (true) {
          jj_consume_token(LSB);
          index = Expression();
          jj_consume_token(RSB);
    if (arrayIndices == null) {
          arrayIndices = new ArrayList<binaryExpression_AST>();
        }
        arrayIndices.add(index);
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case LSB:
            ;
            break;
          default:
            jj_la1[26] = jj_gen;
            break label_11;
          }
        }
      } catch (Throwable jjte005) {
                             if (jjtc005) {
                               jjtree.clearNodeScope(jjtn005);
                               jjtc005 = false;
                             } else {
                               jjtree.popNode();
                             }
                             if (jjte005 instanceof RuntimeException) {
                               {if (true) throw (RuntimeException)jjte005;}
                             }
                             if (jjte005 instanceof ParseException) {
                               {if (true) throw (ParseException)jjte005;}
                             }
                             {if (true) throw (Error)jjte005;}
      } finally {
                             if (jjtc005) {
                               jjtree.closeNodeScope(jjtn005, true);
                             }
      }
    } else {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case ID:
      idExpr_AST jjtn006 = new idExpr_AST(JJTIDEXPR_AST);
      boolean jjtc006 = true;
      jjtree.openNodeScope(jjtn006);
        try {
          id = jj_consume_token(ID);
        } finally {
      if (jjtc006) {
        jjtree.closeNodeScope(jjtn006, true);
      }
        }
        break;
      default:
        jj_la1[27] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
    fieldAccess1_AST jjtn007 = new fieldAccess1_AST(JJTFIELDACCESS1_AST);
    boolean jjtc007 = true;
    jjtree.openNodeScope(jjtn007);
    try {
    jjtree.closeNodeScope(jjtn007, true);
    jjtc007 = false;
    jjtn007.name = id.image;
    jjtn007.arrayIndices = arrayIndices;
    jjtn007.primaryFieldAccess = primaryFieldAccess;
    {if (true) return jjtn007;}
    } finally {
    if (jjtc007) {
      jjtree.closeNodeScope(jjtn007, true);
    }
    }
    throw new Error("Missing return statement in function");
  }