/*
         |-------------------------------------------------------------------------------------------------------------------
         | 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);
                }
            }
        }
Example #2
0
        public elementoPolimorfo getConstructoHeredado(lstValores listaValores, token mensaje)
        {
            foreach (elementoPolimorfo temp in listaPolimorfa)
            {
                if (temp.compararParametrosLstValores(listaValores))
                {
                    return(temp);
                }
                //ahora hay que comprobar las llaves de los atributos
            }

            tabla.tablaErrores.insertErrorSemantic("No se encuentra el constructor Heredado: super(" + listaValores.getCadenaParam() + ")", mensaje);
            return(null);
        }
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | 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);
                }
            }
        }
Example #4
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Busca el elemento polimorfo
         |-------------------------------------------------------------------------------------------------------------------
         |
         */


        public elementoPolimorfo getElementoPolimorfo2(token nombre, lstValores listaValores)
        {
            foreach (elementoPolimorfo temp in listaPolimorfa)
            {
                if (nombre.valLower.Equals(temp.nombre.valLower))
                {
                    //ahora hay que validar los parametros


                    if (temp.compararParametrosLstValores(listaValores))
                    {
                        return(temp);
                    }
                    //ahora hay que comprobar las llaves de los atributos
                }
            }

            tabla.tablaErrores.insertErrorSemantic("No se encuentra " + nombre.val + "(" + listaValores.getCadenaParam() + ")", nombre);
            return(null);
        }
Example #5
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);
        }
Example #6
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | EJECUCIÓN DE PRINCIPAL
         |-------------------------------------------------------------------------------------------------------------------
         |
         */



        public void guardarParametrosEnLaTabla(Dictionary <llaveParametro, elementoParametro> lstParametros, lstValores lstParametros2, elementoEntorno elementoEntor)
        {
            if (lstParametros.Count == lstParametros2.listaValores.Count)
            {
                int i = 0;
                foreach (var dic in lstParametros)
                {
                    itemValor parametro2 = lstParametros2.getItemValor(i);



                    //Console.WriteLine("------------------------");
                    //Console.WriteLine("dic.key.dimension-> " + dic.Key.dimension);
                    //Console.WriteLine("parametro2.dimensiones->" + parametro2.dimensiones.Count);

                    if ((dic.Key.dimension == parametro2.dimensiones.Count) && (itemEntorno.validandoTipo(dic.Value.tipo.valLower, parametro2)))
                    {
                        token tNombre = new token(dic.Key.nombre);
                        token tTipo   = new token(dic.Value.tipo.valLower);

                        //println("guardarParametrosEnLaTabla_ tipo->" + tTipo.valLower);
                        token tVisibilidad = new token("privado");

                        //listado de enteros


                        List <int> listaEntero = new List <int>();

                        for (int j = 0; i < dic.Key.dimension; i++)
                        {
                            listaEntero.Add(-1);
                        }

                        itemEntorno varParametro = new itemEntorno(tNombre, tTipo, parametro2, tVisibilidad, listaEntero, tabla);
                        elementoEntor.insertarEntorno(varParametro);
                    }
                    else
                    {
                        Console.WriteLine("[lstPolimorfismo]guardarParametrosEnLaTabla_Son de diferentes en tipo, o en dimensiones, aunque esto ya se tuvo que validar :/");
                    }

                    i++;
                }
            }
            else
            {
                Console.WriteLine("[lstPolimorfismo]guardarParametrosEnLaTabla_Son de diferentes dimensiones, aunque esto ya se tuvo que validar :/");
            }
        }