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 concatenacion(Automata afn1, Automata afn2) { Automata afn_concat = new Automata(); int i = 0; for (i = 0; i < afn2.getEstados().Count; i++) { Estado temp = (Estado)afn2.getEstados()[i]; temp.setId(i); if (i == 0) { afn_concat.setEstadoInicial(temp); } if (i == afn2.getEstados().Count - 1) { for (int k = 0; k < afn2.getEstadosAceptacion().Count; k++) { temp.setTransiciones(new Transicion((Estado)afn2.getEstadosAceptacion()[k], afn1.getEstadoInicial(), Form1.EPSILON)); } } afn_concat.addEstados(temp); } for (int j = 0; j < afn1.getEstados().Count; j++) { Estado tmp = (Estado)afn1.getEstados()[j]; tmp.setId(i); //define el ultimo con estado de aceptacion if (afn1.getEstados().Count - 1 == j) { afn_concat.addEstadosAceptacion(tmp); } afn_concat.addEstados(tmp); i++; } HashSet <string> alfabeto = new HashSet <string>(afn1.getAlfabeto()); //alfabeto.Union(afn1.getAlfabeto()); alfabeto.UnionWith(afn2.getAlfabeto()); afn_concat.setAlfabeto(alfabeto); afn_concat.setLenguajeR(afn1.getLenguajeR() + " " + afn2.getLenguajeR()); return(afn_concat); }
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); }