Referencias ciclicas mostradas
[PL2.git] / Modulo.java
1 import antlr.ASTFactory;
2 import antlr.collections.AST;
3
4
5 public class Modulo {
6         String nombre;
7         AST exportacion;
8         AST importacion;
9         
10         public Modulo(String nombre, AST arbol){
11                 this.nombre = nombre;
12                 this.exportacion = null;
13                 this.importacion = null;
14                 
15                 AST t = arbol.getFirstChild();
16                 while(t != null){
17                         if(t.getText().equals("exportacion")){
18                                 ASTFactory f = new ASTFactory();
19                                 this.exportacion = f.dupTree(t);
20                         }
21                         if(t.getText().equals("importacion")){
22                                 ASTFactory f = new ASTFactory();
23                                 this.importacion = f.dupTree(t);
24                         }
25                         t = t.getNextSibling();
26                 }
27         }
28         
29         public String getNombre() {
30                 return nombre;
31         }
32         public void setNombre(String nombre) {
33                 this.nombre = nombre;
34         }
35         public AST getExportacion() {
36                 return exportacion;
37         }
38         public void setExportacion(AST exportacion) {
39                 this.exportacion = exportacion;
40         }
41         public AST getDeclaracion(String nombre){
42                 AST arbol = exportacion.getFirstChild();
43                 while(!arbol.getFirstChild().getText().equals(nombre)){
44                         arbol = arbol.getNextSibling();
45                         if (arbol == null)
46                                 break;
47                 }
48                 return arbol;
49         }
50         public AST getImportacion(){
51                 return importacion;
52         }
53         
54         public String referenciaCiclica(TablaModulos mods){
55                 String ref = "";
56                 String ref2 = "";
57                 AST arbol = null;
58                 String minombre =nombre;
59                 if(importacion != null)
60                         arbol = importacion.getFirstChild();
61                 else return ref;
62                 while(arbol != null){
63                         Modulo mod = mods.get(arbol.getText());
64                         if(mod.getNombre().equals(nombre)){
65                                 return nombre + "->" + mod.getNombre();
66                         }
67                         ref2 = referenciaCiclica(mod, mods);
68                         if(!ref2.equals("")){
69                                 return nombre + "->" + ref2;
70                         }
71                         arbol = arbol.getNextSibling();
72                 }
73                 
74                 return ref;
75         }
76         
77         public String referenciaCiclica(Modulo mod, TablaModulos mods){
78                 if(mod.getNombre().equals(nombre)){
79                         return mod.getNombre();
80                 }
81                 AST arbol = mod.getImportacion();
82                 if(arbol != null)
83                         arbol = arbol.getFirstChild();
84                 else return "";
85                 while(arbol != null){
86                         Modulo mod1 = mods.get(arbol.getText());
87                         if(mod1.getNombre().equals(nombre)){
88                                 return mod.getNombre() + "->" + mod1.getNombre();
89                         }else{
90                                 String ref2 =referenciaCiclica(mod1, mods); 
91                                 if(!ref2.equals("")){
92                                         return mod.getNombre() + "->" + ref2;
93                                 }
94                         }
95                         arbol = arbol.getNextSibling();
96                 }
97                 return "";
98         }
99 }