3 import antlr.ASTFactory;
7 class ResNom extends TreeParser;
16 LinkedList<String> leas = new LinkedList<String>();
19 void resolver_identificadores_tipo(){
20 Identificador_Tipo elemento;
22 LinkedList<Identificador_Tipo> i;
23 i = t.identtiposinresolver.getIdentificadores();
24 ListIterator<Identificador_Tipo> li = i.listIterator();
26 elemento = (Identificador_Tipo) li.next();
27 nombre = elemento.getNombre();
28 if(t.ambitomodulo.getDeclaracion(nombre) == null){
29 //identificador de tipo no declarado
30 System.out.println("ERROR RN: identificador " + nombre + " no declarado");
35 AST resolver_acceso_simple(String numero){
36 int no = Integer.parseInt(numero);
37 //nombre y ambito contenedor del acceso
38 Lista_Accesos acsr = t.accesossinresolver;
39 Acceso acc = t.accesossinresolver.getAcceso(no);
40 String nom = acc.getNombre();
41 Ambito amb = acc.getContenedor();
44 AST dec = #(#[ERROR, "error"]);
45 //comprobar si se ha declarado, buscando en la tabla de ambitos y declaraciones
46 if((sim = t.tablaambitos.buscar_simbolo(amb, nom)) == null){
47 //acceso simple no declarado
48 if(!leas.contains(numero)){
49 System.out.println("ERROR RN: acceso simple " + nom + " no declarado");
54 dec = sim.getDeclaracion(); //referencia adelantada
60 //con esta funcion se podrian poner la clases
61 //tipo: i:IDENT {#tipo = declaracion_tipo(#i);}
62 AST declaracion_tipo(AST ident){
63 AST tipo = #(#[ERROR, "error"]);
64 Ambito modulo = t.ambitomodulo;
65 Simbolo s = modulo.getDeclaracion(ident.getText());
67 ASTFactory f = new ASTFactory();
68 tipo = f.dupTree(s.getDeclaracion());
74 declaracion_modulo [Tabla_Global tab]:
76 resolver_identificadores_tipo();}
77 #(MODULO nombre_modulo definicion_modulo);
79 // =============================== del fichero anasem.g ============================
81 nombre_modulo : IDENT ;
89 importacion : #(IMPORTACION lista_ident);
90 lista_ident: (IDENT)+;
92 exportacion : #(EXPORTACION lista_declaraciones_clases);
94 implementacion : #(IMPLEMENTACION lista_declaraciones_clases);
96 lista_declaraciones_clases: (declaracion_clase)*
99 declaracion_clase : #(CLASE nombre_clase cualificador_clase definicion_clase)
102 cualificador_clase : INST | NO_INST ;
104 nombre_clase : IDENT ;
106 definicion_clase : declaraciones_elementos_clase
109 declaraciones_elementos_clase : (declaracion_elemento_clase)* ;
111 declaracion_elemento_clase :
112 #(METODO declaracion_metodo cualificador_elemento_clase)
113 | #(ATRIBUTO IDENT tipo cualificador_elemento_clase)
116 cualificador_elemento_clase: OCULTO | VISIBLE ;
118 declaracion_metodo : prototipo_metodo definicion_metodo;
120 prototipo_metodo: #(PROTOTIPO IDENT #(PARAMETROS declaracion_parametros)
121 #(RESULTADO (tipo | VACIO)));
123 declaracion_parametros : (declaracion_parametro)* ;
125 declaracion_parametro : #(PARAMETRO IDENT tipo) ;
127 definicion_metodo: #(DEFINICION #(VARIABLES_LOCALES declaracion_variables_locales) #(INSTRUCCIONES instrucciones))
130 declaracion_variables_locales : (declaracion_variable_local)* ;
132 declaracion_variable_local : #(VARIABLE_LOCAL IDENT tipo) ;
134 declaracion_error : ERROR;
136 instrucciones : (instruccion)* ;
138 instruccion : #(INSTRUCCION ( instruccion_simple | instruccion_compuesta))
141 instruccion_simple : llamada_metodo
148 instruccion_compuesta :
153 crear : #(CREAR expresion expresion);
154 escribir : #(ESCRIBIR expresion);
156 asignacion : #(ASIGNACION expresion expresion );
158 retorno: #(DEV expresion)
162 #(LLAMADA acceso #(EXPRESIONES lista_expresiones))
165 lista_expresiones: (expresion)* ;
167 condicion: #(SI expresion #(INSTRUCCIONES instrucciones)
168 (#(INSTRUCCIONES instrucciones))?)
171 iteracion : #(MIENTRAS expresion #(INSTRUCCIONES
175 #(O expresion expresion)
176 | #(Y expresion expresion)
178 | #(op1:MAYOR expresion expresion)
179 | #(op2:MAYOR_IGUAL expresion expresion)
180 | #(op3:MENOR expresion expresion)
181 | #(op4:MENOR_IGUAL expresion expresion)
182 | #(op5:IGUAL expresion expresion)
183 | #(op6:DISTINTO expresion expresion)
184 | #(MAS expresion expresion)
185 | #(MENOS expresion expresion)
186 | #(MENOSUNARIO expresion)
187 | #(POR expresion expresion)
188 | #(DIVISION expresion expresion)
189 | #(LLAMADA acceso #(EXPRESIONES lista_expresiones))
190 | #(ACCESO_TABLA acceso #(EXPRESIONES lista_expresiones_nv))
197 | #(ENTERO_A_REAL expresion)
198 | #(REAL_A_ENTERO expresion)
202 acceso : acceso_simple
203 | #(ACCESO_OBJETO acceso_simple a:IDENT);
205 acceso_simple : #(ACCESO_SIMPLE IDENT d:declaracion_acceso)
208 declaracion_acceso: declaracion_modulo[t]
210 | declaracion_elemento_clase
211 | declaracion_parametro
212 | declaracion_variable_local
215 {#declaracion_acceso = resolver_acceso_simple(i.getText());}
218 lista_expresiones_nv : (expresion)+;
221 tipo_predefinido_simple
222 | tipo_predefinido_compuesto
227 tipo_predefinido_simple :
234 tipo_predefinido_compuesto : formacion;
236 formacion : #(FORMACION #(LISTA_ENTEROS lista_enteros) tipo);
238 lista_enteros : (LIT_ENTERO)+ ;