public override void ejecutar(elementoEntorno elem)
        {
            if (tabla.hayErrores("lstPrincipal_ejecutar"))
            {
                return;
            }

            if (listaPolimorfa.Count > 0)
            {
                elementoPolimorfo temp = listaPolimorfa[0];
                if (temp.LST_CUERPO.nombre.Equals("LST_CUERPO"))
                {
                    _LST_CUERPO val            = (_LST_CUERPO)temp.LST_CUERPO;
                    itemValor   retornoFuncion = new itemValor();

                    retornoFuncion.setTypeVacio();

                    val.ejecutar(elem);
                    imprimir(elem);
                }
            }
            else
            {
                tabla.tablaErrores.insertErrorSemantic("No se encuentra el main", new token());
            }
        }
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | EJECUCIÓN DE METODO  CONSTRUCTOR Heredado
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public void ejecutarConstructorHeredad(lstValores parametros, elementoEntorno tablaEntorno, token mensaje)
        {
            //aqui es donde tengo que buscar si existe
            Console.WriteLine("ejecutando Constructor Heredado:");
            elementoPolimorfo temp = getConstructoHeredado(parametros, mensaje);

            if (temp != null)
            //neuvo entorno
            {
                elementoEntorno hijo1 = new elementoEntorno(tablaEntorno, tabla, "main", tablaEntorno.este);
                guardarParametrosEnLaTabla(temp.lstParametros, parametros, hijo1);


                if (temp.LST_CUERPO.nombre.Equals("LST_CUERPO"))

                /*
                 |----------------------------
                 |  Ejecutando el cuerpo del metodo
                 |-----------------------
                 | Los constructores no retornan nada
                 */
                {
                    _LST_CUERPO val = (_LST_CUERPO)temp.LST_CUERPO;
                    val.ejecutar(hijo1);
                }
            }
        }
Exemple #3
0
        public void cargarConstructor(elementoClase simbolo)

        /*
         |----------------------------
         | Constructor
         |----------------------------
         | Este constructor también lo voy a crear manualmente
         | y me va servir para pasar los parametros que vienen en la pregunta.
         */
        {
            if (hayErrores())
            {
                return;
            }

            token nombreClase = lstAtributos.getToken(1);
            token tipo        = new token("vacio");


            elementoPolimorfo element = new elementoPolimorfo(new token("publico"), tablaSimbolos, tipo, nombreClase, new _LST_CUERPO2("LST_CUERPO2", tablaSimbolos), 0);

            _LST_PARAMETROS parametros = (_LST_PARAMETROS)getNodo("LST_PARAMETROS");

            foreach (elementoPolimorfo tempPolimorfo in parametros.getParametros())
            {
                element.insertarParametro(tempPolimorfo.nombre, tempPolimorfo.tipo, tempPolimorfo.dimension);
            }

            simbolo.lstConstructores.insertarElemento(element);
        }
        public override void ejecutar(elementoClase simbolo)
        {
            if (hayErrores())
            {
                return;
            }


            //Verificando si tengo como hijo a DECLARAR_VARIABLE_SINVISIBI
            if (hay_DECLARAR_VARIABLE_SINVISIBI(simbolo))
            {
                return;
            }

            // println("llego al contructor");

            token tipo   = getTipo();
            token nombre = getIdentificador();
            //nodoModelo LST_CUERPO = getLST_CUERPO();

            token visbilidad = getVisibilidad(simbolo);

            int dimension             = getDimensiones();
            elementoPolimorfo element = new elementoPolimorfo(visbilidad, tablaSimbolos, tipo, nombre, getVAL(), dimension);

            cargarPolimorfismoHijos(element);
            simbolo.lstVariablesGlobales.insertarElemento(element);
        }
