Ejemplo n.º 1
0
        }                                                                                                 //TIPO DE EL SIMBOLO

        public Simbolo(String idSimbolo, Boolean esVector, Estatico.Vibililidad visibilidad, String Tipo) //CONSTRUCTOR
        {
            this.idSimbolo   = idSimbolo;
            this.esVector    = esVector;
            this.Visibilidad = visibilidad;
            this.Tipo        = Tipo;
        }
 public Funcion(List <Object> instrucciones, List <NodoParametro> parametros, String idFuncion, String Tipo, Estatico.Vibililidad Visibilidad, int linea, int col, String clase) : base(linea, col, clase)
 {
     this.idFuncion     = idFuncion;
     this.Tipo          = Tipo;
     this.Vibililidad   = Visibilidad;
     this.parametros    = parametros;
     this.instrucciones = instrucciones;
 }
Ejemplo n.º 3
0
 public DeclaracionVar(String idvar, String tipo, Estatico.Vibililidad visibilidad, int linea, int columna, String clase) : base(linea, columna, clase)
 {
     this.expresion   = null;
     this.tipo        = tipo;
     this.visibilidad = visibilidad;
     this.idVar       = idvar;
     this.asignaValor = false;
 }
Ejemplo n.º 4
0
 /*CONSRUCTOR DE UNA DECLARACION DE UNA VARIABLE*/
 public DeclaracionVar(Expresion expresio, String idvar, String tipo, Estatico.Vibililidad visibilidad, int linea, int col, String clase) : base(linea, col, clase)
 {
     this.expresion   = expresio;
     this.idVar       = idvar;
     this.tipo        = tipo;
     this.visibilidad = visibilidad;
     this.asignaValor = true;
 }
Ejemplo n.º 5
0
 public DeclaracionArreglo(String tipo, Estatico.Vibililidad visibilidad, String id, int NumDim, int linea, int col, String clase) : base(linea, col, clase)
 {
     this.typeDefinition = 0;
     this.tipo           = tipo;
     this.visibilidad    = visibilidad;
     this.idArr          = id;
     this.NumDim         = NumDim;
 }
Ejemplo n.º 6
0
 public DeclaracionFuncion(List <object> instrucciones, String tipo, List <NodoParametro> parametros, Estatico.Vibililidad vibililidad, String idfuncion, int linea, int col, String clase) : base(linea, col, clase)
 {
     this.instrucciones = instrucciones;
     this.parametros    = parametros;
     this.tipo          = tipo;
     this.idfuncion     = idfuncion;
     this.visibilidad   = vibililidad;
 }
Ejemplo n.º 7
0
        /*
         * Segundo Constructor que define una clase que si hereda de otra
         *
         */

        public ClasePreAnalizada(String id, Estatico.Vibililidad vibililidad, ParseTreeNode cuerpo, String padre, String origen)
        {
            this.id             = id.ToLower();
            this.vibililidad    = vibililidad;
            this.cuerpoClase    = cuerpo;
            this.padre          = padre.ToLower();
            this.Hereda         = true;
            this.archivoOringen = origen;
        }
Ejemplo n.º 8
0
        /*
         * Primer constructor de una clase que no hereda
         */

        public ClasePreAnalizada(String id, Estatico.Vibililidad vibililidad, ParseTreeNode cuerpo, String origen)
        {
            this.id             = id.ToLower();//LO DEJO EN MINUSCULAS PARA EVITARME CLAVOS
            this.vibililidad    = vibililidad;
            this.cuerpoClase    = cuerpo;
            this.Hereda         = false;
            this.padre          = "";
            this.archivoOringen = origen;
        }
