internal NodoTablaSimbolos.TipoDeDato ObtenerTipoArreglo(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto) { NodoTablaSimbolos nodo = this.ObtenerArreglo(nombre, contexto, nombreContexto); return(nodo.TipoDato); //return this.ObtenerTipoVariable(nombre,NodoTablaSimbolos.TipoContexto.Global,string.Empty); }
internal bool EsVariableGlobal(string nombre, NodoTablaSimbolos.TipoContexto tipoContexto, string nombreCont) { NodoTablaSimbolos nodo = ObtenerVariable(nombre, tipoContexto, nombreCont); return(nodo != null && nodo.Nombre.Equals(nombre) && nodo.TipoEntrada == NodoTablaSimbolos.TipoDeEntrada.Variable && nodo.Contexto == NodoTablaSimbolos.TipoContexto.Global); }
internal bool EsParametroDeEsteProc(string nombre, NodoTablaSimbolos.TipoContexto tipoContexto, string nombreCont) { NodoTablaSimbolos nodo = ObtenerVariable(nombre, tipoContexto, nombreCont); return(nodo != null && nodo.Nombre.ToUpper().Equals(nombre.ToUpper()) && nodo.TipoEntrada == NodoTablaSimbolos.TipoDeEntrada.Parametro && nodo.Contexto == tipoContexto && nodo.NombreContextoLocal == nombreCont); }
internal double RetornarValorConstante(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto) { NodoTablaSimbolos nodo = this.ObtenerVariable(nombre, contexto, nombreContexto); if (nodo.EsConstante) { return(nodo.Valor); } else { return(int.MinValue); } }
private NodoTablaSimbolos ObtenerVariable(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto) { NodoTablaSimbolos nodo; nodo = this.listaNodos.Find( delegate(NodoTablaSimbolos _nodo) { //flanzani 23/10/2010 //Faltaba agregar el nombre del contexto local, pq sino puede traer de cualquiera. return( _nodo.Contexto == NodoTablaSimbolos.TipoContexto.Local && _nodo.Nombre.Equals(nombre, StringComparison.InvariantCultureIgnoreCase) && _nodo.EsArreglo == false && ((_nodo.NombreContextoLocal == nombreContexto && (_nodo.TipoEntrada == NodoTablaSimbolos.TipoDeEntrada.Variable)) || (_nodo.NombreContextoLocal == nombreContexto && _nodo.TipoEntrada == NodoTablaSimbolos.TipoDeEntrada.Parametro)) ); } ); if (nodo == null) { nodo = this.listaNodos.Find( delegate(NodoTablaSimbolos _nodo) { return(_nodo.EsArreglo == false && _nodo.Contexto == NodoTablaSimbolos.TipoContexto.Global && _nodo.TipoEntrada == NodoTablaSimbolos.TipoDeEntrada.Variable && _nodo.Nombre.Equals(nombre)); } ); } //Debug.Assert(nodo != null, new StringBuilder("La variable ").Append(nombre).Append(" no estaba declarada.").ToString()); return(nodo); }
internal void AgregarVariable(string nombre, NodoTablaSimbolos.TipoDeDato tdato, bool esConstante, NodoTablaSimbolos.TipoContexto contexto, string nombreProc, string valor) { this.listaNodos.Add(new NodoTablaSimbolos(nombre, NodoTablaSimbolos.TipoDeEntrada.Variable, tdato, esConstante, contexto, nombreProc) { ValorTexto = valor }); }
internal void AgregarParametroDeProc(string nombre, NodoTablaSimbolos.TipoDeDato tdato, NodoTablaSimbolos.TipoContexto contexto, string nombreProc) { this.listaNodos.Add(new NodoTablaSimbolos(nombre, NodoTablaSimbolos.TipoDeEntrada.Parametro, tdato, false, contexto, nombreProc)); }
internal void AgregarConstante(string nombre, NodoTablaSimbolos.TipoDeDato tipo, NodoTablaSimbolos.TipoContexto tipoContexto, string nombreProc, string valorTexto) { AgregarVariable(nombre, tipo, true, tipoContexto, nombreProc, valorTexto); }
internal bool ExisteArregloEnEsteContexto(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto) { NodoTablaSimbolos nodo = ObtenerArreglo(nombre, contexto, nombreContexto); return(nodo != null && nodo.Contexto == contexto && nodo.NombreContextoLocal == nombreContexto); }
//public bool ExisteArreglo(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto) //{ // return this.listaNodos.Exists( // delegate(NodoTablaSimbolos _nodo) // { // return ((_nodo.Nombre.Equals(nombre)) && // (_nodo.TipoEntrada == NodoTablaSimbolos.TipoDeEntrada.Variable || _nodo.TipoEntrada == NodoTablaSimbolos.TipoDeEntrada.Parametro) && // (_nodo.EsArreglo == true) && // (_nodo.Contexto == contexto) && // (_nodo.NombreContextoLocal == nombreContexto) // ); // } // ); //} internal bool ExisteArreglo(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto) { return(ObtenerArreglo(nombre, contexto, nombreContexto) != null); }
internal double ObtenerTopeArreglo(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto) { NodoTablaSimbolos arr = ObtenerArreglo(nombre, contexto, nombreContexto); return(arr.Valor); }
internal bool AgregarArregloParametroDeProc(string nombre, NodoTablaSimbolos.TipoDeDato tipoDeDato, NodoTablaSimbolos.TipoContexto tipoContexto, string nombreProc, string rango) { double rangoNum; if (!double.TryParse(rango, System.Globalization.NumberStyles.Number, new CultureInfo("es-AR"), out rangoNum)) { NodoTablaSimbolos nodoConstante = this.listaNodos.Find(x => x.Nombre.ToUpper().Equals(rango.ToUpper()) && x.EsConstante); rangoNum = nodoConstante.Valor; } //o sea, que sea entero if (Math.Truncate(rangoNum) == rangoNum) { this.listaNodos.Add(new NodoTablaSimbolos(nombre, NodoTablaSimbolos.TipoDeEntrada.Parametro, tipoDeDato, true, false, tipoContexto, nombreProc) { Valor = rangoNum }); return(true); } else { //Esto seria un error, no se puede tener un arreglo con rango decimal return(false); } }
internal bool AgregarArreglo(string nombre, NodoTablaSimbolos.TipoDeDato tdato, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto, string rango, bool esConst) { //Para que no falle pq se puso mal el rango del arrego, si viene en null, se pone en 1 if (rango == null) { rango = "1"; } double rangoNum; if (!double.TryParse(rango, System.Globalization.NumberStyles.Number, new CultureInfo("es-AR"), out rangoNum)) { NodoTablaSimbolos nodoConstante = this.listaNodos.Find(x => x.Nombre.ToUpper().Equals(rango.ToUpper()) && x.EsConstante); rangoNum = nodoConstante.Valor; } //o sea, que sea entero if (Math.Truncate(rangoNum) == rangoNum) { this.listaNodos.Add( new NodoTablaSimbolos(nombre, NodoTablaSimbolos.TipoDeEntrada.Variable, tdato, true, esConst, contexto, nombreContexto) { Valor = rangoNum } ); return(true); } else { //Esto seria un error, no se puede tener un arreglo con rango decimal return(false); } }
//public NodoTablaSimbolos.TipoContexto ObtenerContextoVariable(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto) //{ // NodoTablaSimbolos nodo = this.ObtenerVariable(nombre, contexto, nombreContexto); // return nodo.Contexto; //} //public string ObtenerNombreContextoVariable(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto) //{ // NodoTablaSimbolos nodo = this.ObtenerVariable(nombre, contexto, nombreContexto); // return nodo.NombreContextoLocal; //} internal bool EsModificableValorVarible(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto) { NodoTablaSimbolos nodo = this.ObtenerVariable(nombre, contexto, nombreContexto); return(!nodo.EsConstante); }
internal NodoTablaSimbolos.TipoDeDato ObtenerTipoVariable(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto) { NodoTablaSimbolos nodo = this.ObtenerVariable(nombre, contexto, nombreContexto); return(nodo.TipoDato); }
//public bool ExisteVariable(string nombre) //{ // return this.listaNodos.Exists( // delegate(NodoTablaSimbolos _nodo) // { // return (_nodo.Nombre.Equals(nombre) && // ((_nodo.TipoEntrada == NodoTablaSimbolos.TipoDeEntrada.Variable) || (_nodo.TipoEntrada == NodoTablaSimbolos.TipoDeEntrada.Parametro)) // //&& (_nodo.EsArreglo == false) // ); // } // ); //} //public bool ExisteVariable(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto) //{ // return this.listaNodos.Exists( // delegate(NodoTablaSimbolos _nodo) // { // return (_nodo.Nombre.Equals(nombre) && // ((_nodo.TipoEntrada == NodoTablaSimbolos.TipoDeEntrada.Variable) || (_nodo.TipoEntrada == NodoTablaSimbolos.TipoDeEntrada.Parametro)) && // ((_nodo.Contexto == contexto) && // (_nodo.NombreContextoLocal == nombreContexto)) // ); // } // ); //} internal bool ExisteVariable(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto) { return(ObtenerVariable(nombre, contexto, nombreContexto) != null); }