Example #1
0
 public void ejemplo_2(string texto)
 {
     Console.WriteLine("La entrada del ejemplo 2 se escribe en el label de la pagina principal");
     if (texto != null)
     {
         Lexico          querer   = new Lexico(texto);
         List <analisis> elemento = querer.leerCadena();
         foreach (analisis p in elemento)
         {
             Console.WriteLine(p.palabra + " , " + p.tipo);
         }
     }
 }
 public void ejemplo_2(string texto)
 {
     Console.WriteLine("La entrada del ejemplo 2 se escribe en el label de la pagina principal");
     if (texto != null)
     {
         Lexico        querer   = new Lexico(texto);
         List <string> elemento = querer.leerCadena();
         for (int i = 0; i < elemento.Count(); i++)
         {
             string[] palabra = elemento[i].Split('#');
             Console.WriteLine(palabra[0] + " , " + palabra[2]);
         }
     }
 }
Example #3
0
        private void analizar_cadena()
        {
            Lexico        querer   = new Lexico(textBox1.Text);
            List <string> elemento = querer.leerCadena();

            for (int i = 0; i < elemento.Count(); i++)
            {
                string[] palabra = elemento[i].Split('#');
                dataGridView1.Rows.Add(palabra[0], palabra[1], palabra[2]);
            }

            /*
             * foreach (string palabra in texto)
             * {
             *  int numero = 0;
             *  float numero2 = 0;
             *  bool result=false;
             *  bool result2=false;
             *  try
             *  {
             *      result= int.TryParse(palabra, out numero);
             *      result2 = float.TryParse(palabra, out numero2);
             *  } catch { };
             *
             *  if (palabras_reservadas.Contains(palabra))
             *      coincidencias.Add(palabra + ":\t es palabra reservada.");
             *  else if (simbolos.Contains(palabra))
             *      coincidencias.Add(palabra + ":\t es un simbolo.");
             *  else if (operadores.Contains(palabra))
             *      coincidencias.Add(palabra + ":\t es un operador.");
             *  else if (result)
             *      coincidencias.Add(palabra + ":\t es un numero.");
             *  else if (result2)
             *      coincidencias.Add(palabra + ":\t es un real");
             *  else if(palabra!= "")
             *      coincidencias.Add(palabra + ":\t es un identificador.");
             * }*/
        }
