/* |------------------------------------------------------------------------------------------------------------------- | Funciones |------------------------------------------------------------------------------------------------------------------- | */ public itemValor getValId(token idVal, elementoEntorno elem) // aquí hay que buscar dentro de la tabla de simbolos y devoler el valor, e ir buscando // hacia atraás para encontral el id { itemValor retorno = new itemValor(); retorno.setTypeNulo(); itemEntorno et = elem.getItemValor(idVal.valLower); if (et != null) { return(et.valor); } else { tablaSimbolos.tablaErrores.insertErrorSemantic("La variable : " + idVal.val + "no se encuentra en el ambito correcto para su acceso, no se ha declarado o no tiene permisos para acceder a ella", idVal); } return(retorno); }
public itemValor getValIdCorchetes(token idVal, elementoEntorno elem, List <int> lstIndex) /* |---------------------------- | getValIdCorchetes */ { itemValor retorno = new itemValor(); retorno.setTypeNulo(); itemEntorno et = elem.getItemValor(idVal.valLower); if (et != null) { if (et.dimension.Count == lstIndex.Count) { int indiceFinal = 1; //validando si no se salió de los indices for (int i = 0; i < et.dimension.Count; i++) { if (lstIndex[i] < et.dimension[i]) { if (i == 0) //inicilizo la lista { indiceFinal = lstIndex[i]; } else { indiceFinal = indiceFinal * et.dimension[i] + lstIndex[i]; } } else { tablaSimbolos.tablaErrores.insertErrorSemantic("El índice está fuera de rango de la matriz: " + idVal.val + " , rango máximo permitido para la dimensión:" + i + " es " + (et.dimension[i] - 1), idVal); return(retorno); } } //validando que no salga del arreglo de adentro if (indiceFinal < et.valor.arrayValores.Count) { return(et.valor.arrayValores[indiceFinal]); } else { tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede acceder a la posición de la matriz: " + idVal.val, idVal); return(retorno); } //println("El indice al que quiero acceder es al indice :" + indiceFinal + " de la matriz :" + idVal.val); } else { tablaSimbolos.tablaErrores.insertErrorSemantic("No coinciden las dimensiones en la matriz: " + idVal.val + " para acceder a ella", idVal); return(retorno); } } else { tablaSimbolos.tablaErrores.insertErrorSemantic("La variable : " + idVal.val + "no se encuentra en el ambito correcto para su acceso, no se ha declarado o no tiene permisos para acceder a ella", idVal); } return(retorno); }