public void GraficarAFD()
        {
            String nombre  = name + "_AFD";
            String grafica = "digraph " + nombre + " {\n overlap=false;\nrankdir=\u0022LR\u0022;\n";

            for (int i = 0; i < transiciones.Count; i++)
            {
                if (transiciones.ElementAt(i).Aceptacion == true)
                {
                    grafica += "node" + transiciones.ElementAt(i).EstadoInicial + " [shape = doublecircle, height=.1  label=\u0022" + transiciones.ElementAt(i).EstadoInicial + "\u0022]; \n";
                }
                else
                {
                    grafica += "node" + transiciones.ElementAt(i).EstadoInicial + " [shape = circle, height=.1 label=\u0022" + transiciones.ElementAt(i).EstadoInicial + "\u0022]; \n";
                }
            }
            for (int i = 0; i < transiciones.Count; i++)
            {
                int id = transiciones.ElementAt(i).EstadoInicial;
                if (transiciones.ElementAt(i).Transiciones != null)
                {
                    for (int l = 0; l < transiciones.ElementAt(i).Transiciones.Count; l++)
                    {
                        grafica += "node" + id + " -> node" +
                                   transiciones.ElementAt(i).Transiciones.ElementAt(l).Estado +
                                   " [label=\u0022" + transiciones.ElementAt(i).Transiciones.ElementAt(l).Simbolo.Replace('"', ' ').Trim()
                                   + "\u0022]; \n";
                    }
                }
            }
            grafica += "}";
            Graficador gr = new Graficador();

            gr.graficar(grafica, nombre);
        }
        public void separarNodos(List <Expresion> listaExpresiones, ListaCircularGaleria lg)
        {
            for (int h = 0; h < listaExpresiones.Count; h++)
            {
                String expresion     = listaExpresiones.ElementAt(h).ExpresionRegular;
                String nombreGrafica = listaExpresiones.ElementAt(h).Identificador;
                int    estado        = 0;
                string lexema        = "";
                Char   c;
                grafica  += "digraph " + nombreGrafica + " { \n";
                grafica  += "rankdir = \u0022LR\u0022; \n";
                grafica  += "node [shape = circle, height=.1]; \n";
                expresion = expresion + " ";
                for (int i = 0; i < expresion.Length; i++)
                {
                    c = expresion[i];
                    switch (estado)
                    {
                    case 0:
                        if (c == '|')
                        {
                            nodos.Add(c);
                        }
                        else if (c == '.')
                        {
                            nodos.Add(c);
                        }
                        else if (c == '+')
                        {
                            nodos.Add(c);
                        }
                        else if (c == '*')
                        {
                            nodos.Add(c);
                        }
                        else if (c == '?')
                        {
                            nodos.Add(c);
                        }
                        else if (c == '{')
                        {
                            estado = 1;
                        }
                        else if (c == '\u0022')
                        {
                            lexema += c;
                            estado  = 2;
                        }
                        break;

                    case 1:
                        if (c == '}')
                        {
                            nodos.Add(lexema);
                            lexema = "";
                            estado = 0;
                        }
                        else
                        {
                            lexema += c;
                        }
                        break;

                    case 2:
                        if (c == '\u0022')
                        {
                            lexema += c;
                            nodos.Add(lexema);
                            lexema = "";
                            estado = 0;
                        }
                        else
                        {
                            lexema += c;
                        }
                        break;
                    }
                }
                j = 0;
                Object        nodo  = nodos.ElementAt(j);
                NodoExpresion nuevo = new NodoExpresion();
                nuevo.Id = j;
                listaNodos.Add(nuevo);
                generarAFN(nodo, 0, nuevo);
                raiz     = nuevo;
                grafica += "}";
                Graficador gr = new Graficador();
                gr.graficar(grafica, nombreGrafica);
                MetodoSubconjuntos ms      = new MetodoSubconjuntos();
                List <int>         numeros = new List <int>();
                numeros.Add(0);
                Galeria nuevoGaleria = new Galeria();
                nuevoGaleria.Nombre   = nombreGrafica;
                nuevoGaleria.Simbolos = simbolos;
                ms.generarTabla(listaNodos, numeros, simbolos, nombreGrafica, ultimo, lg, nuevoGaleria);
                ms.GraficarAFD();
                nodos      = new List <object>();
                listaNodos = new List <NodoExpresion>();
                simbolos   = new List <object>();
                j          = 0;
                k          = 0;
                grafica    = "";
            }
        }