Ejemplo n.º 9
0
        // CLASES
        private Object recorreClases(ParseTreeNode raiz)//DEBE RETORNAR UNA CLASE
        {
            String etiqueta = raiz.ToString();

            switch (etiqueta)
            {
            case "CLASE":                       //DEBO DE RETORNAR EL OBJETO CLASE, EL CUERPO DE LA CLASE ME VA A RETORNAR LA LISTA DE ATRIBUTOS QUE TIENE
            {
                if (raiz.ChildNodes.Count == 6) //SI EXACTAMENTE TIENE 6 HIJOS
                {
                    String idclase            = raiz.ChildNodes.ElementAt(1).Token.Text.ToLower();
                    Estatico.Vibililidad visi = (Estatico.Vibililidad)obtenerVisibilidad(raiz.ChildNodes.ElementAt(2));
                    String            padre   = raiz.ChildNodes.ElementAt(4).Token.Text;
                    ClasePreAnalizada clase   = new ClasePreAnalizada(idclase, visi, raiz.ChildNodes.ElementAt(5), padre, this.archivo);
                    clase.linea = raiz.ChildNodes.ElementAt(0).Token.Location.Line;
                    clase.col   = raiz.ChildNodes.ElementAt(0).Token.Location.Column;
                    return(clase);
                }
                if (raiz.ChildNodes.Count == 5)       //SI EXACTAMENTE TIENE 5 HIJOS
                {
                    String            idClase = raiz.ChildNodes.ElementAt(1).Token.Text.ToLower();
                    String            padre   = raiz.ChildNodes.ElementAt(3).Token.Text;
                    ClasePreAnalizada clase   = new ClasePreAnalizada(idClase, Estatico.Vibililidad.PUBLICO, raiz.ChildNodes.ElementAt(4), padre, this.archivo);
                    clase.linea = raiz.ChildNodes.ElementAt(0).Token.Location.Line;
                    clase.col   = raiz.ChildNodes.ElementAt(0).Token.Location.Column;
                    return(clase);
                }
                if (raiz.ChildNodes.Count == 4)       //SI EXACTAMENTE TIENE 4 HIJOS
                {
                    String idclase             = raiz.ChildNodes.ElementAt(1).Token.Text.ToLower();
                    Estatico.Vibililidad visi  = (Estatico.Vibililidad)obtenerVisibilidad(raiz.ChildNodes.ElementAt(2));
                    ClasePreAnalizada    clase = new ClasePreAnalizada(idclase, visi, raiz.ChildNodes.ElementAt(3), this.archivo);
                    clase.linea = raiz.ChildNodes.ElementAt(0).Token.Location.Line;
                    clase.col   = raiz.ChildNodes.ElementAt(0).Token.Location.Column;
                    return(clase);
                }
                if (raiz.ChildNodes.Count == 3)       //SI EXACTAMENTE TIENE 3 HIJOS
                {
                    /*SI NO TIENE VISIBILIDAD LA CLASE SERA PRIVADA*/
                    String            idclase = raiz.ChildNodes.ElementAt(1).Token.Text.ToLower();
                    ClasePreAnalizada clase   = new ClasePreAnalizada(idclase, Estatico.Vibililidad.PUBLICO, raiz.ChildNodes.ElementAt(2), this.archivo);
                    clase.linea = raiz.ChildNodes.ElementAt(0).Token.Location.Line;
                    clase.col   = raiz.ChildNodes.ElementAt(0).Token.Location.Column;
                    return(clase);
                }
                break;
            }
            }
            return(null);
        }
        }                                //VALOR QUE TIENE LA VARIABLE

        public Variable(String idVariable, String Tipo, Estatico.Vibililidad Visibilidad, Object Valor) : base(idVariable, false, Visibilidad, Tipo)
        {
            this.valor = Valor;
        }
Ejemplo n.º 11
0
 public void setVisibilidad(Estatico.Vibililidad visibilidad)
 {
     this.Visibilidad = visibilidad;
 }
Ejemplo n.º 12
0
 public Arreglo(List <Object> linealizacion, List <int> dimensiones, int dimen, String idSimbolo, bool esVector, Estatico.Vibililidad visibilidad, String tipo) : base(idSimbolo, esVector, visibilidad, tipo)
 {
     this.arbolArreglo   = null;
     this.linealizacion  = linealizacion;
     this.dimensiones    = dimensiones;
     this.numDimensiones = dimen;
     tienaArbol          = false;
 }
