예제 #1
0
        public Tipos GetTipo(Entorno e)
        {
            Simbolo simbolo = e.Obtener(id);

            if (simbolo != null)
            {
                if (simbolo.IsObject())
                {
                    Objeto  objeto = (Objeto)simbolo;
                    Simbolo aux    = null;
                    foreach (string atributo in atributos)
                    {
                        aux = objeto.GetAtributo(atributo);
                        if (aux == null)
                        {
                            return(Tipos.NULL);
                        }
                        if (aux.IsObject())
                        {
                            objeto = (Objeto)aux;
                        }
                    }
                    if (aux == null)
                    {
                        return(Tipos.NULL);
                    }
                    return(aux.tipo);
                }
            }
            return(Tipos.NULL);
        }
예제 #2
0
        public void Ejecutar(Entorno e)
        {
            Simbolo s = e.Obtener(id);

            if (s == null)
            {
                Console.WriteLine("No existe el identificador " + id + " en este entorno");
                return;
            }
            //Si existe el simbolo
            if (!s.IsObject())
            {
                Console.WriteLine("No se puede acceder a los atributos de " + id + " porque no es un objeto");
                return;
            }
            //Si es un objeto
            Objeto  o   = (Objeto)s;
            Simbolo aux = null;

            foreach (string atributo in atributos)
            {
                aux = o.GetAtributo(atributo);
                if (aux == null)
                {
                    Console.WriteLine("No se puede acceder al atributo " + atributo);
                    return;
                }
                //Si encontro el atributo verifico si es un objeto para actualizar mi objecto de acceso
                if (aux.IsObject())
                {
                    o = (Objeto)aux;
                }
            }
            //Una vez tengo el simbolo solicitado, actualizo su valor

            /******************************************
             *  AQUI ME FALTA LA COMPROBACION DE TIPOS
             *******************************************/

            Object val = valor.GetValor(e);

            if (aux != null)
            {
                aux.valor = val;
            }
        }
예제 #3
0
        public object GetValor(Entorno e)
        {
            Simbolo simbolo = e.Obtener(id);

            if (simbolo == null)
            {
                Console.WriteLine("No se encontro el identificador " + id + "en este entorno D:");
                return(null);
            }

            //Si se encontro el simbolo
            if (!simbolo.IsObject())
            {
                Console.WriteLine("El identificador " + id + " no es un objeto");
                return(null);
            }

            //Si es un objeto
            Objeto  objeto = (Objeto)simbolo;
            Simbolo aux    = null;

            foreach (string atributo in atributos)
            {
                aux = objeto.GetAtributo(atributo);
                if (aux == null)
                {
                    Console.WriteLine("El objeto " + id + " no contiene ningun atributo " + atributo);
                    return(null);
                }
                if (aux.IsObject())
                {
                    objeto = (Objeto)aux;
                }
            }
            //Si nuestro auxiliar es null
            if (aux == null)
            {
                Console.WriteLine("Error al acceder a los atributos de " + id);
                return(null);
            }

            return(aux.valor);
        }