final public Type TypeDefinition(Recovery next) throws ParseException {
    Type type;
    DisplayHintPart displayhint;
    SyntaxPart syntax;
    StatusPart status;
    DescriptionPart description;
    ReferencePart reference;
    Token type_t;
    NodeList vtList;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case OBJECT_IDENTIFIER_T:
    case INTEGER_T:
    case BITS_T:
    case BIT_STRING_T:
    case OCTET_STRING_T:
    case SEQUENCE_OF_T:
    case COUNTER32_T:
    case COUNTER_T:
    case GAUGE32_T:
    case GAUGE_T:
    case TIMETICKS_T:
    case OPAQUE_T:
    case IP_ADDRESS_T:
    case NETWORK_ADDRESS_T:
    case NSAP_ADDRESS_T:
    case COUNTER64_T:
    case UNSIGNED32_T:
    case UINTEGER32_T:
    case INTEGER32_T:
    case TYPE_IDENTIFIER_T:
      /* Only added for SMIv1 support. */
              type = Types();
      break;
    case TEXTUAL_CONVENTION_T:
      type_t = jj_consume_token(TEXTUAL_CONVENTION_T);
            next.push(SYNTAX_T);
            next.push(REFERENCE_T);
            next.push(DESCRIPTION_T);
            next.push(STATUS_T);
      displayhint = DisplayHintPart(next);
            next.pop(); /* STATUS_T */

      status = StatusPart(next);
            next.pop(); /* DESCRIPTION_T */

      description = DescriptionPart(next);
            next.pop(); /* REFERENCE_T */

      reference = ReferencePart(next);
            next.pop(); /* SYNTAX_T */

      syntax = SyntaxPart(next);
            type = new TypeTextualConvention(displayhint,
                            status,
                            description,
                            reference,
                            syntax);
      break;
    case SEQUENCE_T:
      type_t = jj_consume_token(SEQUENCE_T);
      vtList = BracedValueTypeList();
          type = new TypeSequence(vtList);
      break;
    default:
      jj_la1[11] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
      {if (true) return type;}
    throw new Error("Missing return statement in function");
  }