public Simbolo BuscarMetodo(String nombre, List <Nodo3D> parametros) { Simbolo padreclase = BuscarClasePadre(); Boolean encontrado = false; foreach (Simbolo sim in padreclase.Ambito.TablaSimbolo) { if ((sim.Rol.Equals(Constante.TMetodo) || sim.Rol.Equals(Constante.TFuncion)) && sim.Nombre.Equals(nombre)) { FMetodo metodo = (FMetodo)sim.Valor; if (metodo.Parametros.Count == parametros.Count) { Boolean error = false; for (int i = 0; i < metodo.Parametros.Count; i++) { FParametro p = (FParametro)metodo.Parametros[i].Valor; String tipometodo = p.Tipo; String tipoparametro = parametros[i].Tipo; if (p.Dimensiones > 0) { tipometodo = "arreglo " + tipometodo; } if (!tipometodo.Equals(tipoparametro)) { error = true; break; } } if (!error) { return(new Simbolo(sim)); } } } } if (!encontrado) { Simbolo here = BuscarMetodoHerencia(nombre, parametros); if (here != null) { Simbolo nuevo = new Simbolo(here); nuevo.este += padreclase.Ambito.Tamaño; here = nuevo; } return(here); } return(null); }
public Simbolo BuscarConstructor(String nombreClase, List <Nodo3D> parametros) { Simbolo padreclase = BuscarClasePadre(); FClase pc = (FClase)padreclase.Valor; Simbolo clase = BuscarClase(nombreClase, pc.ArchivoPadre); if (clase != null) { Boolean encontrado = false; foreach (Simbolo c in clase.Ambito.TablaSimbolo) { if (c.Rol.Equals(Constante.TConstructor) && !encontrado) { FMetodo metodo = (FMetodo)c.Valor; if (metodo.Parametros.Count == parametros.Count) { Boolean error = false; for (int i = 0; i < metodo.Parametros.Count; i++) { FParametro p = (FParametro)metodo.Parametros[i].Valor; String tipometodo = p.Tipo; String tipoparametro = parametros[i].Tipo; if (p.Dimensiones > 0) { tipometodo = "arreglo " + tipometodo; } if (!tipometodo.Equals(tipoparametro)) { error = true; break; } } if (!error) { return(c); } } } } if (!encontrado) { FMetodo m = new FMetodo(Constante.TPublico, Constante.TConstructor, 0, clase.Nombre, new List <Simbolo>(), new Ambito(clase.Nombre), clase.Fila, clase.Columna); return(new Simbolo(m.Visibilidad, Constante.TConstructor, m.Nombre, Constante.TConstructor, m.Fila, m.Columna, m.Ambito, m)); } } return(null); }