public EstAFD2 compararEstadosAFD(EstAFD2 estadoAFD) { Boolean iguales = true; Boolean encontrado = false; for (int i = 0; i < listaEstadosAFD.Count(); i++) { iguales = true; if (listaEstadosAFD[i].getEstadosAFN().Count() == estadoAFD.getEstadosAFN().Count()) { for (int j = 0; j < estadoAFD.getEstadosAFN().Count(); j++) { encontrado = false; for (int k = 0; k < listaEstadosAFD[i].getEstadosAFN().Count(); k++) { if (estadoAFD.getEstadosAFN()[j].getNumero() == listaEstadosAFD[i].getEstadosAFN()[k].getNumero()) { encontrado = true; break; } } if (!encontrado) { iguales = false; break; } } if (iguales) { return(listaEstadosAFD[i]); } } } return(estadoAFD); }
public List <Estado> mueve(EstAFD2 estadoAFD, String terminal) { List <Estado> estadosAFN = new List <Estado>(); for (int i = 0; i < estadoAFD.getEstadosAFN().Count(); i++) { for (int j = 0; j < estadoAFD.getEstadosAFN()[i].getListTrans().Count(); j++) { if (estadoAFD.getEstadosAFN()[i].getListTrans()[j].getSimbolo().Equals(terminal)) { estadosAFN.Add(estadoAFD.getEstadosAFN()[i].getListTrans()[j].getFinal()); } } } if (estadosAFN.Count() > 0) { TransAFD2 transicion = new TransAFD2(estadoAFD, null, terminal); transiciones.Add(transicion); } Console.WriteLine("mueve de " + estadoAFD.getNombre() + " con " + terminal); for (int i = 0; i < estadosAFN.Count(); i++) { Console.Write(estadosAFN[i].getNumero() + ", "); } Console.WriteLine(); return(estadosAFN); }
public void generarAFD(List <Estado> estados, List <String> terminales) { listaEstadosAFD = new List <EstAFD2>(); transiciones = new List <TransAFD2>(); Estado inicial = obtenerEstadoInicial(estados); listaEstadosAFD.Add(cerradura(inicial)); listaEstadosAFD[listaEstadosAFD.Count() - 1].setInicial(true); for (int j = 0; j < listaEstadosAFD.Count(); j++) { for (int i = 0; i < terminales.Count(); i++) { List <Estado> estadoAFN = mueve(listaEstadosAFD[j], terminales[i]); if (estadoAFN.Count() > 0) { EstAFD2 estadoAFD = cerradura(estadoAFN); if (!estadoAFD.isAgregado()) { listaEstadosAFD.Add(estadoAFD); estadoAFD.setAgregado(true); for (int t = 0; t < estadoAFD.getEstadosAFN().Count(); t++) { Console.Write(estadoAFD.getEstadosAFN()[t].getNumero() + ", "); } } } } } String grafo = generarCodigoGraphviz(); generarImagenGraphviz(grafo, "afd" + contadorImagen); llenarTransicionesPorEstado(); String tabla = generarCodigoGraphvizTT(terminales); generarImagenGraphviz(tabla, "tt" + contadorImagen); contadorImagen++; /* List<Estado> estadosAFN = mueve(estadoAFD, terminales[0]); * EstadoAFD estadoAFD2 = cerradura(estadosAFN); * List<Estado> estadosAFN = mueve(estadoAFD, terminales[1]); * EstadoAFD estadoAFD3 = cerradura(estadosAFN); * List<Estado> estadosAFN = mueve(estadoAFD2, terminales[0]); * EstadoAFD estadoAFD4 = cerradura(estadosAFN); * List<Estado> estadosAFN = mueve(estadoAFD2, terminales[1]); * EstadoAFD estadoAFD5 = cerradura(estadosAFN);*/ }
public EstAFD2 cerradura(Estado estadoAFN) { EstAFD2 estadoAFD = new EstAFD2(contadorEstado); estadoAFD.getEstadosAFN().Add(estadoAFN); if (estadoAFN.isEstAceptacion()) { estadoAFD.setAceptacion(true); } for (int j = 0; j < estadoAFD.getEstadosAFN().Count(); j++) { for (int i = 0; i < estadoAFD.getEstadosAFN()[j].getListTrans().Count(); i++) { if (estadoAFD.getEstadosAFN()[j].getListTrans()[i].getSimbolo().Equals("ep")) { estadoAFD.getEstadosAFN().Add(estadoAFD.getEstadosAFN()[j].getListTrans()[i].getFinal()); if (estadoAFD.getEstadosAFN()[j].getListTrans()[i].getFinal().isEstAceptacion()) { estadoAFD.setAceptacion(true); } } } } Console.WriteLine("cerradura de: " + estadoAFN.getNumero()); Console.WriteLine("\n"); for (int i = 0; i < estadoAFD.getEstadosAFN().Count(); i++) { Console.Write(estadoAFD.getEstadosAFN()[i].getNumero() + ", "); } Console.WriteLine("\n"); Console.WriteLine("Estado " + estadoAFD.getNombre()); contadorEstado++; return(estadoAFD); }
public EstAFD2 cerradura(List <Estado> estadosAFN) { int contador = 0; EstAFD2 estadoAFD = new EstAFD2(contadorEstado); for (int k = 0; k < estadosAFN.Count(); k++) { estadoAFD.getEstadosAFN().Add(estadosAFN[k]); if (estadosAFN[k].isEstAceptacion()) { estadoAFD.setAceptacion(true); } for (int j = contador; j < estadoAFD.getEstadosAFN().Count(); j = contador) { for (int i = 0; i < estadoAFD.getEstadosAFN()[j].getListTrans().Count(); i++) { if (estadoAFD.getEstadosAFN()[j].getListTrans()[i].getSimbolo().Equals("ep")) { estadoAFD.getEstadosAFN().Add(estadoAFD.getEstadosAFN()[j].getListTrans()[i].getFinal()); if (estadoAFD.getEstadosAFN()[j].getListTrans()[i].getFinal().isEstAceptacion()) { estadoAFD.setAceptacion(true); } } } contador++; } } Console.WriteLine("cerradura de: "); for (int i = 0; i < estadosAFN.Count(); i++) { Console.Write(estadosAFN[i].getNumero() + ", "); } Console.WriteLine("\n"); for (int i = 0; i < estadoAFD.getEstadosAFN().Count(); i++) { Console.Write(estadoAFD.getEstadosAFN()[i].getNumero() + ", "); } Console.WriteLine("\n"); estadoAFD = compararEstadosAFD(estadoAFD); transiciones[transiciones.Count() - 1].setFinal(estadoAFD); Console.WriteLine("Estado " + estadoAFD.getNombre()); contadorEstado++; return(estadoAFD); }