Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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);
        }
Пример #6
0
 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
     });
 }
Пример #7
0
 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));
 }
Пример #8
0
 internal void AgregarConstante(string nombre, NodoTablaSimbolos.TipoDeDato tipo, NodoTablaSimbolos.TipoContexto tipoContexto, string nombreProc, string valorTexto)
 {
     AgregarVariable(nombre, tipo, true, tipoContexto, nombreProc, valorTexto);
 }
Пример #9
0
        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);
        }
Пример #10
0
        //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);
        }
Пример #11
0
        internal double ObtenerTopeArreglo(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto)
        {
            NodoTablaSimbolos arr = ObtenerArreglo(nombre, contexto, nombreContexto);

            return(arr.Valor);
        }
Пример #12
0
        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);
            }
        }
Пример #13
0
        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);
            }
        }
Пример #14
0
        //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);
        }
Пример #15
0
        internal NodoTablaSimbolos.TipoDeDato ObtenerTipoVariable(string nombre, NodoTablaSimbolos.TipoContexto contexto, string nombreContexto)
        {
            NodoTablaSimbolos nodo = this.ObtenerVariable(nombre, contexto, nombreContexto);

            return(nodo.TipoDato);
        }
Пример #16
0
        //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);
        }