/**
   * Cria um novo automato a partir das classes de equivalencia calculadas
   *
   * @param automato
   * @param equivalencia
   */
  private static void criarNovoAutomato(Automato automato, Equivalencia equivalencia) {
    automato.estados.clear();
    automato.estadosFinais.clear();
    automato.inicial = null;
    ArrayListPersonalizado<Mapeamento> novosMapeamentos = new ArrayListPersonalizado<>();

    for (ClasseEquivalencia classeEstado : equivalencia.classesEquivalencia) {
      Estado estado = new Estado();
      estado.label = "q" + classeEstado.label;
      estado.tipo = defineTipoEstado(classeEstado);

      automato.estados.add(estado);

      if (estado.tipo.equals(TipoEstado.INICIALFINAL)) {
        automato.estadosFinais.add(estado);
        automato.inicial = estado;
      } else if (estado.tipo.equals(TipoEstado.INICIAL)) {
        automato.inicial = estado;
      } else if (estado.tipo.equals(TipoEstado.FINAL)) {
        automato.estadosFinais.add(estado);
      }
      criarFuncoesMapeamento(automato, classeEstado, equivalencia, novosMapeamentos);
    }
    automato.funcaoMapeamento = novosMapeamentos;
  }
 /**
  * Modifica a label do estado para que as letras que representam aquele estado sejam ordenadas
  *
  * @param estado
  */
 public static void sortNomeEstado(Estado estado) {
   char[] chars = estado.label.toCharArray();
   Arrays.sort(chars);
   estado.label = String.valueOf(chars);
 }