e0ced5d073d52d232187aa569ba460bfe46f2619
[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     AST implementacion;
10         
11         public Modulo(String nombre, AST arbol){
12                 this.nombre = nombre;
13                 this.exportacion = null;
14                 this.importacion = null;
15                 
16                 AST t = arbol.getFirstChild();
17                 while(t != null){
18                         if(t.getText().equals("exportacion")){
19                                 ASTFactory f = new ASTFactory();
20                                 this.exportacion = f.dupTree(t);
21                         }
22                         if(t.getText().equals("importacion")){
23                                 ASTFactory f = new ASTFactory();
24                                 this.importacion = f.dupTree(t);
25                         }
26                         if(t.getText().equals("implementacion")){
27                                 ASTFactory f = new ASTFactory();
28                                 this.implementacion = f.dupTree(t);
29                         }
30                         t = t.getNextSibling();
31                 }
32         }
33         
34         public String getNombre() {
35                 return nombre;
36         }
37         public void setNombre(String nombre) {
38                 this.nombre = nombre;
39         }
40         public AST getExportacion() {
41                 return exportacion;
42         }
43         public void setExportacion(AST exportacion) {
44                 this.exportacion = exportacion;
45         }
46         public AST getDeclaracion(String nombre){
47                 AST arbol = exportacion.getFirstChild();
48                 while(!arbol.getFirstChild().getText().equals(nombre)){
49                         arbol = arbol.getNextSibling();
50                         if (arbol == null)
51                                 break;
52                 }
53                 return arbol;
54         }
55         
56         public AST getDeclaracion_interna(String nombre){
57                 AST arbol = implementacion.getFirstChild();
58                 while(!arbol.getFirstChild().getText().equals(nombre)){
59                         arbol = arbol.getNextSibling();
60                         if (arbol == null)
61                                 break;
62                 }
63                 return arbol;
64         }
65         
66         public AST getImportacion(){
67                 return importacion;
68         }
69         
70         public String referenciaCiclica(TablaModulos mods){
71                 String ref = "";
72                 String ref2 = "";
73                 AST arbol = null;
74                 String minombre =nombre;
75                 if(importacion != null)
76                         arbol = importacion.getFirstChild();
77                 else return ref;
78                 while(arbol != null){
79                         Modulo mod = mods.get(arbol.getText());
80                         if(mod.getNombre().equals(nombre)){
81                                 return nombre + "->" + mod.getNombre();
82                         }
83                         ref2 = referenciaCiclica(mod, mods);
84                         if(!ref2.equals("")){
85                                 return nombre + "->" + ref2;
86                         }
87                         arbol = arbol.getNextSibling();
88                 }
89                 
90                 return ref;
91         }
92         
93         public String referenciaCiclica(Modulo mod, TablaModulos mods){
94                 if(mod.getNombre().equals(nombre)){
95                         return mod.getNombre();
96                 }
97                 AST arbol = mod.getImportacion();
98                 if(arbol != null)
99                         arbol = arbol.getFirstChild();
100                 else return "";
101                 while(arbol != null){
102                         Modulo mod1 = mods.get(arbol.getText());
103                         if(mod1.getNombre().equals(nombre)){
104                                 return mod.getNombre() + "->" + mod1.getNombre();
105                         }else{
106                                 String ref2 =referenciaCiclica(mod1, mods); 
107                                 if(!ref2.equals("")){
108                                         return mod.getNombre() + "->" + ref2;
109                                 }
110                         }
111                         arbol = arbol.getNextSibling();
112                 }
113                 return "";
114         }
115 }