public string GraphvizAFN(Stack <AFN> stackAFN) { AFN Thompson = stackAFN.Peek(); EnOrder(Thompson.GetEstadoInicial().GetTransicionIzq()); EnOrder(Thompson.GetEstadoInicial().GetTransicionDer()); // EnOrderDer(Thompson.GetEstadoInicial().GetTransicionIzq()); return(Graficar(text)); }
private AFN Concatenacion(AFN operando1, AFN operando2) // S1 ---tran1_2--->> S2 ---tran2_3--->> S3 { //MODIFICAR TRANSICION: LOS QUE APUNTAN A ULTIMO YA NO LO HACEN Transicion cambioIzq = operando1.GetEstadoInicial().GetTransicionIzq(); Transicion cambioDer = operando1.GetEstadoInicial().GetTransicionDer(); if (cambioIzq != null && cambioIzq.GetSegundo() == operando1.GetEstadoFinal()) { cambioIzq.SetSegundoEstado(operando2.GetEstadoInicial()); } if (cambioDer != null && cambioDer.GetSegundo() == operando1.GetEstadoFinal()) { cambioDer.SetSegundoEstado(operando2.GetEstadoInicial()); } foreach (var estado in operando1.GetListaEstados()) { cambioIzq = estado.GetTransicionIzq(); cambioDer = estado.GetTransicionDer(); if (cambioIzq != null && cambioIzq.GetSegundo() == operando1.GetEstadoFinal()) { cambioIzq.SetSegundoEstado(operando2.GetEstadoInicial()); } if (cambioDer != null && cambioDer.GetSegundo() == operando1.GetEstadoFinal()) { cambioDer.SetSegundoEstado(operando2.GetEstadoInicial()); } } //LO UNICO QUE HAY QUE HACER ES UNIR EL ULTIMO DEL PRIMERO CON EL PRIMERO DEL ULTIMO operando1.Final = operando2.Inicial; AFN concatenacion = new AFN(); concatenacion.Inicial = operando1.Inicial; concatenacion.Final = operando2.Final; //METIENDO EL RESTO DE ESTADOS AFN NUMERO 1 foreach (var estado in operando1.GetListaEstados()) { concatenacion.GetListaEstados().Add(estado); } concatenacion.GetListaEstados().Add(operando1.Final); //METIENDO EL RESTO DE ESTADOS AFN NUMERO 2 foreach (var estado in operando2.GetListaEstados()) { concatenacion.GetListaEstados().Add(estado); } return(concatenacion); }
public void CrearAFD() { estVacio.SetNombreEstadoAFD(-1); nombreEstadoAFD = 0; Queue <EstadoAFD> colaEstadosAFD = new Queue <EstadoAFD>(); List <Estado> estados1 = new List <Estado>(); estados1.Add(automataND.GetEstadoInicial()); EstadoAFD cerradura = Cerradura(estados1); listaGeneralEstados.Add(cerradura); // List<Estado> listaCerradura = cerradura.GetEstadosAlcanzados(); List <EstadoAFD> listaEstadosAFD = new List <EstadoAFD>(); listaEstadosAFD.Add(cerradura); colaEstadosAFD.Enqueue(cerradura); Mueve mueve; while (colaEstadosAFD.Count > 0) { EstadoAFD temp = colaEstadosAFD.Dequeue(); foreach (var terminal in listaTerminales) { List <Estado> estados = Mueve(temp.GetEstadosAlcanzados(), terminal); //ida y simbolo mueve = new Mueve(temp, terminal); bool entrar = true; EstadoAFD estadoAFD_nuevo = Cerradura(estados); Console.WriteLine("estados mueves"); Console.WriteLine("ESTADO " + estadoAFD_nuevo.GetNombreEstadoAFD()); string hola = ""; foreach (var item in estadoAFD_nuevo.GetEstadosAlcanzados()) { hola += item.GetNoEstado().ToString() + ", "; } Console.WriteLine(hola); foreach (var estado in estados) { entrar = true; Console.WriteLine("estado act: " + temp.GetNombreEstadoAFD() + " estAFD: " + estadoAFD_nuevo.GetNombreEstadoAFD() + " simbolo: " + terminal); for (int i = 0; i < listaEstadosAFD.Count; i++) { if (CompararEstadosAFD(listaEstadosAFD.ElementAt(i).GetEstadosAlcanzados(), estadoAFD_nuevo.GetEstadosAlcanzados()) == false) { entrar = false; mueve.SetLlegada(listaEstadosAFD.ElementAt(i)); mueves.Add(mueve); nombreEstadoAFD = listaGeneralEstados.Last().GetNombreEstadoAFD() + 1; break; } } if (entrar) { //llegada mueve.SetLlegada(estadoAFD_nuevo); mueves.Add(mueve); listaGeneralEstados.Add(estadoAFD_nuevo); colaEstadosAFD.Enqueue(estadoAFD_nuevo); listaEstadosAFD.Add(estadoAFD_nuevo); } } //if (agregar) //{ // char a = estadoSal; // mueve.SetLlegada(a.ToString()); // mueves.Add(mueve); // agregar = false; //} if (estados.Count == 0) { mueve.SetLlegada(estVacio); mueves.Add(mueve); nombreEstadoAFD = listaGeneralEstados.Last().GetNombreEstadoAFD() + 1; } //else if (entrar == false) //{ // nombreEstadoAFD--; //} //llegada vacia } } string estadosS; foreach (var item in listaGeneralEstados) { estadosS = ""; Console.WriteLine("ESTADO " + item.GetNombreEstadoAFD()); foreach (var item2 in item.GetEstadosAlcanzados()) { estadosS += item2.GetNoEstado().ToString() + ", "; } Console.WriteLine(estadosS); } foreach (var item in mueves) { Console.WriteLine("inicio: " + item.GetInicialString() + " llegada: " + item.GetLlegadaString() + " simbolo: " + item.GetSimbolo()); } //GenerarGraphivizAFDTabla(); //GenerarGraphvizAFD(); }