Exemple #5
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | FORMULARiO
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public elementoPolimorfo getPolimorfo()
        {
            elementoPolimorfo retorno = null;

            if (hayErrores())
            {
                return(retorno);
            }


            nodoModelo tempNodo = getNodo("TIPO");

            if (tempNodo != null)
            {
                _TIPO      temp  = (_TIPO)tempNodo;
                nodoModelo temp2 = getNodo("VAR_ARREGLO");
                if (temp2 != null)
                {
                    _VAR_ARREGLO tempVar = (_VAR_ARREGLO)temp2;

                    token visibilidad = new token("publico");
                    token tipo        = temp.getTipo();
                    token nombre      = tempVar.getIdentificador();
                    int   dimensiones = tempVar.getDimensiones();
                    retorno = new elementoPolimorfo(visibilidad, tablaSimbolos, tipo, nombre, new _LST_CUERPO("LST_CUERPO", tablaSimbolos), dimensiones);
                    return(retorno);
                }
            }

            return(retorno);
        }
Exemple #6
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Heredando variables
         |-------------------------------------------------------------------------------------------------------------------
         |
         */


        public void heredar(List <elementoPolimorfo> lstPolimorfos)
        {
            /*      elementoPolimorfo element = new elementoPolimorfo(visbilidad, tablaSimbolos, tipo, nombre, getVAL(), dimension);
             *
             *      cargarPolimorfismoHijos(element);
             *      simbolo.lstVariablesGlobales.insertarElemento(element);
             */

            foreach (elementoPolimorfo tempPolimorfo in lstPolimorfos)
            {
                token tipo        = tempPolimorfo.tipo;
                token nombre      = tempPolimorfo.nombre;
                token visibilidad = tempPolimorfo.visibilidad;

                if (visibilidad.valLower.Equals("privado"))
                //los privados no los extiendos
                {
                    Console.WriteLine("Los metodos/var privados no son cargados->:" + nombre.val);
                }
                else
                {
                    int dimension             = tempPolimorfo.dimension;
                    elementoPolimorfo element = new elementoPolimorfo(visibilidad, tabla, tipo, nombre, tempPolimorfo.LST_CUERPO, dimension);
                    //cargo los parámetros
                    element.lstParametros = tempPolimorfo.lstParametros;

                    insertarElementoHeredado(element);
                }
            }
        }
Exemple #7
0
        public void ejecutarRespuesta(elementoClase simbolo)

        /*
         |----------------------------
         | VISIBILIDAD + tRespuesta + sAbreParent + LST_PARAMETROS + sCierraParent + sAbreLlave + LST_CUERPO + sCierraLlave
         */
        {
            if (hayErrores())
            {
                return;
            }

            token tipo   = new token("vacio");
            token nombre = lstAtributos.getToken(0);


            nombre.val      = "_respuesta";
            nombre.valLower = "_respuesta";



            nodoModelo LST_CUERPO = getLST_CUERPO();
            token      visbilidad = getVisibilidad(simbolo);
            int        dimension  = 0;

            elementoPolimorfo element = new elementoPolimorfo(visbilidad, tablaSimbolos, tipo, nombre, LST_CUERPO, dimension);

            cargarPolimorfismoHijos(element);
            simbolo.lstMetodo_funcion.insertarElemento(element);
        }
Exemple #8
0
        public void insertarElemento(elementoPolimorfo elem)
        {
            //tengo que verificar si ya existe validando los parametros

            if (siExiste(elem))//Si existe
            {
                tabla.tablaErrores.insertErrorSyntax("El metodo/funcion  :" + elem.nombre.val + " ya está declarada con los mismos parámetros.", elem.nombre);
            }
            else
            {
                listaPolimorfa.Add(elem);
            }
        }
Exemple #9
0
        public void cargarPolimorfismoHijos(elementoPolimorfo elemento)
        {
            if (hayErrores())
            {
                return;
            }

            foreach (nodoModelo temp in hijos)
            {
                // Console.WriteLine("[nodoModelo]EjecutarHijos_padre:" + nombre + "->hijo:" + temp.nombre);
                temp.cargarPolimorfismo(elemento);
            }
        }
