private void button6_Click(object sender, EventArgs e) { if (numeroExpresion >= 0) { if (ExpresionRegular[numeroExpresion, 1] != null) { AFND automata = new AFND(ExpresionRegular[numeroExpresion, 1]); automata.convertidorPolacaSimplificada(); //GRaficar el AFD GraficarAFD gaficar = new GraficarAFD(AFD.getTablaAFD(), Transformador.getTablaAceptaciones()); gaficar.Graficar(); gaficar.abrirgrafo(); MostrarImagen(); mostrarEnTabla(AFD.getTablaAFD()); VerificadorDeLexemas vl = new VerificadorDeLexemas(); richTextBox1.Text = vl.validarLexema(Analisador_Lexico.getLexemas(), AFD.getTablaAFD(), Analisador_Lexico.getConjuntos(), Transformador.getTablaAceptaciones(), ExpresionRegular[numeroExpresion, 0]); AFD.setTablaAFD_Resetear(); AFND.setTablaDeS_Resetear(); Transformador.setTablaAceptacionBorrar(); } } numeroExpresion++; }
public void CreacionDeTablas() { var filas = TablaAFND.GetLength(0); String nodoPrimero = ""; String nodoTransicion = ""; String nodoApuntador = ""; for (int i = 0; i < filas; i++) //Ciclo para encontrar el primero { if (TablaAFND[i, 3] == "$1") { nodoPrimero = TablaAFND[i, 0]; nodoTransicion = TablaAFND[i, 1]; nodoApuntador = TablaAFND[i, 2]; Cerraduras(nodoPrimero, nodoTransicion, nodoApuntador); //llamar metodo cerradura por primera vez break; } } bool final = false; bool primero = false; int c = 0; conjuntoApuntadores += nodoPrimero; string[] matrizApuntadores = conjuntoApuntadores.Split(','); //trasladar la variable conjunto de apuntadores a una matriz de apuntadores conjuntoApuntadores = ordenamientoInsercion(matrizApuntadores); //ordenar los apuntadores y guardarlos en la variable conJUNTO DE APUNTADORES YA ORDENADOS //conjuntoApuntadores += "null"; //asignamos un null TablaCerraduras[f, 0] = nodoPrimero; TablaCerraduras[f, 1] = Convert.ToChar(numeroDeNodo).ToString(); //asignamos el primer nodo A, y asi sucesivamente TablaCerraduras[f, 2] = conjuntoApuntadores; //como no transiciones con £ solo le colocamos 0 if (estadoAceptacion) //si el en nodo es de aceptacion lo guado en mi arreglo { TablaNodosAceptacion[m] = Convert.ToChar(numeroDeNodo).ToString(); estadoAceptacion = false; m++; } numeroDeNodo++; //aumentamos esta variable para el sigiente nodo conjuntoApuntadores = ""; //vaciamos la variable Movimiento(TablaCerraduras[f, 1], TablaCerraduras[f, 2]); //LLAMAMOS AL METODO MOVIMIENTO PARA VEROFICAR LOS MOVIMIENTOS f++; //pasa ala siguente fila for (int t = 0; t < TablaMovimientos.GetLength(0); t++) { if (TablaMovimientos[t, 2] != null) { for (int i = 0; i < TablaCerraduras.GetLength(0); i++) { if (TablaMovimientos[t, 2] != null) { if (TablaCerraduras[i, 0] == TablaMovimientos[t, 2]) { Console.WriteLine(TablaMovimientos[t, 2]); primero = true; break; } } else { primero = true; } } } else { primero = true; } if (!primero) { for (int i = 0; i < filas; i++) //Ciclo para encontrar el primero { // for (int j = r; j < TablaMovimientos.GetLength(0) - 1; j++) // { if (TablaAFND[i, 0] == TablaMovimientos[t, 2]) //verificar si [A] = tablamovimetnot [A] { nodoPrimero = TablaAFND[i, 0]; nodoTransicion = TablaAFND[i, 1]; nodoApuntador = TablaAFND[i, 2]; r++; //aumentamos para la siguente posicion Cerraduras(nodoPrimero, nodoTransicion, nodoApuntador); //llamar metodo cerradura conjuntoApuntadores += nodoPrimero; matrizApuntadores = conjuntoApuntadores.Split(','); //trasladar la variable conjunto de apuntadores a una matriz de apuntadores conjuntoApuntadores = ordenamientoInsercion(matrizApuntadores); //ordenar los apuntadores y guardarlos en la variable conJUNTO DE APUNTADORES YA ORDENADOS //conjuntoApuntadores += "null"; //asignamos un null /*bool tablayConjunto = false; * for (int l = 0; l < TablaCerraduras.GetLength(0); l++) * { * if (TablaCerraduras[l, 0] == conjuntoApuntadores) tablayConjunto = true; * } * if (!tablayConjunto) * {*/ TablaCerraduras[f, 0] = nodoPrimero; TablaCerraduras[f, 1] = Convert.ToChar(numeroDeNodo).ToString(); //asignamos el primer nodo A, y asi sucesivamente TablaCerraduras[f, 2] = conjuntoApuntadores; //como no transiciones con £ solo le colocamos 0 if (estadoAceptacion) //si el en nodo es de aceptacion lo guado en mi arreglo { TablaNodosAceptacion[m] = Convert.ToChar(numeroDeNodo).ToString(); estadoAceptacion = false; m++; } numeroDeNodo++; //aumentamos esta variable para el sigiente nodo conjuntoApuntadores = ""; //vaciamos la variable Movimiento(TablaCerraduras[f, 1], TablaCerraduras[f, 2]); //LLAMAMOS AL METODO MOVIMIENTO PARA VEROFICAR LOS MOVIMIENTOS f++; //pasa ala siguente fila break; //} // tablayConjunto = false; } // } } } primero = false; } /* do * { * * for (int i = 0; i < TablaCerraduras.GetLength(0); i++) * { * if (TablaMovimientos[h, 2] != null) * { * if (TablaCerraduras[i, 0] == TablaMovimientos[h, 2]) * { * Console.WriteLine(TablaMovimientos[h, 2]); * primero = true; * h++; * break; * } * } * else * { * primero = true; * } * } * * if (!primero) * { * for (int i = 0; i < filas; i++) //Ciclo para encontrar el primero * { * for (int j=r;j<TablaMovimientos.GetLength(0)-1;j++) * { * if (TablaAFND[i, 0] == TablaMovimientos[j, 2]) //verificar si [A] = tablamovimetnot [A] * { * nodoPrimero = TablaAFND[i, 0]; * nodoTransicion = TablaAFND[i, 1]; * nodoApuntador = TablaAFND[i, 2]; * r++; //aumentamos para la siguente posicion * Cerraduras(nodoPrimero, nodoTransicion, nodoApuntador); //llamar metodo cerradura * * conjuntoApuntadores += nodoPrimero; * * matrizApuntadores = conjuntoApuntadores.Split(','); //trasladar la variable conjunto de apuntadores a una matriz de apuntadores * conjuntoApuntadores = ordenamientoInsercion(matrizApuntadores); //ordenar los apuntadores y guardarlos en la variable conJUNTO DE APUNTADORES YA ORDENADOS * //conjuntoApuntadores += "null"; //asignamos un null * bool tablayConjunto = false; * for (int l = 0; l < TablaCerraduras.GetLength(0); l++) * { * if (TablaCerraduras[l, 2] == conjuntoApuntadores) tablayConjunto=true; * } * if(!tablayConjunto) * { * TablaCerraduras[f, 0] = nodoPrimero; * TablaCerraduras[f, 1] = Convert.ToChar(numeroDeNodo).ToString(); //asignamos el primer nodo A, y asi sucesivamente * TablaCerraduras[f, 2] = conjuntoApuntadores; //como no transiciones con £ solo le colocamos 0 * * if (estadoAceptacion) //si el en nodo es de aceptacion lo guado en mi arreglo * { * TablaNodosAceptacion[m] = Convert.ToChar(numeroDeNodo).ToString(); estadoAceptacion = false; m++; * } * numeroDeNodo++; //aumentamos esta variable para el sigiente nodo * f++; //pasa ala siguente fila * conjuntoApuntadores = ""; //vaciamos la variable * * Movimiento(TablaCerraduras[f - 1, 1], TablaCerraduras[f - 1, 2]); //LLAMAMOS AL METODO MOVIMIENTO PARA VEROFICAR LOS MOVIMIENTOS * break; * } * tablayConjunto = false; * * } * } * * } * } * * * primero = false; * if (c>k&&c>f)final=true; * c++; * * } while (!final);*/ Console.WriteLine("-______________-____________________________-________________"); RecorrerArreglo <string>(TablaCerraduras); Console.WriteLine("-______________-____________________________-________________"); RecorrerArreglo <string>(TablaMovimientos); foreach (string s in TablaNodosAceptacion) { Console.WriteLine(s + ","); } AFD automata = new AFD(TablaCerraduras, TablaMovimientos); automata.CreacionTablaAFD(); //automata.Limpiador(); ///Limpiador(); //Limpiar todo }