Example #4
0
        private void analizar_cadena()
        {
            Lexico          querer   = new Lexico(textBox1.Text);
            List <analisis> elemento = querer.leerCadena();

            foreach (analisis p in elemento)
            {
                dataGridView1.Rows.Add(p.palabra, p.id, p.tipo);
            }

            /*
             * foreach (string palabra in texto)
             * {
             *  int numero = 0;
             *  float numero2 = 0;
             *  bool result=false;
             *  bool result2=false;
             *  try
             *  {
             *      result= int.TryParse(palabra, out numero);
             *      result2 = float.TryParse(palabra, out numero2);
             *  } catch { };
             *
             *  if (palabras_reservadas.Contains(palabra))
             *      coincidencias.Add(palabra + ":\t es palabra reservada.");
             *  else if (simbolos.Contains(palabra))
             *      coincidencias.Add(palabra + ":\t es un simbolo.");
             *  else if (operadores.Contains(palabra))
             *      coincidencias.Add(palabra + ":\t es un operador.");
             *  else if (result)
             *      coincidencias.Add(palabra + ":\t es un numero.");
             *  else if (result2)
             *      coincidencias.Add(palabra + ":\t es un real");
             *  else if(palabra!= "")
             *      coincidencias.Add(palabra + ":\t es un identificador.");
             * }*/
        }
        public void ejemplo_3()
        {
            int [,] tabla = new int[3, 3] {
                { 2, 0, 1 }, { 0, -1, 0 }, { 0, -2, 0 }
            };
            Stack <string> pila = new Stack <string>();
            int            fila = 0, columna = 0, accion = 0;
            bool           aceptación = false;
            Lexico         lexico     = new Lexico("a$");

            pila.Push("1");
            pila.Push("0");

            List <string> elemento = lexico.leerCadena();

            string[] palabra = elemento[0].Split('#');
            try
            {
                fila    = Convert.ToInt32(pila.Peek());
                columna = Convert.ToInt32(palabra[1]);
            }
            catch { };

            accion = tabla[fila, columna];

            mostrar2(pila);
            Console.WriteLine("entrada: " + palabra[0]);
            Console.WriteLine("accion: " + accion);
            pila.Push(palabra[1]);
            pila.Push(Convert.ToString(accion));
            if (accion == 2)
            {
                palabra = elemento[1].Split('#');
                try
                {
                    fila    = Convert.ToInt32(pila.Peek());
                    columna = Convert.ToInt32(palabra[1]);
                }
                catch { };

                accion = tabla[fila, columna];
                mostrar2(pila);
                Console.WriteLine("entrada: " + palabra[0]);
                Console.WriteLine("accion: " + accion);
            }
            if (accion == -2)
            {
                pila.Pop();
                pila.Pop();
                try
                {
                    fila    = Convert.ToInt32(pila.Peek());
                    columna = 2;
                }
                catch { };
                accion = tabla[fila, columna];
                //transicion
                pila.Push(Convert.ToString(2));
                pila.Push(Convert.ToString(accion));
                mostrar2(pila);

                Console.WriteLine("entrada: " + palabra[0]);
                Console.WriteLine("accion: " + accion);

                try
                {
                    fila    = Convert.ToInt32(pila.Peek());
                    columna = Convert.ToInt32(palabra[1]);
                }
                catch { };
                accion = tabla[fila, columna];
                if (accion == -1)
                {
                    mostrar2(pila);

                    Console.WriteLine("entrada: " + palabra[0]);
                    Console.WriteLine("accion: " + accion);
                    aceptación = accion == -1;
                    if (aceptación)
                    {
                        Console.WriteLine("aceptacion");
                    }
                }
            }
        }
        public void ejercicio_2(string cadena)
        {
            int[,] tabla = new int[5, 4] {
                { 2, 0, 0, 1 }, { 0, 0, -1, 0 }, { 0, 3, -3, 0 }, { 2, 0, 0, 4 }, { 0, 0, -2, 0 }
            };
            int[] idRegla = new int[2] {
                2, 2
            };
            int[] lonRegla = new int[2] {
                3, 0
            };
            Stack <string> pila = new Stack <string>();
            int            pos = 0;//indica la posicion actual del analizador lexico
            int            fila = 0, columna = 0, accion = 0;
            bool           aceptación = false;
            Lexico         lexico     = new Lexico(cadena + "$");

            pila.Push("2");
            pila.Push("0");
            List <string> elemento = lexico.leerCadena();

            string[] palabra = elemento[0].Split('#');
            fila    = Convert.ToInt32(pila.Peek());
            columna = Convert.ToInt32(palabra[1]);
            accion  = tabla[fila, columna];

            mostrar2(pila);
            accionEntrada(accion, palabra[0]);
            while (!aceptación || accion == 0)
            {
                if (accion > 0)
                {
                    if (palabra[1] == "0")
                    {
                        lonRegla[0] = +1;
                    }
                    if (palabra[1] == "1")
                    {
                        lonRegla[1] += 1;
                    }
                    pila.Push(palabra[1]);
                    pila.Push(Convert.ToString(accion));
                    if (pos + 1 < elemento.Count())
                    {
                        pos++;
                    }
                    palabra = elemento[pos].Split('#');
                    fila    = Convert.ToInt32(pila.Peek());
                    columna = Convert.ToInt32(palabra[1]);
                    accion  = tabla[fila, columna];
                    mostrar2(pila);
                    accionEntrada(accion, palabra[0]);
                }
                if (accion == 0)
                {
                    Console.WriteLine("error");
                    break;
                }
                if (accion < 0)
                {
                    if (accion == -3)
                    {
                        pila.Pop();
                        pila.Pop();
                        fila    = Convert.ToInt32(pila.Peek());
                        columna = 3;
                        accion  = tabla[fila, columna];
                        pila.Push("4");
                        pila.Push(Convert.ToString(accion));
                        mostrar2(pila);
                        accionEntrada(accion, palabra[0]);
                    }
                    if (accion == -2)
                    {
                        pila.Pop();
                        pila.Pop();
                        pila.Pop();
                        pila.Pop();
                        pila.Pop();
                        pila.Pop();
                        pila.Pop();
                        pila.Pop();
                        fila    = Convert.ToInt32(pila.Peek());
                        columna = 3;
                        accion  = tabla[fila, columna];
                        pila.Push("4");
                        pila.Push(Convert.ToString(accion));
                        mostrar2(pila);
                        accionEntrada(accion, palabra[0]);
                    }
                    if (accion == -1)
                    {
                        fila    = Convert.ToInt32(pila.Peek());
                        columna = Convert.ToInt32(palabra[1]);
                        accion  = tabla[fila, columna];
                        mostrar2(pila);
                        accionEntrada(accion, palabra[0]);
                        aceptación = accion == -1;
                        if (aceptación)
                        {
                            Console.WriteLine("aceptacion");
                        }
                    }
                }
            }
        }
