예제 #1
0
 private void analitic()
 {
     string[] p;
     for (int i = 0; i < elemento.Count(); i++)
     {
         analisis anl = new analisis();
         p = elemento[i].Split('#');
         anl.modificar(Convert.ToInt32(p[1]), p[0], p[2]);
         analisis.Add(anl);
     }
 }
예제 #2
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");
                    }
                }
            }
        }