Ejemplo n.º 13
0
        public object getValor(Ambito ambito)
        {
            try
            {
                List <Object> valores = getValoresParam(ambito);
                /// GENERO MI CLAVE PARA PODER OBTENER LA FUNCION QUE DESEO
                Clave clave = new Clave(this.id.ToLower(), getNodoParametros(ambito), "");
                /// LLAMO A LA FUNCION QUE DESEO EJECUTAR
                Ambito  aux = AmbitoDeClase(ambito);
                Funcion f   = aux.GetFuncion(clave);
                if (f != null)
                {
                    this.vibililidad = f.Vibililidad;
                    ///CREO EL AMBITO DE LA FUNCION
                    Ambito auxliar = new Ambito(aux, this.clase.ToLower(), ambito.archivo);
                    this.vibililidad = f.Vibililidad;
                    if (this.vibililidad == Estatico.Vibililidad.PROTEGIDO && !(ambito.idAmbito.ToLower().Contains(Estatico.temporal.idAmbito.ToLower())))
                    {
                        return(new Nulo());
                    }
                    ///SETEO LOS PARAMETROS QUE RECIBE
                    auxliar = f.seteaParametrosLocales(auxliar, valores);

                    ///OBTENGO EL VALOR QUE DEFINE
                    Object valor = f.Ejecutar(auxliar);
                    if (valor is NodoReturn)
                    {
                        Object valorReal    = ((NodoReturn)valor).valor;
                        String tipoEsperado = f.Tipo.ToLower();
                        if (tipoEsperado.Equals(((NodoReturn)valor).tipo.ToLower()) || ((NodoReturn)valor).tipo.ToLower().Equals("nulo"))
                        {
                            this.ValorAux = valorReal;
                            return(valorReal);
                        }
                        else
                        {
                            TError error = new TError("Semantico", "El tipo de retorno no coincide: Tipo de Funcion: \"" + tipoEsperado + "\", encontrado: \"" + ((NodoReturn)valor).tipo.ToLower() + "\" | Clase: " + this.clase + " | " + ambito.archivo, this.linea, this.columna, false);
                            Estatico.errores.Add(error);
                            Estatico.ColocaError(error);
                            return(new Nulo());
                        }
                    }
                }
                else if (this.id.ToLower().Equals("buscar"))
                {
                    Simbolo l = (Simbolo)ambito.getSimbolo("cutz");/// :)
                    if (l != null)
                    {
                        Variable v       = (Variable)l;
                        Opciones listado = (Opciones)v.valor;
                        if (valores.Count == 2)
                        {
                            if (valores.ElementAt(1) is int)
                            {
                                Object index1 = valores.ElementAt(0);
                                int    index2 = (int)valores.ElementAt(1);

                                Object val = listado.obtenerDeLista(index1, index2);

                                NodoReturn n = creaNodoReturn(val);

                                this.ValorAux = n.valor;

                                return(n.valor);
                            }
                        }
                    }
                }
                else if (this.id.ToLower().Equals("obtener"))
                {
                    Simbolo l = (Simbolo)ambito.getSimbolo("cutz");
                    if (l != null)
                    {
                        Variable v       = (Variable)l;
                        Opciones listado = (Opciones)v.valor;
                        if (valores.ElementAt(0) is int && valores.ElementAt(1) is int)
                        {
                            int        index1 = (int)valores.ElementAt(0);
                            int        index2 = (int)valores.ElementAt(1);
                            Object     val    = listado.obtenerDeLista(index1, index2);
                            NodoReturn n      = creaNodoReturn(val);

                            this.ValorAux = n.valor;
                            return(n.valor);
                        }
                    }
                }
                else if (this.id.ToLower().Equals("insertar"))
                {
                    Simbolo l = (Simbolo)ambito.getSimbolo("cutz");
                    if (l != null)
                    {
                        Variable v       = (Variable)l;
                        Opciones listado = (Opciones)v.valor;
                        listado.agregarElementos(valores);/// INSERTA ELEMENTOS VACIOS
                        return(new Vacio());
                    }
                }
                else
                {
                    TError error = new TError("Semantico", "No existe funcion: " + this.id + " que reciba parametro: " + getMensajeError(ambito) + " | Clase: " + this.clase + " | " + ambito.archivo, this.linea, this.columna, false);
                    Estatico.errores.Add(error);
                    Estatico.ColocaError(error);
                }
            }
            catch (Exception e)
            {
                TError error = new TError("Ejecucion", "Error al Buscar la funcion, en ejecucion | Erro: " + e.Message, this.linea, this.columna, false);
                Estatico.errores.Add(error);
                Estatico.ColocaError(error);
            }
            return(new Nulo());
        }