Ahora están resueltos los accesos a objetos....
[PL2.git] / Anasint.g
index 23f3e0a..45f4501 100755 (executable)
--- a/Anasint.g
+++ b/Anasint.g
@@ -51,6 +51,7 @@ tokens{
        int margen = 0;
        Pila_Ambitos pilaambitos = new Pila_Ambitos();
        Tabla_Global t = new Tabla_Global();
+       Hashtable<String,String> declaraciones = new Hashtable<String,String>();
 
        LinkedList<Simbolo_no_resuelto> no_resueltos = new LinkedList<Simbolo_no_resuelto>();
        
@@ -119,6 +120,7 @@ tokens{
        }
        
        AST crear_declaracion_atributo (AST nombre_atributo, AST tipo_atributo, AST cualificador_atributo){
+               declaraciones.put(nombre_atributo.getText(), tipo_atributo.getText());
        String a = nombre_atributo.getText();
        AST A = #(#[ATRIBUTO,"atributo"], nombre_atributo, tipo_atributo, cualificador_atributo);
        Simbolo S = new Simbolo(a, A);
@@ -128,6 +130,7 @@ tokens{
 
        AST crear_declaracion_parametro (AST nombre_parametro, AST tipo_parametro){
                String p = nombre_parametro.getText();
+               declaraciones.put(nombre_parametro.getText(), tipo_parametro.getText());
                AST P = #(#[PARAMETRO,"parametro"], nombre_parametro, tipo_parametro);
                Simbolo S = new Simbolo(p, P);
                pilaambitos.ambito_actual().setDeclaracion(S);
@@ -138,6 +141,7 @@ tokens{
        
        AST crear_declaracion_variable_local (AST nombre_variable, AST tipo_variable){
                String v = nombre_variable.getText();
+               declaraciones.put(nombre_variable.getText(), tipo_variable.getText());
                AST V = #(#[VARIABLE_LOCAL,"variable_local"], nombre_variable, tipo_variable);
                Simbolo S = new Simbolo(v, V);
                pilaambitos.ambito_actual().setDeclaracion(S);
@@ -252,7 +256,7 @@ tokens{
 // DECLARACION DE MODULO          
 /////////////////////////////////////////////////////////
  
-declaracion_modulo![String f] returns [Tabla_Global tab=null] :
+declaracion_modulo![String f] returns [Auxiliar tab=null] :
    {
        ambito_abrir_programa();
        log = new logFile(f);
@@ -271,7 +275,7 @@ declaracion_modulo![String f] returns [Tabla_Global tab=null] :
     ambito_cerrar_programa();
     log.decNivel();
     log.close();
-   tab = t;}
+    tab = new Auxiliar(t, declaraciones);}
    ;
  
 nombre_modulo : MODULO! IDENT ;