final public IndexPart IndexPart(Recovery next) throws ParseException {
    Token sort;
    Identifier identifier;
    IndexPart index_part = new IndexList();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case INDEX_T:
    case AUGMENTS_T:
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case INDEX_T:
        sort = jj_consume_token(INDEX_T);
                next.push(RIGHT_BRACE_T);
                next.push(IMPLIED_T);
                next.push(VALUE_IDENTIFIER_T);
        LBraceSymbol(next);
        try {
          index_part = IndexList();
                    next.pop(); /* VALUE_IDENTIFIER_T */
                    next.pop(); /* IMPLIED_T */

        } catch (ParseException e) {
                makeError(e.currentToken, "error in INDEX-clause");
                recovery(next);
        }
                next.pop(); /* RIGHT_BRACE_T */

        RBraceSymbol(next);
        break;
      case AUGMENTS_T:
        sort = jj_consume_token(AUGMENTS_T);
                next.push(RIGHT_BRACE_T);
                next.push(VALUE_IDENTIFIER_T);
        LBraceSymbol(next);
        try {
          identifier = ValueIdentifier();
                    index_part = new IndexAugments(identifier);
        } catch (ParseException e) {
                makeError(e.currentToken, "error in AUGMENTS-clause");
                recovery(next);
        }
                next.pop(); /* RIGHT_BRACE_T */

        RBraceSymbol(next);
        break;
      default:
        jj_la1[56] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      break;
    default:
      jj_la1[57] = jj_gen;
      ;
    }
      {if (true) return index_part;}
    throw new Error("Missing return statement in function");
  }