Tabla_Global t;
TablaModulos mods;
AST importaciones = null;
+ String nombre_modulo = "";
Hashtable<String,String> declaraciones = new Hashtable<String,String>();
void resolver_identificadores_tipo(){
ListIterator<Identificador_Tipo> li = i.listIterator();
while(li.hasNext()){
elemento = (Identificador_Tipo) li.next();
- nombre = elemento.getNombre();
+ nombre = elemento.getNombre();
if(t.ambitomodulo.getDeclaracion(nombre) == null &&
mods.Declaracion(nombre, importaciones) == null){
return dec;
}
AST resolver_acceso_objeto(AST arbol, AST ident){
+ String raiz, accs;
+ raiz = arbol.getFirstChild().getText();
+ accs = ident.getText();
+
AST as = arbol.getFirstChild();
Hashtable<String,String> xx = declaraciones;
String tipo = declaraciones.get(as.getText());
-
AST arbol2 = declaracion_tipo(#(#[IDENT, tipo]));
+ if (tipo == null){
+ System.out.println("DEBUG: Acceso a Clase No instanciable " + arbol.getFirstChild().getText());
+ String nombre = arbol.getFirstChild().getText();
+ arbol2 = mods.Declaracion_interna(nombre, nombre_modulo);
+ if (arbol2 == null)
+ arbol2 = mods.Declaracion(arbol.getFirstChild().getText(), importaciones);
+ }
+
+ if (arbol2 == null){
+ System.out.println("ERROR RN :"+t.ambitomodulo.getNombre()+".mod ("+((ArbolLineas)ident).getLinea()+"): acceso objeto '" + ident.getText() + "' no declarado");
+ return #(#[ERROR,"error"]);
+ }
+
if (arbol2.getType() == ERROR)
arbol2 = mods.Declaracion(tipo, importaciones);
- if (arbol2.getType() == ERROR ){
+ if (arbol2 == null || arbol2.getType() == ERROR){
System.out.println("ERROR RN :"+t.ambitomodulo.getNombre()+".mod ("+((ArbolLineas)ident).getLinea()+"): acceso objeto '" + ident.getText() + "' no declarado");
return #(#[ERROR,"error"]);
}
+
+
arbol2 = arbol2.getFirstChild().getNextSibling().getNextSibling();
while(arbol2 != null){
if(arbol2.getType() == ATRIBUTO){
}
}
-declaracion_modulo [Tabla_Global tab, TablaModulos m, Hashtable d]:
-{t = tab;
+declaracion_modulo [String nombre, Tabla_Global tab, TablaModulos m, Hashtable d]:
+{
+ nombre_modulo = nombre;
+ t = tab;
declaraciones = d;
mods = m;
averiguar_importaciones();
acceso_simple : #(ACCESO_SIMPLE i:IDENT d:declaracion_acceso)
;
-declaracion_acceso: declaracion_modulo[t, mods, declaraciones]
+declaracion_acceso: declaracion_modulo[nombre_modulo, t, mods, declaraciones]
| declaracion_clase
| declaracion_elemento_clase
| declaracion_parametro