/**
   * Retira os estados mortos do autômato
   *
   * @param automato
   * @param naoMortos
   */
  private static void retirarEstadosMortos(
      Automato automato, ArrayListPersonalizado<Estado> naoMortos) {

    ArrayListPersonalizado<Estado> auxiliar = new ArrayListPersonalizado<>();
    auxiliar.addAll(naoMortos);

    for (Mapeamento mapeamento : automato.funcaoMapeamento) {
      if (naoMortos.contains(mapeamento.estadoDestino)) {
        auxiliar.add(mapeamento.estadoOrigem);
      }
    }
    if (!auxiliar.equals(naoMortos)) {
      retirarEstadosMortos(automato, auxiliar);
      return;
    }
    ArrayListPersonalizado<Estado> mortos =
        (ArrayListPersonalizado<Estado>) automato.estados.clone();
    naoMortos.add(automato.erro);
    mortos.removeAll(naoMortos);

    retirarEstadosEProducoes(automato, mortos);
  }