/** * 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); }
/** * Cria funcoes de mapeamento de cada classe para as suas respectivas classes de destino * * @param automato * @param classeEstado * @param equivalencia * @param novosMapeamentos */ private static void criarFuncoesMapeamento( Automato automato, ClasseEquivalencia classeEstado, Equivalencia equivalencia, ArrayListPersonalizado<Mapeamento> novosMapeamentos) { Estado aux = classeEstado.estadosClasse.get(0); ArrayList<Mapeamento> mapsAdicionais = new ArrayList<>(); for (String letraAlfabeto : automato.alfabeto) { for (Mapeamento mapeamento : automato.funcaoMapeamento) { if (mapeamento.estadoOrigem.equals(aux) && mapeamento.terminalTransicao.equals(letraAlfabeto)) { mapsAdicionais.add( new Mapeamento( criaOuRetornaEstadoAPartirDeClasse(automato, classeEstado), criaOuRetornaEstadoAPartirDeClasse( automato, equivalencia.retornarClassePeloEstado(mapeamento.estadoDestino)), letraAlfabeto)); } } } novosMapeamentos.addAll(mapsAdicionais); }