Exemple #10
0
        public void insertarElementoHeredado(elementoPolimorfo elem)
        {
            //tengo que verificar si ya existe validando los parametros

            if (siExiste(elem))//Si existe
            {
                Console.WriteLine("[lstPolimorfismo]InsertandoHeredados  -> Ya existe el mteodo/var/func: " + elem.nombre.val);
                // tabla.tablaErrores.insertErrorSyntax("El metodo/funcion  :" + elem.nombre.val + " ya está declarada con los mismos parámetros.", elem.nombre);
            }
            else
            {
                listaPolimorfa.Add(elem);
            }
        }
Exemple #11
0
        public override void ejecutar(elementoClase simbolo)
        {
            if (hayErrores())
            {
                return;
            }

            token      tipo       = new token("vacio");
            token      nombre     = new token("principal");
            nodoModelo LST_CUERPO = getLST_CUERPO();

            elementoPolimorfo element = new elementoPolimorfo(new token("publico"), tablaSimbolos, tipo, nombre, LST_CUERPO, 0);

            simbolo.lstPrincipal.insertarElemento(element);
        }
        public override void ejecutar(elementoClase simbolo)
        {
            if (hayErrores())
            {
                return;
            }

            token      tipo       = new token("vacio");
            token      nombre     = getIdentificador(simbolo.nombreClase);
            nodoModelo LST_CUERPO = getLST_CUERPO();

            elementoPolimorfo element = new elementoPolimorfo(new token("publico"), tablaSimbolos, tipo, nombre, LST_CUERPO, 0);

            cargarPolimorfismoHijos(element);
            simbolo.lstConstructores.insertarElemento(element);
        }
Exemple #13
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Si existe
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public Boolean siExiste(elementoPolimorfo elem)
        {
            Boolean retorno = false;

            foreach (elementoPolimorfo temp in listaPolimorfa)
            {
                if (elem.nombre.valLower.Equals(temp.nombre.valLower))
                {
                    if (elem.compararParametros(temp.getListaLlaves()))
                    {
                        return(true);
                    }
                    //ahora hay que comprobar las llaves de los atributos
                }
            }

            return(retorno);
        }
Exemple #14
0
        public override void ejecutar(elementoClase simbolo)
        {
            if (hayErrores())
            {
                return;
            }
            // println("llego al contructor");

            token             tipo       = getTipo();
            token             nombre     = getIdentificador();
            nodoModelo        LST_CUERPO = getLST_CUERPO();
            token             visbilidad = getVisibilidad(simbolo);
            int               dimension  = getDimensiones();
            elementoPolimorfo element    = new elementoPolimorfo(visbilidad, tablaSimbolos, tipo, nombre, LST_CUERPO, dimension);

            cargarPolimorfismoHijos(element);
            simbolo.lstMetodo_funcion.insertarElemento(element);
        }
Exemple #15
0
        public void ejecutarOtros(elementoClase simbolo)
        {
            if (hayErrores())
            {
                return;
            }

            token tipo   = new token("vacio");
            token nombre = lstAtributos.getToken(0);

            nodoModelo LST_CUERPO = getLST_CUERPO();
            token      visbilidad = getVisibilidad(simbolo);
            int        dimension  = 0;

            elementoPolimorfo element = new elementoPolimorfo(visbilidad, tablaSimbolos, tipo, nombre, LST_CUERPO, dimension);

            cargarPolimorfismoHijos(element);
            simbolo.lstMetodo_funcion.insertarElemento(element);
        }
