Acceso a clase
[PL2.git] / Modulo.java
index 2e9c04b..e0ced5d 100644 (file)
@@ -6,6 +6,7 @@ public class Modulo {
        String nombre;
        AST exportacion;
        AST importacion;
+    AST implementacion;
        
        public Modulo(String nombre, AST arbol){
                this.nombre = nombre;
@@ -22,6 +23,10 @@ public class Modulo {
                                ASTFactory f = new ASTFactory();
                                this.importacion = f.dupTree(t);
                        }
+                       if(t.getText().equals("implementacion")){
+                               ASTFactory f = new ASTFactory();
+                               this.implementacion = f.dupTree(t);
+                       }
                        t = t.getNextSibling();
                }
        }
@@ -47,7 +52,64 @@ public class Modulo {
                }
                return arbol;
        }
+       
+       public AST getDeclaracion_interna(String nombre){
+               AST arbol = implementacion.getFirstChild();
+               while(!arbol.getFirstChild().getText().equals(nombre)){
+                       arbol = arbol.getNextSibling();
+                       if (arbol == null)
+                               break;
+               }
+               return arbol;
+       }
+       
        public AST getImportacion(){
                return importacion;
        }
+       
+       public String referenciaCiclica(TablaModulos mods){
+               String ref = "";
+               String ref2 = "";
+               AST arbol = null;
+               String minombre =nombre;
+               if(importacion != null)
+                       arbol = importacion.getFirstChild();
+               else return ref;
+               while(arbol != null){
+                       Modulo mod = mods.get(arbol.getText());
+                       if(mod.getNombre().equals(nombre)){
+                               return nombre + "->" + mod.getNombre();
+                       }
+                       ref2 = referenciaCiclica(mod, mods);
+                       if(!ref2.equals("")){
+                               return nombre + "->" + ref2;
+                       }
+                       arbol = arbol.getNextSibling();
+               }
+               
+               return ref;
+       }
+       
+       public String referenciaCiclica(Modulo mod, TablaModulos mods){
+               if(mod.getNombre().equals(nombre)){
+                       return mod.getNombre();
+               }
+               AST arbol = mod.getImportacion();
+               if(arbol != null)
+                       arbol = arbol.getFirstChild();
+               else return "";
+               while(arbol != null){
+                       Modulo mod1 = mods.get(arbol.getText());
+                       if(mod1.getNombre().equals(nombre)){
+                               return mod.getNombre() + "->" + mod1.getNombre();
+                       }else{
+                               String ref2 =referenciaCiclica(mod1, mods); 
+                               if(!ref2.equals("")){
+                                       return mod.getNombre() + "->" + ref2;
+                               }
+                       }
+                       arbol = arbol.getNextSibling();
+               }
+               return "";
+       }
 }