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 Alternancia(AFN operando1, AFN operando2) { Estado estadoInicial = new Estado(0); Transicion Opcion1 = new Transicion(estadoInicial, operando1.Inicial, "epsilon"); Transicion Opcion2 = new Transicion(estadoInicial, operando2.Inicial, "epsilon"); //Metiendo las transiciones estadoInicial.SetTransicionDer(Opcion2); estadoInicial.SetTransicionIzq(Opcion1); Estado estadoFinal = new Estado(6); //6 -> si fuera el mas simple existente Transicion Opcion1F = new Transicion(operando1.Final, estadoFinal, "epsilon"); Transicion Opcion2F = new Transicion(operando2.Final, estadoFinal, "epsilon"); //Metiendo las transiciones operando1.Final.SetTransicionIzq(Opcion1F); operando2.Final.SetTransicionIzq(Opcion2F); AFN alternancia = new AFN(); alternancia.Inicial = estadoInicial; alternancia.Final = estadoFinal; alternancia.Meter_EstNormales(operando1); alternancia.Meter_EstNormales(operando2); return(alternancia); }
private AFN CerraduraPositiva(AFN operando) { //Operando(operando.); //CerraduraKleen(operando); Estado estadoInicial = new Estado(0); Estado estadoFinal = new Estado(3); //3 -> si fuera el mas simple existente Transicion transicion = new Transicion(estadoInicial, operando.Inicial, "epsilon"); estadoInicial.SetTransicionIzq(transicion); //REPETICION Transicion repeticion = new Transicion(operando.Final, operando.Inicial, "epsilon"); //UNIENDO OPERANDO CON EL FINAL Transicion unionFinal = new Transicion(operando.Final, estadoFinal, "epsilon"); operando.Final.SetTransicionIzq(unionFinal); operando.Final.SetTransicionDer(repeticion); //CREANDO AFN AFN cerraduraPositiva = new AFN(); cerraduraPositiva.Inicial = estadoInicial; cerraduraPositiva.Final = estadoFinal; cerraduraPositiva.Meter_EstNormales(operando); return(cerraduraPositiva); }
public Estado(int no) //LO PONE COMO UN ESTADO DEL TIPO NORMAL { noEstado = no; tipoEstado = Tipo.NORMAL; T_derecha = null; T_izquierda = null; }
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 SE VUELVE UNA HOJA private AFN Operando(string simbolo) // S1 --- transicion(simbolo) --- >> S2 { //ELEMENTOS DEL AFN Estado estado1 = new Estado(0); Estado estado2 = new Estado(1); Transicion transicion = new Transicion(estado1, estado2, simbolo); //LLENANDO LISTA DE TERMINALES estado1.SetTransicionIzq(transicion); //el primero debe saber a donde jodidos va //CREANDO EL AFN AFN operando = new AFN(); operando.Inicial = estado1; operando.Final = estado2; //operando.conjuntoEst_Aceptacion.Add(estado2); return(operando); }
//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); }
private AFN Aparicion(AFN operando) { Estado estadoInicial = new Estado(0); Estado estadoFinal = new Estado(3); //3 -> si fuera el mas simple existente Transicion transicion = new Transicion(estadoInicial, operando.Inicial, "epsilon"); //QUE NO APAREZCA NADA Transicion inicial_final = new Transicion(estadoInicial, estadoFinal, "epsilon"); estadoInicial.SetTransicionIzq(transicion); estadoInicial.SetTransicionDer(inicial_final); //UNIENDO OPERANDO CON EL FINAL Transicion unionFinal = new Transicion(operando.Final, estadoFinal, "epsilon"); operando.Final.SetTransicionIzq(unionFinal); //CREANDO AFN AFN aparicion = new AFN(); aparicion.Inicial = estadoInicial; aparicion.Final = estadoFinal; aparicion.Meter_EstNormales(operando); return(aparicion); }
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); }
public void SetTransicionDer(Transicion transicion) { T_derecha = transicion; }
public void SetTransicionIzq(Transicion transicion) { T_izquierda = transicion; }