Exemple #16
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Primer analisis
         |-------------------------------------------------------------------------------------------------------------------
         |
         */
        public override void ejecutar(elementoClase simbolo)
        {
            if (hayErrores())
            {
                return;
            }
            // println("llego al contructor");

            token      tipo       = new token("vacio");
            token      nombre     = lstAtributos.getToken(1);
            nodoModelo LST_CUERPO = getLST_CUERPO();
            token      visbilidad = new token("publico");
            int        dimension  = 0;

            elementoPolimorfo element = new elementoPolimorfo(visbilidad, tablaSimbolos, tipo, nombre, LST_CUERPO, dimension);

            cargarPolimorfismoHijos(element);
            simbolo.lstMetodo_funcion.insertarElemento(element);
        }
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | EJECUCIÓN DE METODO  CONSTRUCTOR
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public void ejecutarMetodo(token nombre, lstValores parametros, elementoEntorno tablaEntorno)
        {
            //aqui es donde tengo que buscar si existe
            Console.WriteLine("ejecutando Metodo:" + nombre.val);
            elementoPolimorfo temp = getElementoPolimorfo2(nombre, parametros);

            if (temp != null)
            //neuvo entorno
            {
                elementoEntorno hijo1 = new elementoEntorno(tablaEntorno, tabla, "main", tablaEntorno.este);



                if (temp.LST_CUERPO.nombre.Equals("LST_CUERPO"))

                /*
                 |----------------------------
                 |  Ejecutando el cuerpo del metodo
                 |-----------------------
                 | Los constructores no retornan nada
                 */
                {
                    guardarParametrosEnLaTabla(temp.lstParametros, parametros, hijo1);
                    _LST_CUERPO val = (_LST_CUERPO)temp.LST_CUERPO;
                    val.ejecutar(hijo1);
                }
                else if (temp.LST_CUERPO.nombre.Equals("LST_CUERPO2"))

                /*
                 |----------------------------
                 |  Ejecutando el cuerpo del metodo
                 |-----------------------
                 | Los constructores no retornan nada
                 */
                {
                    //cargo los parametros en el ambito global, jejejejeje
                    guardarParametrosEnLaTabla(temp.lstParametros, parametros, tablaEntorno);
                    //_LST_CUERPO2 val = (_LST_CUERPO2)temp.LST_CUERPO;
                    //val.ejecutarConstructor(hijo1, parametros);
                }
            }
        }
Exemple #18
0
        public override void cargarPolimorfismo(elementoPolimorfo elem)
        {
            if (hayErrores())
            {
                return;
            }

            nodoModelo tempNodo = getNodo("TIPO");

            if (tempNodo != null)
            {
                _TIPO      temp  = (_TIPO)tempNodo;
                nodoModelo temp2 = getNodo("VAR_ARREGLO");
                if (temp2 != null)
                {
                    _VAR_ARREGLO tempVar = (_VAR_ARREGLO)temp2;
                    elem.insertarParametro(tempVar.getIdentificador(), temp.getTipo(), tempVar.getDimensiones());
                }
            }
        }
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Para cargar las variables globales prro
         |-------------------------------------------------------------------------------------------------------------------
         |
         */


        public void cargarVariableGlobal(elementoClase simbolo)
        {
            if (hayErrores())
            {
                return;
            }


            token tipo   = getTipo();
            token nombre = getIdentificador();
            //nodoModelo LST_CUERPO = getLST_CUERPO();

            token visbilidad = getVisibilidad(simbolo);

            List <int>        dimension = getDimensiones();
            elementoPolimorfo element   = new elementoPolimorfo(visbilidad, tablaSimbolos, tipo, nombre, getVAL(), dimension.Count);

            cargarPolimorfismoHijos(element);
            simbolo.lstVariablesGlobales.insertarElemento(element);
        }
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | FORMULARiO
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public List <elementoPolimorfo> getParametros()
        {
            List <elementoPolimorfo> lstElementosPolimorfos = new List <elementoPolimorfo>();

            if (hayErrores())
            {
                return(lstElementosPolimorfos);
            }

            foreach (_PARAMETRO param in hijos)
            {
                elementoPolimorfo temp = param.getPolimorfo();
                if (temp != null)
                {
                    lstElementosPolimorfos.Add(temp);
                }
                else
                {
                    println("Formulario, vino un elemento polimorfo nulo prro");
                }
            }
            return(lstElementosPolimorfos);
        }
