public void EnOrderDer(Transicion transicion) { Transicion transicionDerecha, transicion1; string textDerecha; while (transicion != null) { transicionDerecha = transicion.GetPrimero().GetTransicionDer(); if (transicionDerecha != null) { transicion1 = transicionDerecha.GetSegundo().GetTransicionIzq(); text += transicionDerecha.GetPrimero().GetNoEstado() + " -> " + transicionDerecha.GetSegundo().GetNoEstado() + "[label=\"" + transicionDerecha.GetTransicionSimbolo() + "\"]"; while (transicion1 != null) { textDerecha = transicion1.GetPrimero().GetNoEstado() + " -> " + transicion1.GetSegundo().GetNoEstado() + "[label=\"" + transicion1.GetTransicionSimbolo() + "\"]"; if (text.Contains(textDerecha)) { break; } else { text += textDerecha; } transicion1 = transicion1.GetSegundo().GetTransicionIzq(); } } transicion = transicion.GetSegundo().GetTransicionIzq(); } }
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); }
//ESTE METODO DEVUELVE UNA LISTA DE ESTADOS QUE HAY QUE MANDAR A CERRADURA private List <Estado> Mueve(List <Estado> estados, string terminal) { List <Estado> estadosAlcanzados = new List <Estado>(); foreach (var actual in estados) { Transicion transicion = actual.GetTransicionDer(); if (transicion != null && transicion.GetTransicionSimbolo().Equals(terminal) && !estadosAlcanzados.Contains(transicion.GetSegundo())) { estadosAlcanzados.Add(transicion.GetSegundo()); } transicion = actual.GetTransicionIzq(); if (transicion != null && transicion.GetTransicionSimbolo().Equals(terminal) && !estadosAlcanzados.Contains(transicion.GetSegundo())) { estadosAlcanzados.Add(transicion.GetSegundo()); } } return(estadosAlcanzados); }
public void EnOrder(Transicion transicion) { bool repeticion = false; string textoAlt; if (transicion != null) { textoAlt = transicion.GetPrimero().GetNoEstado() + " -> " + transicion.GetSegundo().GetNoEstado() + "[label=\"" + transicion.GetTransicionSimbolo() + "\"]"; if (text.Contains(textoAlt)) { repeticion = true; } else { text += textoAlt; } EnOrder(transicion.GetSegundo().GetTransicionIzq()); if (!repeticion) { EnOrder(transicion.GetSegundo().GetTransicionDer()); } } }
private EstadoAFD Cerradura(List <Estado> estados) { Stack <Estado> pilaEstados = new Stack <Estado>(); Estado actual; //estado AFD List <Estado> listaEstados = new List <Estado>(); List <int> numeroEstados = new List <int>(); foreach (var estado in estados) { actual = estado; pilaEstados.Push(actual); numeroEstados.Add(estado.GetNoEstado()); while (pilaEstados.Count > 0) { actual = pilaEstados.Pop(); if (actual != null) { Transicion transicion = actual.GetTransicionDer(); if (transicion != null && transicion.GetTransicionSimbolo().Equals("epsilon") && !listaEstados.Contains(transicion.GetSegundo())) { listaEstados.Add(transicion.GetSegundo()); numeroEstados.Add(transicion.GetSegundo().GetNoEstado()); pilaEstados.Push(transicion.GetSegundo()); } transicion = actual.GetTransicionIzq(); if (transicion != null && transicion.GetTransicionSimbolo().Equals("epsilon") && !listaEstados.Contains(transicion.GetSegundo())) { listaEstados.Add(transicion.GetSegundo()); numeroEstados.Add(transicion.GetSegundo().GetNoEstado()); pilaEstados.Push(transicion.GetSegundo()); } } } listaEstados.Add(estado); } EstadoAFD estadoAFD = new EstadoAFD(nombreEstadoAFD++, numeroEstados, listaEstados); if (listaEstados.Contains(automataND.GetEstadoFinal())) { estadoAFD.SetTipoEstado(EstadoAFD.Tipo.FINAL); } else { estadoAFD.SetTipoEstado(EstadoAFD.Tipo.NORMAL); } //Console.WriteLine("PRUEBA ESTADOS POR " + "epsilon"); //string alv = ""; //foreach (Estado est in listaEstados) //{ // alv += est.GetNoEstado(); //} return(estadoAFD); }