Exemplo n.º 1
0
        public void ejecutar(TextBox salida)
        {
            Entorno global = new Entorno();

            for (int i = 0; i < Instrucciones.Count(); i++)
            {
                Instruccion instruccion = Instrucciones.ElementAt(i);

                if (instruccion is Etiqueta)
                {
                    Etiqueta label = (Etiqueta)instruccion;
                    label.I = i;
                    label.Ejecutar(global);
                }
                else if (instruccion is Metodo)
                {
                    Metodo metodo = (Metodo)instruccion;
                    LinkedList <Instruccion> bloques = metodo.Ejecutar(global) as LinkedList <Instruccion>;
                    /*comprobar null*/
                    for (int j = 0; j < bloques.Count(); j++)
                    {
                        Instruccion bloque = bloques.ElementAt(j);
                        if (bloque is Etiqueta)
                        {
                            Etiqueta labelJ = (Etiqueta)bloque;
                            labelJ.I = j;
                            labelJ.Ejecutar(global);
                        }
                    }
                }
            }



            for (int i = 0; i < Instrucciones.Count(); i++)
            {
                Instruccion instruccion = Instrucciones.ElementAt(i);

                if (!(instruccion is Etiqueta) && !(instruccion is Metodo))
                {
                    if (!(instruccion is Salto) && !(instruccion is SaltoCond))
                    {
                        if (instruccion is Print)
                        {
                            ((Print)instruccion).Output = salida;
                        }
                        else if (instruccion is Call)
                        {
                            ((Call)instruccion).Output = salida;
                        }
                        instruccion.Ejecutar(global);
                    }
                    else
                    {
                        Object o = instruccion.Ejecutar(global);
                        if (o != null)
                        {
                            i = Convert.ToInt32(o.ToString());
                        }
                    }
                }
            }
            Console.WriteLine("\n");
            //global.Recorrer();
            //Console.WriteLine("\n");
        }