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
        }