// public void positiva_Cadena(string a) // { // AFN klee = new Proyecto_1.AFN(); // klee.kleene_Cadena(a); //aca hago un afn con aux* que es la cerradura de kleen // concatenar_afCadena(a,klee); //} ///////////////////////////////////////////////////////////////////cerradura ? //funciona pero en el proyecto nos piden que convirtamos el ? de la siguiente manera |a£ una alter con el afn y £ //public void ceroUno_af(AFN a) //{ // Class_nodos i = new Class_nodos(); i.aumentarcount(); i.setTipoNodo("ceroUno");// le da numeracion al nodo // Class_nodos f = new Class_nodos(); f.aumentarcount(); f.setTipoNodo("ceroUno"); // le da numeracion al nodo // i.addTransicion(new Class_transiciones("£", a.getInicio().getContadorNodo().ToString()));//punteros de i // i.setNext1(a.getInicio()); a.getFinal().setNext1(f); a.getFinal().addTransicion(new Class_transiciones("£", f.getContadorNodo().ToString()));//punteros de a.final // i.addTransicion(new Class_transiciones("£", f.getContadorNodo().ToString())); // hago una trans del inicial al final //this.inicio = i; this.final = f; //} //public void ceroUno_C(string aa) //{ // AFN a = new Proyecto_1.AFN(); //a.primerAfn(aa); // Class_nodos i = new Class_nodos(); i.aumentarcount(); i.setTipoNodo("ceroUno");// le da numeracion al nodo // Class_nodos f = new Class_nodos(); f.aumentarcount(); f.setTipoNodo("ceroUno"); // le da numeracion al nodo // i.addTransicion(new Class_transiciones("£", a.getInicio().getContadorNodo().ToString()));//punteros de i // i.setNext1(a.getInicio()); a.getFinal().setNext1(f); a.getFinal().addTransicion(new Class_transiciones("£", f.getContadorNodo().ToString()));//punteros de a.final // i.addTransicion(new Class_transiciones("£", f.getContadorNodo().ToString())); // hago una trans del inicial al final // this.inicio = i; this.final = f; // } public void ceroUno_af(AFN a) { Class_nodos i = new Class_nodos(); i.aumentarcount(); i.setTipoNodo("ceroUno"); // le da numeracion al nodo Class_nodos f = new Class_nodos(); f.aumentarcount(); f.setTipoNodo("ceroUno"); // le da numeracion al nodo i.addTransicion(new Class_transiciones("£", a.getInicio().getContadorNodo().ToString())); //punteros de i i.addTransicion(new Class_transiciones("£", f.getContadorNodo().ToString())); //punteros de i hacia el final porque es ? i.setNext1(a.getInicio()); a.getFinal().setNext1(f); a.getFinal().addTransicion(new Class_transiciones("£", f.getContadorNodo().ToString())); //punteros de a.final this.inicio = i; this.final = f; }
public void primerAfn(string a) { //AFN result = new Proyecto_1.AFN(); Class_nodos i = new Class_nodos(); i.aumentarcount(); i.setTipoNodo("afn"); // le da numeracion al nodo Class_nodos f = new Class_nodos(); f.aumentarcount(); i.setTipoNodo("afn"); // le da numeracion al nodo i.addTransicion(new Class_transiciones(a, f.getContadorNodo().ToString())); // agrego una transicion hacia el nodo final de este afn i.setNext1(f); this.inicio = i; this.final = f; }
////////////////////////////// cerradura positiva //funciona bien solo que en el proyecto nos piden transformar la positiva como un .a*a que es lo mismo public void positiva_af(AFN a) { Class_nodos i = new Class_nodos(); i.aumentarcount(); i.setTipoNodo("unoVarios"); // le da numeracion al nodo Class_nodos f = new Class_nodos(); f.aumentarcount(); f.setTipoNodo("unoVarios"); // le da numeracion al nodo i.addTransicion(new Class_transiciones("£", a.getInicio().getContadorNodo().ToString())); //punteros de i i.setNext1(a.getInicio()); a.getFinal().setNext1(f); a.getFinal().addTransicion(new Class_transiciones("£", f.getContadorNodo().ToString())); //punteros de a.final a.getFinal().addTransicion(new Class_transiciones("£", a.getInicio().getContadorNodo().ToString())); // hago una trans del a.final al a.inicio this.inicio = i; this.final = f; }
//Funcion para la concatenacion public void concatenar_afaf(AFN a, AFN b) { a.getFinal().setNext1(b.getInicio().getNext1()); /// agarro el f de a y le pongo el next del inicio de b if (b.getInicio().getNext2() != null) //si no esta vacio agrego un next2 al f de a, { a.getFinal().setNext2(b.getInicio().getNext2()); } a.getFinal().setListTransiciones(b.getInicio().getListTransiciones()); // le paso las transiciones al f de a, tambien this.inicio = a.getInicio(); this.final = b.getFinal(); }
public AFN primer(string a) { AFN result = new Proyecto_1.AFN(); Class_nodos i = new Class_nodos(); i.aumentarcount(); i.setTipoNodo("afn"); // le da numeracion al nodo Class_nodos f = new Class_nodos(); f.aumentarcount(); i.setTipoNodo("afn"); // le da numeracion al nodo i.addTransicion(new Class_transiciones(a, f.getContadorNodo().ToString())); // agrego una transicion hacia el nodo final de este afn i.setNext1(f); result.setInicio(i); result.setFinal(f); return(result); }
public void alter_afaf(AFN a, AFN b) { Class_nodos i = new Class_nodos(); i.aumentarcount(); i.setTipoNodo("alter"); // le da numeracion al nodo Class_nodos f = new Class_nodos(); f.aumentarcount(); f.setTipoNodo("alter"); // le da numeracion al nodo i.addTransicion(new Class_transiciones("£", a.getInicio().getContadorNodo().ToString())); //punteros de i i.addTransicion(new Class_transiciones("£", b.getInicio().getContadorNodo().ToString())); //punteros de i i.setNext1(a.getInicio()); a.getFinal().setNext1(f); a.getFinal().addTransicion(new Class_transiciones("£", f.getContadorNodo().ToString())); //punteros de a.final i.setNext2(b.getInicio()); b.getFinal().addTransicion(new Class_transiciones("£", f.getContadorNodo().ToString())); //punteros de a.final //b.getFinal().setNext1(f); //tal vez de error al recorrer this.inicio = i; this.final = f; }
public Class_nodos() { this.dato = ""; this.Id = ""; this.dato = ""; this.Tipo = ""; this.estado = 0; this.columna = 0; this.fila = 0; this.tipoNodo = ""; this.next1 = null; this.next2 = null; }
public void kleene_Cadena(string aa) { AFN a = new Proyecto_1.AFN(); a.primerAfn(aa); Class_nodos i = new Class_nodos(); i.aumentarcount(); i.setTipoNodo("ceroVarios"); // le da numeracion al nodo Class_nodos f = new Class_nodos(); f.aumentarcount(); f.setTipoNodo("ceroVarios"); // le da numeracion al nodo i.addTransicion(new Class_transiciones("£", a.getInicio().getContadorNodo().ToString())); //punteros de i i.addTransicion(new Class_transiciones("£", f.getContadorNodo().ToString())); //punteros de i i.setNext1(a.getInicio()); a.getFinal().setNext1(f); a.getFinal().addTransicion(new Class_transiciones("£", f.getContadorNodo().ToString())); //punteros de a.final a.getFinal().addTransicion(new Class_transiciones("£", a.getInicio().getContadorNodo().ToString())); // hago una trans del a.final al a.inicio this.inicio = i; this.final = f; }
public void concatenar_afCadena(AFN a, string b) { AFN bb = new Proyecto_1.AFN(); bb.primerAfn(b); a.getFinal().setNext1(bb.getInicio().getNext1()); /// agarro el f de a y le pongo el next del inicio de b if (bb.getInicio().getNext2() != null) //si no esta vacio agrego un next2 al f de a, { a.getFinal().setNext2(bb.getInicio().getNext2()); } a.getFinal().setListTransiciones(bb.getInicio().getListTransiciones()); // le paso las transiciones al f de a, tambien this.inicio = a.getInicio(); this.final = bb.getFinal(); }
public List <Class_alfabeto> tablaEpsido() { List <Class_alfabeto> lista = new List <Class_alfabeto>(); Class_nodos aux = this.inicio; Class_nodos auxnext2 = new Class_nodos(); while (aux != null) { Class_alfabeto n = new Class_alfabeto(); n.setAlfabeto(this.alfabeto); n.setnumeroNodo(aux.getContadorNodo().ToString()); for (int j = 0; j < aux.getListTransiciones().Count(); j++) { n.setnumeroNodo(aux.getContadorNodo().ToString()); // agrego el numero del nodo en el cual recorro n.addIntervalo(aux.getListTransiciones()[j]); //añado la transicion en la cual estoy recorriendo n.setEstado_aceptacion(aux.getEstado_aceptacion()); //////////////////////////////////////////// se añadio para pasar estado de aceptacion } lista.Add(n); if (aux.getNext2() != null) { auxnext2 = aux.getNext2(); Class_alfabeto n2 = new Class_alfabeto(); n2.setAlfabeto(this.alfabeto); n2.setnumeroNodo(auxnext2.getContadorNodo().ToString()); while (auxnext2 != null) { for (int j = 0; j < auxnext2.getListTransiciones().Count(); j++) { n2.setnumeroNodo(auxnext2.getContadorNodo().ToString()); // agrego el numero del nodo en el cual recorro n2.addIntervalo(auxnext2.getListTransiciones()[j]); //añado la transicion en la cual estoy recorriendo } lista.Add(n2); n2 = new Class_alfabeto(); auxnext2 = auxnext2.getNext1(); } } n = new Class_alfabeto(); aux = aux.getNext1(); } return(lista); }
public string generarTxt() { string linea1 = "digraph finite_state_machine { \n"; string linea2 = "rankdir = LR; size = \"20\" \n"; string linea3 = "node[shape = doublecircle margin = 0 fontcolor = white fontsize = 15 width = 0.5 style = filled, fillcolor = black]; N" + this.final.getContadorNodo() + "\n"; string linea4 = "node[margin = 0 fontcolor = white fontsize = 15 width = 0.5 shape = circle]; \n"; string lineafinal = "} \n"; string nodos = ""; string direcciones = ""; Class_nodos aux = this.inicio; Class_nodos auxnext2 = new Class_nodos(); Class_nodos auxnext3 = new Class_nodos(); Class_nodos auxnext4 = new Class_nodos(); Class_nodos auxnext5 = new Class_nodos(); while (aux != null) { nodos = nodos + "N" + aux.getContadorNodo() + "; \n"; for (int j = 0; j < aux.getListTransiciones().Count(); j++) { direcciones = direcciones + "N" + aux.getContadorNodo() + "-> N" + aux.getListTransiciones()[j].getDireccion() + "[label = \"" + aux.getListTransiciones()[j].getNombre() + "\"]; \n"; } if (aux.getNext2() != null) { auxnext2 = aux.getNext2(); while (auxnext2 != null) { nodos = nodos + "N" + auxnext2.getContadorNodo() + "; \n"; for (int j = 0; j < auxnext2.getListTransiciones().Count(); j++) { direcciones = direcciones + "N" + auxnext2.getContadorNodo() + "-> N" + auxnext2.getListTransiciones()[j].getDireccion() + "[label = \"" + auxnext2.getListTransiciones()[j].getNombre() + "\"]; \n"; } if (auxnext2.getNext2() != null) { auxnext3 = auxnext2.getNext2(); while (auxnext3 != null) { nodos = nodos + "N" + auxnext3.getContadorNodo() + "; \n"; for (int j = 0; j < auxnext3.getListTransiciones().Count(); j++) { direcciones = direcciones + "N" + auxnext3.getContadorNodo() + "-> N" + auxnext3.getListTransiciones()[j].getDireccion() + "[label = \"" + auxnext3.getListTransiciones()[j].getNombre() + "\"]; \n"; } if (auxnext3.getNext2() != null) { auxnext4 = auxnext3.getNext2(); while (auxnext4 != null) { nodos = nodos + "N" + auxnext4.getContadorNodo() + "; \n"; for (int j = 0; j < auxnext4.getListTransiciones().Count(); j++) { direcciones = direcciones + "N" + auxnext4.getContadorNodo() + "-> N" + auxnext4.getListTransiciones()[j].getDireccion() + "[label = \"" + auxnext4.getListTransiciones()[j].getNombre() + "\"]; \n"; } if (auxnext4.getNext2() != null) { auxnext5 = auxnext4.getNext2(); while (auxnext5 != null) { nodos = nodos + "N" + auxnext5.getContadorNodo() + "; \n"; for (int j = 0; j < auxnext5.getListTransiciones().Count(); j++) { direcciones = direcciones + "N" + auxnext5.getContadorNodo() + "-> N" + auxnext5.getListTransiciones()[j].getDireccion() + "[label = \"" + auxnext5.getListTransiciones()[j].getNombre() + "\"]; \n"; } auxnext5 = auxnext5.getNext1(); } } auxnext4 = auxnext4.getNext1(); } } auxnext3 = auxnext3.getNext1(); } } auxnext2 = auxnext2.getNext1(); } } aux = aux.getNext1(); } string total = linea1 + linea2 + linea3 + linea4 + nodos + direcciones + lineafinal; return(total); }
public void setFinal(Class_nodos b) { this.final = b; }
public void setInicio(Class_nodos a) { this.inicio = a; }
public void setNext2(Class_nodos next2) { this.next2 = next2; }
public List <Class_nodos> NodosExpresiones() { List <Class_nodos> result = new List <Class_nodos>(); //genero esta lista para separar los id de las expresiones string opera = getDato(); ///agarro el string de expresiones char[] cadena = opera.ToCharArray(); string concatenar = ""; for (int i = 0; i < opera.Length; i++) { if (cadena[i] == '.' || cadena[i] == '|' || cadena[i] == '?' || cadena[i] == '*' || cadena[i] == '+') { if (concatenar.Length > 1) { Class_nodos b = new Class_nodos(); b.setDato(concatenar); result.Add(b); concatenar = ""; } concatenar = "" + cadena[i]; Class_nodos a = new Class_nodos(); a.setDato(concatenar); if (cadena[i] == '|') { a.setId("Binario"); a.setTipoNodo("alter"); } else if (cadena[i] == '.') { a.setId("Binario"); a.setTipoNodo("concatenar"); } else if (cadena[i] == '?') { a.setId("Unario"); a.setTipoNodo("ceroUno"); } else if (cadena[i] == '*') { a.setId("Unario"); a.setTipoNodo("ceroVarios"); } else if (cadena[i] == '+') { a.setId("Unario"); a.setTipoNodo("unoVarios"); } result.Add(a); concatenar = ""; } if (cadena[i] == '"') { if (concatenar.Length > 1) { Class_nodos b = new Class_nodos(); b.setDato(concatenar); result.Add(b); concatenar = ""; } i++; for (int j = 0; j < opera.Length; j++) { if (cadena[i] == '"') { break; } concatenar = concatenar + cadena[i]; i++; } Class_nodos a = new Class_nodos(); a.setDato(concatenar); a.setId("op"); a.setTipoNodo("op"); concatenar = ""; result.Add(a); } if (cadena[i] == '{') { if (concatenar.Length > 1) { Class_nodos b = new Class_nodos(); b.setDato(concatenar); result.Add(b); concatenar = ""; } i++; for (int j = 0; j < opera.Length; j++) { if (cadena[i] == '}') { break; } concatenar = concatenar + cadena[i]; i++; } Class_nodos a = new Class_nodos(); a.setDato(concatenar); a.setId("op"); a.setTipoNodo("op"); concatenar = ""; result.Add(a); } if (cadena[i] != '.' || cadena[i] != '|' || cadena[i] != '?' || cadena[i] != '*' || cadena[i] != '+') { concatenar = concatenar + cadena[i]; } if (cadena[i] == '.' || cadena[i] == '|' || cadena[i] == '?' || cadena[i] == '*' || cadena[i] == '+' || cadena[i] == '}' || cadena[i] == '"') { concatenar = ""; } } return(result); }
public AFN() { inicio = null; final = null; }
public void setNext1(Class_nodos next1) { this.next1 = next1; }