/** * 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); }