1 ///////////////////////////////
2 // Principal.java (clase principal)
3 ///////////////////////////////
5 import java.util.Hashtable;
6 import java.util.LinkedList;
8 import java.util.ListIterator;
10 import antlr.ANTLRException;
11 import antlr.CommonToken;
13 import antlr.TokenStreamException;
14 import antlr.collections.AST;
15 import antlr.debug.misc.ASTFrame;
17 public class Principal {
19 * Pre: 'nombre_prog' es el nombre de un fichero conteniendo un programa L-1.
21 * c:\PL2\Laboratorio\SEMANTICA\sem2\m.mod;
22 * c:\PL2\Laboratorio\SEMANTICA\sem2\n.mod;
23 * c:\PL2\Laboratorio\SEMANTICA\sem2\p.mod;
25 * Cada elemento en 'lista_nombre_modulos' contiene el nombre de un modulo
26 * del programa 'nombre_prog'.
28 private static List<String> extraer_modulos(String nombre_prog) {
29 List<String> lista_nombres_modulos = new LinkedList<String>();
31 FileInputStream f = new FileInputStream(nombre_prog);
32 Conflex conflex = new Conflex(f);
33 CommonToken tok = (CommonToken) conflex.nextToken();
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();
40 } catch (FileNotFoundException e) {
41 System.out.println("Excepcion: " + e);
42 } catch (TokenStreamException e) {
43 System.out.println("Excepcion: " + e);
45 return lista_nombres_modulos;
49 public static void main(String args[]) {
52 List<String> nombres_modulos = extraer_modulos(args[0]);
54 ListIterator<String> li = nombres_modulos.listIterator();
58 TablaModulos mods = new TablaModulos(); //modulos parseados
62 Hashtable<String, AST> arbol = new Hashtable<String, AST>();
63 Hashtable<String, Auxiliar> tab = new Hashtable<String, Auxiliar>();
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");
73 tab.put(nombre_modulo, anasint.declaracion_modulo(nombre_modulo));
74 arbol.put(nombre_modulo, anasint.getAST());
75 mods.add(nombre_modulo, anasint.getAST());
78 li = nombres_modulos.listIterator();
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);
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());
96 ASTFrame frame = new ASTFrame("nombre", arbol.get("p2.mod"));
97 frame.setSize(600, 600);
98 frame.setVisible(true);
101 //anasem.declaracion_modulo(arbol);
103 } catch (ANTLRException ae) {
104 System.err.println(ae.getMessage());
105 } catch (FileNotFoundException fnfe) {
106 System.err.println("No se encontro el fichero");