Exemple #21
0
        /*
         |--------------------------------------------------------------------------
         | Cargando el elemento polimorfo, el que tiene metdos/func/vari
         |--------------------------------------------------------------------------
         |
         */

        public virtual void cargarPolimorfismo(elementoPolimorfo elem)
        {
            cargarPolimorfismoHijos(elem);
        }
Exemple #22
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | EJECUCIÓN DE METODO
         |-------------------------------------------------------------------------------------------------------------------
         |
         */


        public itemValor getMetodoFuncion(token nombre, lstValores parametros, elementoEntorno tablaEntorno, String nombreAmbitoEntorno)
        {
            itemValor retorno = new itemValor();

            retorno.setTypeVacio();

            //aqui es donde tengo que buscar si existe
            Console.WriteLine("ejecutando Metodo:" + nombre.val);
            elementoPolimorfo temp = getElementoPolimorfo2(nombre, parametros);

            if (temp != null)
            //neuvo entorno
            {
                elementoEntorno hijo1 = new elementoEntorno(tablaEntorno, tabla, nombreAmbitoEntorno, tablaEntorno.este);
                guardarParametrosEnLaTabla(temp.lstParametros, parametros, hijo1);


                if (temp.LST_CUERPO.nombre.Equals("LST_CUERPO"))

                /*
                 |----------------------------
                 |  Ejecutando el cuerpo del metodo
                 */

                /*
                 |----------------------------
                 | EJECUTAR
                 |----------------------------
                 | 0 = normal
                 | 1 = return;
                 | 2 = break
                 | 3 = continue
                 | 4 = errores
                 */

                {
                    _LST_CUERPO val = (_LST_CUERPO)temp.LST_CUERPO;

                    itemRetorno result = val.ejecutar(hijo1);

                    if (temp.tipo.valLower.Equals("vacio"))
                    {
                        if (result.isNormal())//que es el normal
                        {
                        }
                        else if (result.isRetorno())
                        {
                            if (result.valor.isTypeVacio())
                            //fue el return normla, sin expresion
                            {
                            }
                            else
                            {
                                tabla.tablaErrores.insertErrorSemantic("El metodo :" + temp.nombre.val + " está declarado como vacio, pero se retorno una expresión", temp.nombre);
                            }
                        }
                        else
                        {
                        }
                    }
                    else

                    /*
                     | 0 = normal
                     | 1 = return;
                     | 2 = break
                     | 3 = continue
                     | 4 = errores
                     */
                    {
                        if (result.isNormal())
                        {
                            tabla.tablaErrores.insertErrorSemantic("El metodo :" + temp.nombre.val + " debe de retorar un valor", temp.nombre);
                        }
                        else if (result.isRetorno())
                        {
                            if (temp.dimension == result.valor.dimensiones.Count)
                            {
                                //para los tipos
                                if (itemEntorno.validandoTipo(temp.tipo.valLower, result.valor))
                                {
                                    return(result.valor);
                                }
                                else
                                {
                                    tabla.tablaErrores.insertErrorSemantic("El metodo :" + temp.nombre.val + " es de tipo :" + temp.tipo.val + " sin embargo tiene un retorno de tipo: " + result.valor.getTipo(), temp.nombre);
                                    return(retorno);
                                }
                            }
                            else
                            {
                                tabla.tablaErrores.insertErrorSemantic("El metodo :" + temp.nombre.val + " es de dimensión :" + temp.dimension + " sin embargo tiene un retorno de dimensión: " + result.valor.dimensiones.Count, temp.nombre);
                                return(retorno);
                            }
                        }
                        else
                        {
                        }
                    }

                    ///hay que comparar el retorno con el tipo definido
                }

                //Console.WriteLine("---------------------------Imprimiendo el metodo Funcion-------------------------");
                //hijo1.imprimir();
            }

            return(retorno);
        }
 public override void cargarPolimorfismo(elementoPolimorfo elem)
 {
     //para no seguir ejecutando
 }