コード例 #1
0
 public object ejecutar(Ambito amb, AST arbol)
 {
     foreach (Simbolo variable in variables)
     {
         string nombreVar = variable.Id;
         if (esInicializada())
         {
             Tipos tipoVal = valInicial.getTipo(amb, arbol);
             Tipos tipoVar = variable.Tipo;
             if (amb.existeActual(nombreVar))
             {
                 Console.WriteLine("Se intento declarar " + nombreVar
                                   + "una variable ya existente en el entorno actual");
             }
             else
             {
                 if (tipoVal == tipoVar)
                 {
                     object val = valInicial.getValorImplicito(amb, arbol);
                     variable.Valor = val;
                     amb.agregar(nombreVar, variable);
                 }
                 else
                 {
                     Console.WriteLine("Error de tipos"
                                       + ", se intenta setear un valor a la variable "
                                       + nombreVar + " diferente al que fue declarado");
                 }
             }
         }
         else
         {
             if (amb.existeActual(nombreVar))
             {
                 Console.WriteLine("Se intento declarar "
                                   + "una variable ya existente en el entorno actual");
             }
             else
             {
                 amb.agregar(nombreVar, variable);
             }
         }
     }
     return(null);
 }
コード例 #2
0
 //Obtener un simbolo en base a una clave
 public Simbolo get(string id)
 {
     try {
         for (Ambito a = this; a != null; a = a.anterior)
         {
             Simbolo siEncontro = (Simbolo)(a.tabla[id]);
             if (siEncontro != null)
             {
                 return(siEncontro);
             }
         }
         return(null);
     }
     catch {
         Console.WriteLine("El simbolo: " + id + "no se declaro en el ambito actual ni externo (ambito.Ambito)");
         return(null);
     }
 }
コード例 #3
0
 //Constructor que crea un nuevo ambito en base al anterior
 public Ambito(Ambito anterior)
 {
     tabla         = new Hashtable();
     this.anterior = anterior;
 }