コード例 #1
0
        static void segundoEjercicio(string texto)
        {
            Pila pila = new Pila();

            pila.push(new NoTerminal(ElementoPila.SIMBOLO, "$0"));
            pila.mostrarPila();

            int    estado = INICIAL; //Identifica el estado actual del analizador
            int    d2 = 2, d3 = 3;
            String lexema = "";
            Char   c;

            //Inicia el automata del analizador
            for (int i = 0; i < texto.Length; i++)
            {
                c = texto[i];
                switch (estado)
                {
                case INICIAL:
                    if (Char.IsLetter(c) || c == '_')
                    {     //Verifica si es letra o empieza con un "_"
                        estado  = IDENTIFICADOR;
                        lexema += c;
                    }
                    else if (c == '+')
                    {
                        lexema += c;
                        pila.push(new Terminal(SIMBOLO, lexema + d3));
                        estado = INICIAL;
                        lexema = "";

                        pila.mostrarPila();
                    }
                    else if (c == '$')
                    {
                        pila.vaciarPila();

                        Pila nuevaPila = new Pila();
                        nuevaPila.push(new Estado(E, "$0E1"));
                        nuevaPila.mostrarPila();
                    }
                    else
                    {
                        Console.WriteLine("ERROR");
                        return;
                    }
                    break;

                case IDENTIFICADOR:
                    if (Char.IsLetterOrDigit(c) || c == '_')
                    {
                        estado  = IDENTIFICADOR;
                        lexema += c;
                    }
                    else
                    {
                        pila.push(new Terminal(IDENTIFICADOR, lexema + d2));
                        estado = INICIAL;
                        lexema = "";
                        i--;

                        pila.mostrarPila();
                    }
                    break;

                default:
                    break;
                }
            }
            //Termina el automata
        }