public Automata uninion(Automata afn1, Automata afn2) { Automata afn_union = new Automata(); Estado nuevoinicio = new Estado(0); nuevoinicio.setTransiciones(new Transicion(nuevoinicio, afn2.getEstadoInicial(), Form1.EPSILON)); afn_union.addEstados(nuevoinicio); afn_union.setEstadoInicial(nuevoinicio); int i = 0; for (i = 0; i < afn1.getEstados().Count; i++) { Estado tmp = (Estado)afn1.getEstados()[i]; tmp.setId(i + 1); afn_union.addEstados(tmp); } for (int j = 0; j < afn2.getEstados().Count; j++) { Estado tmp = (Estado)afn2.getEstados()[j]; tmp.setId(i + 1); afn_union.addEstados(tmp); i++; } Estado nuevoFin = new Estado(afn1.getEstados().Count + afn2.getEstados().Count + 1); afn_union.addEstados(nuevoFin); afn_union.addEstadosAceptacion(nuevoFin); Estado anteriorInicio = afn1.getEstadoInicial(); ArrayList anteriorFin = afn1.getEstadosAceptacion(); ArrayList anteriorFin2 = afn2.getEstadosAceptacion(); nuevoinicio.getTransiciones().Add(new Transicion(nuevoinicio, anteriorInicio, Form1.EPSILON)); //Console.Write(anteriorFin[0]); for (int k = 0; k < anteriorFin.Count; k++) { Estado aux = (Estado)anteriorFin[k]; aux.getTransiciones().Add(new Transicion((Estado)anteriorFin[k], nuevoFin, Form1.EPSILON)); } for (int k = 0; k < anteriorFin.Count; k++) { Estado aux = (Estado)anteriorFin2[k]; aux.getTransiciones().Add(new Transicion((Estado)anteriorFin2[k], nuevoFin, Form1.EPSILON)); } HashSet <string> alfabeto = new HashSet <string>(afn1.getAlfabeto()); alfabeto.UnionWith(afn2.getAlfabeto()); afn_union.setAlfabeto(alfabeto); afn_union.setLenguajeR(afn1.getLenguajeR() + " " + afn2.getLenguajeR()); return(afn_union); }
public Automata cerraduraKleen(Automata afn) { Automata afnkleen = new Automata(); Estado nuevoinicio = new Estado(0); afnkleen.addEstados(nuevoinicio); afnkleen.setEstadoInicial(nuevoinicio); int q = 1; foreach (Estado item in afn.getEstados()) { Estado temp = item; temp.setId(q); q++; afnkleen.addEstados(temp); } Estado nuevoFin = new Estado(afn.getEstados().Count + 1); afnkleen.addEstados(nuevoFin); afnkleen.addEstadosAceptacion(nuevoFin); Estado anteriorInicio = afn.getEstadoInicial(); ArrayList anteriorFin = afn.getEstadosAceptacion(); nuevoinicio.getTransiciones().Add(new Transicion(nuevoinicio, anteriorInicio, Form1.EPSILON)); nuevoinicio.getTransiciones().Add(new Transicion(nuevoinicio, nuevoFin, Form1.EPSILON)); foreach (Estado estado in anteriorFin) { estado.getTransiciones().Add(new Transicion(estado, anteriorInicio, Form1.EPSILON)); estado.getTransiciones().Add(new Transicion(estado, nuevoFin, Form1.EPSILON)); } afnkleen.setAlfabeto(afn.getAlfabeto()); afnkleen.setLenguajeR(afn.getLenguajeR()); return(afnkleen); }
public HashSet <Estado> metodoCerradura(Estado state) { Stack <Estado> pila = new Stack <Estado>(); Estado actual = state; actual.getTransiciones(); HashSet <Estado> rusultado = new HashSet <Estado>(); pila.Push(actual); bool agrega; while (pila.Count != 0) { actual = pila.Pop(); foreach (Transicion item in actual.getTransiciones()) { agrega = true; if (item.getSimbolo().Equals(Form1.EPSILON)) { foreach (Estado est in rusultado) { if (est.id.Equals(item.getFin().id)) { agrega = false; } } if (agrega == true) { rusultado.Add(item.getFin()); pila.Push(item.getFin()); } } } } rusultado.Add(state); return(rusultado); }
public Estado mover(Estado estado, string simbolo) { ArrayList alcanzados = new ArrayList(); foreach (Transicion transicion in (ArrayList)estado.getTransiciones()) { Estado estadosiguiente = transicion.getFin(); string lexema = transicion.getSimbolo(); if (lexema.Equals(simbolo) && !alcanzados.Contains(estadosiguiente)) { alcanzados.Add(estadosiguiente); } } return((Estado)alcanzados[0]); }