void compilarDeclaracion(vector< Simbolo* > &vectorSimbolos, Tipo *tipo, bool global)
{
  for(int i=0; i < vectorSimbolos.size(); i++ ){
    //antes de insertar el nuevo simbolo, comprobar que no
    //hay otro ya con el mismo nombre presente
    if( existeSimbolo( tablaSimbolos, vectorSimbolos[i] ) ){
      string err;
      err = "Existe declaración previa del símbolo " +  (vectorSimbolos[i]->getNombre());
      yyerror(err.c_str());
    }

    if( vectorSimbolos[i]->getDimension() > 0 ){ //array
      size_t tamArray = vectorSimbolos[i]->getDimension();
      Simbolo* simboloArray = vectorSimbolos[i];
      
      TipoArray* nuevoArray = new TipoArray(tipo, tamArray);
      
      simboloArray->setTipo( nuevoArray );
      tablaTipos.insertar("array", nuevoArray); 
    }
    else
      vectorSimbolos[i]->setTipo(tipo);

    if( global )
      vectorSimbolos[i]->setGlobal();
    
    
    tablaSimbolos.insertar(vectorSimbolos[i]);
  }
}
예제 #2
0
void ManejadorClass::escribirMain(void)
{
    string metodo  = "main";
    string firma   = "9";

    escribirCabeceraMetodo(metodo, firma, T_INVALIDO);

    Simbolo* dummy = new Simbolo("Args");
    dummy->setTipo(T_CADENA)->setInicializado();
    registrarVariableLocal(dummy, 2);
}