Ahora están resueltos los accesos a objetos....
[PL2.git] / Principal.java
1 ///////////////////////////////
2 // Principal.java (clase principal)
3 ///////////////////////////////
4 import java.io.*;
5 import java.util.Hashtable;
6 import java.util.LinkedList;
7 import java.util.List;
8 import java.util.ListIterator;
9
10 import antlr.ANTLRException;
11 import antlr.CommonToken;
12 import antlr.Token;
13 import antlr.TokenStreamException;
14 import antlr.collections.AST;
15 import antlr.debug.misc.ASTFrame;
16
17 public class Principal {
18                 /**
19                  *  Pre: 'nombre_prog' es el nombre de un fichero conteniendo un programa L-1.
20                  *               Ej. "programa.cfg" 
21                  *               c:\PL2\Laboratorio\SEMANTICA\sem2\m.mod;
22                  *               c:\PL2\Laboratorio\SEMANTICA\sem2\n.mod;
23                  *               c:\PL2\Laboratorio\SEMANTICA\sem2\p.mod;
24                  *
25                  *      Cada elemento en 'lista_nombre_modulos' contiene el nombre de un modulo 
26                  *  del programa 'nombre_prog'.
27                  */
28                 private static List<String> extraer_modulos(String nombre_prog) {
29                         List<String> lista_nombres_modulos = new LinkedList<String>();
30                         try {
31                                 FileInputStream f = new FileInputStream(nombre_prog);
32                                 Conflex conflex = new Conflex(f);
33                                 CommonToken tok = (CommonToken) conflex.nextToken();
34
35                                 while (tok.getType() != Token.EOF_TYPE) {
36                                         String s = new String(tok.getText());
37                                         lista_nombres_modulos.add(s);
38                                         tok = (CommonToken) conflex.nextToken();
39                                 }
40                         } catch (FileNotFoundException e) {
41                                 System.out.println("Excepcion: " + e);
42                         } catch (TokenStreamException e) {
43                                 System.out.println("Excepcion: " + e);
44                         }
45                         return lista_nombres_modulos;
46                 }
47         
48         
49         public static void main(String args[]) {
50                 
51                 try {
52                         List<String> nombres_modulos = extraer_modulos(args[0]);
53
54                         ListIterator<String> li = nombres_modulos.listIterator();
55
56                         FileInputStream fis;
57                         
58                         TablaModulos mods = new TablaModulos(); //modulos parseados
59                         Analex analex;
60                         Anasint anasint;
61                         String nombre_modulo;
62                         Hashtable<String, AST> arbol = new Hashtable<String, AST>();
63                         Hashtable<String, Auxiliar> tab = new Hashtable<String, Auxiliar>();
64                         
65                         while(li.hasNext()){
66                                 nombre_modulo = li.next();
67                                 System.out.println("tratando modulo: " + nombre_modulo);
68                                 fis = new FileInputStream(nombre_modulo);
69                                 analex = new Analex(fis);
70                                 anasint = new Anasint(analex);
71                                 anasint.setASTNodeClass("ArbolLineas");
72                                 
73                                 tab.put(nombre_modulo, anasint.declaracion_modulo(nombre_modulo));
74                                 arbol.put(nombre_modulo, anasint.getAST());
75                                 mods.add(nombre_modulo, anasint.getAST());
76
77                         }
78                         li = nombres_modulos.listIterator();
79                         while(li.hasNext()){
80                                 ResNom resnom = new ResNom();
81                                 resnom.setASTNodeClass("ArbolLineas");
82                                 nombre_modulo = li.next();
83                                 String nom2 = nombre_modulo.substring(0, nombre_modulo.length()-4);
84                                 Modulo mod2 = mods.get(nom2);
85                                 String refciclica = mod2.referenciaCiclica(mods);
86                                 if(!refciclica.equals("")){
87                                         System.out.println("Referencia ciclica: " + refciclica);
88                                 }
89                                 System.out.println("RN modulo: " + nombre_modulo);
90                                 Auxiliar aux = tab.get(nombre_modulo);
91                                 resnom.declaracion_modulo(arbol.get(nombre_modulo), aux.t, mods, aux.declaraciones);
92                                 arbol.put(nombre_modulo, resnom.getAST());
93                                 
94                                 
95                         }
96                         ASTFrame frame = new ASTFrame("nombre", arbol.get("p2.mod"));
97                         frame.setSize(600, 600);
98                         frame.setVisible(true);
99                         
100                         
101                         //anasem.declaracion_modulo(arbol);
102
103                 } catch (ANTLRException ae) {
104                         System.err.println(ae.getMessage());
105                 } catch (FileNotFoundException fnfe) {
106                         System.err.println("No se encontro el fichero");
107                 }
108         }
109 }