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, Tabla_Global> tab = new Hashtable<String, Tabla_Global>();
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 nombre_modulo = li.next();
82 System.out.println("RN modulo: " + nombre_modulo);
83 resnom.declaracion_modulo(arbol.get(nombre_modulo), tab.get(nombre_modulo), mods);
84 arbol.put(nombre_modulo, resnom.getAST());
87 //ASTFrame frame = new ASTFrame("Princial", arbol.get("principal.mod"));
88 //frame.setVisible(true);
89 //anasem.declaracion_modulo(arbol);
91 } catch (ANTLRException ae) {
92 System.err.println(ae.getMessage());
93 } catch (FileNotFoundException fnfe) {
94 System.err.println("No se encontro el fichero");