Acceso a clase
[PL2.git] / TablaModulos.java
1 import java.util.LinkedList;
2 import java.util.ListIterator;
3
4 import antlr.collections.AST;
5
6
7 public class TablaModulos {
8         LinkedList<Modulo> modulos;
9         
10         public TablaModulos(){
11                 modulos = new LinkedList<Modulo>();
12         }
13         
14         public void add(String nombre, AST arbol){
15                 //el arbol es una arbol completo
16                 modulos.add(new Modulo(nombre, arbol));
17         }
18         public Modulo get(String nombre){
19                 ListIterator<Modulo> li = modulos.listIterator();
20                 Modulo mod = null;
21                 while(li.hasNext()){
22                         mod = li.next();
23                         if (mod.getNombre().equals(nombre+".mod")){
24                                 return mod;
25                         }
26                 }
27                 return null;
28         }
29         
30         public AST Declaracion(String nombre, AST importacion){
31                 //importacion es una lista de IDENT
32                 if (importacion == null)
33                         return null;
34                 int n = importacion.getNumberOfChildren();
35                 AST mod = importacion.getFirstChild();
36                 
37                 while(n > 0){
38                         if(Declaracion(nombre, mod.getText()+".mod") != null)
39                                 return Declaracion(nombre, mod.getText()+".mod");
40                         mod = mod.getNextSibling();
41                         n--;
42                 }
43                 return null;
44         }
45         
46         public AST Declaracion(String nombre, String modulo){
47                 ListIterator<Modulo> li = modulos.listIterator();
48                 Modulo mod;
49                 while(li.hasNext()){
50                         mod = li.next();
51                         if(mod.getNombre().equals(modulo)){
52                                 //modulo encontrado, ahora a buscar la declaracion
53                                 if(mod.getDeclaracion(nombre) != null){
54                                         return mod.getDeclaracion(nombre);
55                                 }else return null;
56                         }
57                 }
58                 return null;
59         }
60         public AST Declaracion_interna(String nombre, String modulo){
61                 ListIterator<Modulo> li = modulos.listIterator();
62                 Modulo mod;
63                 while(li.hasNext()){
64                         mod = li.next();
65                         if(mod.getNombre().equals(modulo)){
66                                 //modulo encontrado, ahora a buscar la declaracion
67                                 if(mod.getDeclaracion_interna(nombre) != null){
68                                         return mod.getDeclaracion_interna(nombre);
69                                 }else return null;
70                         }
71                 }
72                 return null;
73         }
74 }