Example #7
0
        public void ejercicio_2(string cadena)
        {
            int[,] tabla = new int[5, 4] {
                { 2, 0, 0, 1 }, { 0, 0, -1, 0 }, { 0, 3, -3, 0 }, { 2, 0, 0, 4 }, { 0, 0, -2, 0 }
            };
            int[] idRegla = new int[2] {
                2, 2
            };
            int[] lonRegla = new int[2] {
                3, 0
            };
            Stack <ElementoPila> pila = new Stack <ElementoPila>();
            int             fila = 0, columna = 0, accion = 0;
            bool            aceptación = false;
            Lexico          lexico     = new Lexico(cadena + "$");
            ElementoPila    aux;
            List <analisis> elemento = lexico.leerCadena();

            pila.Push(new Terminal(2, "$", accion));
            aux  = pila.Peek();
            fila = aux.accion;
            int i = 0;

            columna = elemento[i].id;
            accion  = tabla[fila, columna];
            mostrar2(pila);
            accionEntrada(accion, elemento[i].palabra);
            while (!aceptación || accion == 0)
            {
                if (accion > 0)
                {
                    if (elemento[i].id == 0)
                    {
                        lonRegla[0] = +1;
                    }
                    if (elemento[i].id == 1)
                    {
                        lonRegla[1] += 1;
                    }
                    pila.Push(new NoTerminal(elemento[i].id, elemento[i].palabra, accion));
                    if (i + 1 < elemento.Count())
                    {
                        i++;
                    }
                    aux     = pila.Peek();
                    fila    = aux.accion;
                    columna = elemento[i].id;
                    accion  = tabla[fila, columna];
                    mostrar2(pila);
                    accionEntrada(accion, elemento[i].palabra);
                }
                if (accion == 0)
                {
                    Console.WriteLine("error");
                    break;
                }
                if (accion < 0)
                {
                    if (accion == -3)
                    {
                        pila.Pop();
                        aux     = pila.Peek();
                        fila    = aux.accion;
                        columna = 3;
                        accion  = tabla[fila, columna];
                        pila.Push(new Estado(4, "E2", accion));
                        mostrar2(pila);
                        accionEntrada(accion, elemento[i].palabra);
                    }
                    if (accion == -2)
                    {
                        pila.Pop();
                        pila.Pop();
                        pila.Pop();
                        pila.Pop();
                        aux     = pila.Peek();
                        fila    = aux.accion;
                        columna = 3;
                        accion  = tabla[fila, columna];
                        pila.Push(new Estado(4, "E1", accion));
                        mostrar2(pila);
                        accionEntrada(accion, elemento[i].palabra);
                    }
                    if (accion == -1)
                    {
                        aux     = pila.Peek();
                        fila    = aux.accion;
                        columna = elemento[i].id;
                        accion  = tabla[fila, columna];
                        mostrar2(pila);
                        accionEntrada(accion, elemento[i].palabra);
                        aceptación = accion == -1;
                        if (aceptación)
                        {
                            Console.WriteLine("aceptacion");
                        }
                    }
                }
            }
        }
Example #8
0
        public void ejemplo_3()
        {
            int [,] tabla = new int[3, 3] {
                { 2, 0, 1 }, { 0, -1, 0 }, { 0, -2, 0 }
            };
            Stack <ElementoPila> pila = new Stack <ElementoPila>();
            int      fila = 0, columna = 0, accion = 0;
            bool     aceptación = false;
            Lexico   lexico     = new Lexico("a$");
            analisis entrada    = new analisis();

            entrada.modificar(0, "$", "$");
            ElementoPila t = new Terminal(entrada.id, entrada.palabra, 0);
            ElementoPila aux;

            pila.Push(t);

            List <analisis> elemento = lexico.leerCadena();

            aux     = pila.Peek();
            fila    = aux.accion;
            columna = elemento[0].id;
            accion  = tabla[fila, columna];
            ElementoPila nt = new NoTerminal(entrada.id, entrada.palabra, accion);

            mostrar2(pila);
            Console.WriteLine("entrada: " + elemento[1].palabra);
            Console.WriteLine("accion: " + nt.accion);
            pila.Push(nt);
            if (accion == 2)
            {
                aux     = pila.Peek();
                fila    = aux.accion;
                columna = elemento[1].id;
                accion  = tabla[fila, columna];
                pila.Push(new NoTerminal(elemento[1].id, elemento[1].palabra, accion));
                mostrar2(pila);
                Console.WriteLine("entrada: " + elemento[1].palabra);
                Console.WriteLine("accion: " + accion);
            }
            if (accion == -2)
            {
                pila.Pop();
                aux     = pila.Peek();
                fila    = aux.accion;
                columna = 2;
                accion  = tabla[fila, columna];
                //transicion
                pila.Push(new Estado(2, "E1", accion));
                mostrar2(pila);
                Console.WriteLine("entrada: " + elemento[1].palabra);
                Console.WriteLine("accion: " + accion);
                aux     = pila.Peek();
                fila    = aux.accion;
                columna = elemento[1].id;
                accion  = tabla[fila, columna];
                if (accion == -1)
                {
                    mostrar2(pila);
                    Console.WriteLine("entrada: " + elemento[1].palabra);
                    Console.WriteLine("accion: " + accion);
                    aceptación = accion == -1;
                    if (aceptación)
                    {
                        Console.WriteLine("aceptacion");
                    }
                }
            }
        }