Exemplo n.º 1
0
 private void iniciarAnalisisLexicoToolStripMenuItem_Click(object sender, EventArgs e)
 {
     try {
         DataTable dt = new DataTable();
         TablaTransiciones.DataSource = dt;
         TablaTransiciones.Update();
         String  text = "";
         TabPage tp   = tabControl1.SelectedTab;
         foreach (Control o in tp.Controls)
         {
             if (o is RichTextBox)
             {
                 text = o.Text;
                 RichTextBox r      = (RichTextBox)o;
                 Analizador  lexico = new Analizador();
                 lg.vaciarLista();
                 lexico.analizadorLexico(text, lg);
                 inicio   = lg.InicioLista;
                 final    = lg.FinalLista;
                 temporal = lg.FinalLista;
                 iniciarGaleria();
                 Probar_Lexemas pl = new Probar_Lexemas();
                 Consola.Text = pl.prueba(inicio, lexico.getListaLexemas(), lexico.getListaConjunto());
                 errores      = pl.Errores;
             }
         }
         MessageBox.Show("Anlizado Correcamente");
     }
     catch (Exception ex)
     {
         MessageBox.Show("Error: " + ex);
     }
 }
Exemplo n.º 2
0
        public void iniciarGaleria()
        {
            Galeria aux  = temporal;
            String  ruta = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
            String  afn  = ruta + "\\" + aux.Nombre + ".png ";
            String  afd  = ruta + "\\" + aux.Nombre + "_AFD.png ";

            mostrarImagen(afd, afn, aux.Nombre);
            DataTable dt = new DataTable();

            dt.Columns.Add("Estados");
            for (int i = 0; i < aux.Simbolos.Count; i++)
            {
                dt.Columns.Add(aux.Simbolos.ElementAt(i).ToString());
            }

            for (int i = 0; i < aux.Estados.Count; i++)
            {
                DataRow dr     = dt.NewRow();
                String  estado = "" + aux.Estados.ElementAt(i).EstadoInicial;
                if (aux.Estados.ElementAt(i).Aceptacion)
                {
                    estado += "*";
                }
                dr["Estados"] = estado;
                for (int j = 0; j < aux.Estados.ElementAt(i).Transiciones.Count; j++)
                {
                    dr[aux.Estados.ElementAt(i).Transiciones.ElementAt(j).Simbolo] = aux.Estados.ElementAt(i).Transiciones.ElementAt(j).Estado;
                }
                dt.Rows.Add(dr);
            }
            TablaTransiciones.DataSource = dt;
            TablaTransiciones.Update();
        }
Exemplo n.º 3
0
 private void button2_Click(object sender, EventArgs e)
 {
     try
     {
         temporal = temporal.Siguiente;
         DataTable dt = new DataTable();
         TablaTransiciones.DataSource = dt;
         TablaTransiciones.Update();
         iniciarGaleria();
     }
     catch (Exception ex)
     {
     }
 }
        public void generarTabla(List <NodoExpresion> listaNodos, List <int> numeros, List <Object> simbolos, String nombre, NodoExpresion final, ListaCircularGaleria lg, Galeria nuevoGaleria)
        {
            listaNodo     = listaNodos;
            name          = nombre;
            listaSimbolos = simbolos;
            ultimo        = final;
            List <int> estadosCerradura = new List <int>();

            for (int i = 0; i < numeros.Count; i++)
            {
                NodoExpresion paraCerradura = buscarNodo(numeros.ElementAt(i));
                if (paraCerradura != null)
                {
                    cerradura(paraCerradura, estadosCerradura);
                }
            }
            mostrarCerradura(estadosCerradura);
            Estado nuevoEstado = new Estado();

            nuevoEstado.EstadoInicial = j;
            j++;
            nuevoEstado.Numeros = numeros;
            bool has = estadosCerradura.Any(x => x == ultimo.Id);

            if (has == true)
            {
                nuevoEstado.Aceptacion = true;
            }
            transiciones.Add(nuevoEstado);
            List <Transicion> trancisionesEstado = new List <Transicion>();

            for (int i = 0; i < listaSimbolos.Count; i++)
            {
                List <int> estadosMueve = new List <int>();
                for (int l = 0; l < estadosCerradura.Count; l++)
                {
                    NodoExpresion paraMove = buscarNodo(estadosCerradura.ElementAt(l));
                    if (paraMove != null)
                    {
                        move(paraMove, listaSimbolos.ElementAt(i), estadosMueve);
                    }
                }
                if (estadosMueve.Count > 0)
                {
                    bool sn = existeCerradura(estadosMueve);
                    if (sn)
                    {
                        int        id = devolverId(estadosMueve);
                        Transicion nuevaTransicion = new Transicion();
                        nuevaTransicion.Estado  = id;
                        nuevaTransicion.Simbolo = listaSimbolos.ElementAt(i).ToString();
                        trancisionesEstado.Add(nuevaTransicion);
                    }
                    else
                    {
                        Estado apuntar = new Estado();
                        apuntar.EstadoInicial = j;
                        j++;
                        apuntar.Numeros = estadosMueve;
                        transiciones.Add(apuntar);

                        Transicion nuevaTransicion = new Transicion();
                        nuevaTransicion.Estado  = apuntar.EstadoInicial;
                        nuevaTransicion.Simbolo = listaSimbolos.ElementAt(i).ToString();
                        trancisionesEstado.Add(nuevaTransicion);
                        siguientes(estadosMueve, apuntar);
                    }
                }
            }
            nuevoEstado.Transiciones = trancisionesEstado;
            nuevoGaleria.Estados     = transiciones;
            lg.insertar(nuevoGaleria);
        }
        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    = "";
            }
        }