final public Identifier Symbol() throws ParseException {
    Identifier identifier;
    if (jj_2_1(3)) {
      identifier = TypeIdentifier();
    } else if (jj_2_2(3)) {
      identifier = ValueIdentifier();
    } else {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case INDEX_SYNTAX_T:
      case APPLICATION_SYNTAX_T:
      case OBJECT_SYNTAX_T:
      case SIMPLE_SYNTAX_T:
        identifier = TypeIdentifierException();
        break;
      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:
        identifier = SmiTypes();
        break;
      case OBJECT_TYPE_T:
      case OBJECT_IDENTITY_T:
      case OBJECT_GROUP_T:
      case TEXTUAL_CONVENTION_T:
      case NOTIFICATION_TYPE_T:
      case NOTIFICATION_GROUP_T:
      case MODULE_IDENTITY_T:
      case MODULE_COMPLIANCE_T:
      case AGENT_CAPABILITIES_T:
      case TRAP_TYPE_T:
        identifier = PredefinedMacro();
        break;
      default:
        jj_la1[6] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
      {if (true) return identifier;}
    throw new Error("Missing return statement in function");
  }