final public ModuleCompliance ModuleCompliance() throws ParseException {
    Token module_t;
    ModuleIdentifier module_id;
    NodeList mandatory;
    CompliancePart compliance;
    ModuleCompliance module_compliance = new ModuleCompliance();
    Recovery next = new Recovery();
    next.push(ASSIGN_T);
    next.push(GROUP_T);
    next.push(OBJECT_T);
    module_t = jj_consume_token(MODULE_T);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case TYPE_IDENTIFIER_T:
      module_id = ModuleIdentifier();
          module_compliance.addModuleIdentifier(module_id);
      break;
    default:
      jj_la1[25] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case MANDATORY_GROUPS_T:
      mandatory = MandatoryPart(next);
          module_compliance.addMandatoryPart(mandatory);
      break;
    default:
      jj_la1[26] = jj_gen;
      ;
    }
    label_7:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case GROUP_T:
      case OBJECT_T:
        ;
        break;
      default:
        jj_la1[27] = jj_gen;
        break label_7;
      }
      try {
        compliance = CompliancePart(next);
              module_compliance.addCompliancePart(compliance);
      } catch (ParseException e) {
            handleError(e, next, "<compliance part>");
      }
    }
      {if (true) return module_compliance;}
    throw new Error("Missing return statement in function");
  }