コード例 #1
0
 public override void Ejecutar()
 {
     tablaDeSimbolos.AbrirBloque();
     foreach (Comando comando in comandos)
     {
         comando.Ejecutar();
     }
     tablaDeSimbolos.CerrarBloque();
 }
コード例 #2
0
        public override void Ejecutar()
        {
            Lista valoresDeLaExpresion = (Lista)expresion.ejecutar();

            tablaDeSimbolos.AbrirBloque();
            salida.AbrirFor();
            for (int i = 0; i < valoresDeLaExpresion.Count(); i++)
            {
                tablaDeSimbolos.GuardarVariable(variable, Nulo.NULO);
                salida.InicioMoveNextDelFor();
                tablaDeSimbolos.GuardarVariable(variable, valoresDeLaExpresion.getObjeto(i));
                cuerpo.Ejecutar();
                salida.FinMoveNextDelFor();
            }
            salida.CerrarFor(variable);
            tablaDeSimbolos.CerrarBloque();
        }
コード例 #3
0
 public override Objeto ejecutar()
 {
     if (tablaDeSimbolos.ExisteLaDeclaracion(clase_Renamed))
     {
         DeclaracionProcedure procedimiento = tablaDeSimbolos.Procedure(clase_Renamed);
         Objeto[]             resultados    = new Objeto[argumentos.Length];
         bool cantidadDeArguemtosEsLaMisma  = argumentos.Length == procedimiento.cantidadDeParametros();
         if (!cantidadDeArguemtosEsLaMisma)
         {
             throw new LanguageException(string.Format("La cantidad de argumentos No coincide con la cantidad de parametros del procedimiento"));
         }
         int i = 0;
         foreach (Expresion argumento in argumentos)
         {
             Type tipoDelArgumento = argumento.calcularTipo();
             Type tipoDelParametro = procedimiento.calcularTipoDelParametro(i);
             if (tipoDelParametro != tipoDelArgumento)
             {
                 throw new LanguageException(string.Format("Se esperaba un argumento de tipo '" + tipoDelParametro.Name + "' pero se encontro '" + tipoDelArgumento.Name + "'"));
             }
             i++;
         }
         i = 0;
         tablaDeSimbolos.AbrirBloque();
         foreach (Expresion argumento in argumentos)
         {
             resultados[i] = argumento.ejecutar();
             tablaDeSimbolos.GuardarVariable(procedimiento.nombreDelParametro(i), resultados[i]);
             i++;
         }
         procedimiento.ejecutar();
         tablaDeSimbolos.CerrarBloque();
     }
     else
     {
         if (instancia == null)
         {
             instancia = InstanciarElObjeto();
         }
         return(instancia);
     }
     return(instancia);
 }