public override void ejecutar(elementoEntorno elem)
        {
            foreach (elementoPolimorfo temp in listaPolimorfa)
            {
                if (temp.LST_CUERPO.nombre.Equals("VAL"))
                {
                    if (tabla.hayErrores("lstVariablesGlobales_ejecutar"))
                    {
                        return;
                    }

                    _VAL        val = (_VAL)temp.LST_CUERPO;
                    itemEntorno it  = new itemEntorno(temp.nombre, temp.tipo, val.getValor(elem, temp.tipo), temp.visibilidad, temp.getDimension(), tabla);
                    elem.insertarEntorno(it);
                }
                else
                {
                    println("vienen nulos");

                    itemEntorno it = new itemEntorno(temp.nombre, temp.tipo, new itemValor(), temp.visibilidad, temp.getDimension(), tabla);
                    elem.insertarEntorno(it);
                    //hay que asignarle el valor nulo
                    //println("la variable no tiene valor");
                }
            }
        }
示例#2
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 :/");
            }
        }
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | EJECUCIÓN FINAL
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public override itemRetorno ejecutar(elementoEntorno tablaEntornos)

        /*
         |----------------------------
         | EJECUTAR
         |----------------------------
         | 0= normal
         | 1 = return;
         | 2 = break
         | 3 = continue
         | 4 = errores
         */
        {
            itemRetorno retorno = new itemRetorno(0);

            //ya estoy recibiendo la tabla donde debo trabajar prro
            if (hayErrores())
            {
                return(retorno);
            }

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

            token      visbilidad = new token("privado");
            List <int> dimension  = getDimensiones();

            _VAL val = getNodoVAL();

            if (val != null)
            {
                //se estan guardando valores en la variable

                itemEntorno it = new itemEntorno(nombre, tipo, val.getValor(tablaEntornos, tipo), visbilidad, dimension, tablaSimbolos);
                tablaEntornos.insertarEntorno(it);
            }
            else
            {
                //Se declaro la variable pero el valor es nulo
                itemEntorno it = new itemEntorno(nombre, tipo, new itemValor(), visbilidad, dimension, tablaSimbolos);
                tablaEntornos.insertarEntorno(it);
            }

            return(retorno);
        }
示例#4
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Funciones
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        /* public void asignarValor(itemValor destino, itemValor valor, token tokIgual)
         * {
         *
         *   if (destino.dimensiones.Count > 0)
         *   {
         *       if (destino.dimensiones.Count == valor.dimensiones.Count)
         *       {
         *           if (validandoTipo(destino.getTipo(), valor.getTipo()))
         *           {
         *
         *               //aquí se hace la asignación
         *               destino = valor;
         *           }
         *           {
         *               tablaSimbolos.tablaErrores.insertErrorSemantic("Se está intentando guardar en una variable de tipo " + destino.getTipo() + ", un valor de tipo " + valor.getTipo(), tokIgual);
         *
         *           }
         *       }
         *       else
         *       {
         *           tablaSimbolos.tablaErrores.insertErrorSemantic("Se esta recibiendo una dimensión :" + valor.dimensiones.Count + " para asignarlo a la matriz :  de dimension:" + destino.dimensiones.Count, tokIgual);
         *       }
         *   }
         *   else
         *   {
         *       if (valor.dimensiones.Count != 0)
         *       {
         *           tablaSimbolos.tablaErrores.insertErrorSemantic("Se está intentando guardar en la variable  de tipo " + destino.getTipo() + ", una matriz de dimension : " + valor.dimensiones.Count, tokIgual);
         *       }
         *       else if (validandoTipo(destino.getTipo(), valor.getTipo()))
         *       {
         *
         *           //aquí se hace la asignación
         *           destino = valor;
         *       }
         *       else
         *       {
         *           tablaSimbolos.tablaErrores.insertErrorSemantic("Se está intentando guardar en una variable de tipo " + destino.getTipo() + ", un valor de tipo " + valor.getTipo(), tokIgual);
         *       }
         *   }
         *
         * }*/


        public void asignarValor(itemEntorno destino, itemValor valor)
        {
            //validando si lo que estoy esperando es un arreglo

            if (destino.dimension.Count > 0)
            {
                if (destino.dimension.Count == valor.dimensiones.Count)
                {
                    if (validandoTipo(destino.tipo.valLower, valor.getTipo()))
                    {
                        //aquí le asigno el valor
                        destino.valor = valor;
                    }
                    else
                    {
                        tablaSimbolos.tablaErrores.insertErrorSemantic("Se está intentando guardar en :" + destino.nombre.val + " de tipo " + destino.tipo.valLower + ", un valor de tipo " + valor.getTipo(), destino.nombre);
                    }
                }
                else
                {
                    tablaSimbolos.tablaErrores.insertErrorSemantic("Se esta recibiendo :" + valor.dimensiones.Count + " en la matriz : " + destino.nombre.val + " de dimension:" + destino.dimension.Count, destino.nombre);
                }
            }
            else
            {
                if (valor.dimensiones.Count != 0)
                {
                    tablaSimbolos.tablaErrores.insertErrorSemantic("Se está intentando guardar en la variable :" + destino.nombre.val + " de tipo " + destino.tipo.valLower + ", una matriz de dimension : " + valor.dimensiones.Count, destino.nombre);
                }
                else if (validandoTipo(destino.tipo.valLower, valor.getTipo()))
                {
                    //aquí le asigno el valor

                    destino.valor = valor;
                }
                else
                {
                    tablaSimbolos.tablaErrores.insertErrorSemantic("Se está intentando guardar en :" + destino.nombre.val + " de tipo " + destino.tipo.valLower + ", un valor de tipo " + valor.getTipo(), destino.nombre);

                    //error semantico, se está intentando asiganar un valor diferente al declarado por la variable
                }
            }
        }
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Funciones
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public itemValor getValId(token idVal, elementoEntorno elem)
        // aquí hay que buscar dentro de la tabla de simbolos y devoler el valor, e ir buscando
        // hacia atraás para encontral el id
        {
            itemValor retorno = new itemValor();

            retorno.setTypeNulo();


            itemEntorno et = elem.getItemValor(idVal.valLower);

            if (et != null)
            {
                return(et.valor);
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("La variable : " + idVal.val + "no se encuentra en el ambito correcto para su acceso, no se ha declarado  o no tiene permisos para acceder a ella", idVal);
            }

            return(retorno);
        }
示例#6
0
        public void asignarValorMatriz(itemEntorno destino, itemValor valor)
        {
            //validando si lo que estoy esperando es un arreglo

            if (destino.dimension.Count > 0)
            {
                if (destino.dimension.Count == destino.lstDimensionesAcceso.Count)
                {
                    if (validandoTipo(destino.tipo.valLower, valor.getTipo()))
                    {
                        int indiceFinal = indiceMapeado(destino.dimension, destino.lstDimensionesAcceso, destino.nombre);
                        if (indiceFinal > -1)
                        {
                            if (indiceFinal < destino.valor.arrayValores.Count)
                            {
                                destino.valor.arrayValores[indiceFinal] = valor;
                            }
                            else
                            {
                                tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede acceder a la posición  de la matriz: " + destino.nombre.val, destino.nombre);
                            }
                        }
                    }
                    else
                    {
                        tablaSimbolos.tablaErrores.insertErrorSemantic("Se está intentando guardar en :" + destino.nombre.val + " de tipo " + destino.tipo.valLower + ", un valor de tipo " + valor.getTipo(), destino.nombre);
                    }
                }
                else
                {
                    tablaSimbolos.tablaErrores.insertErrorSemantic("Se esta recibiendo :" + valor.dimensiones.Count + " en la matriz : " + destino.nombre.val + " de dimension:" + destino.dimension.Count, destino.nombre);
                }
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("Se está intentando acceder a una matriz  en una variable  :" + destino.nombre.val + "que no lo es.", destino.nombre);
            }
        }
示例#7
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | EJECUCIÓN FINAL
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public override itemRetorno ejecutar(elementoEntorno tablaEntornos)

        /*
         |----------------------------
         | EJECUTAR
         |----------------------------
         | 0= normal
         | 1 = return;
         | 2 = break
         | 3 = continue
         | 4 = errores
         */
        {
            itemRetorno retorno = new itemRetorno(0);

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



            if (hijos.Count == 2)

            /*
             |----------------------------
             |  ID_VAR_FUNC + VAL
             */

            {
                //PUNTERO DONDE VOY A GUARDAR EL VALOR
                _ID_VAR_FUNC nodoFunc = (_ID_VAR_FUNC)getNodo("ID_VAR_FUNC");
                itemEntorno  destino  = nodoFunc.getDestino(tablaEntornos);


                //AHORA OBTENGO EL VALOR
                _VAL nodoVal = (_VAL)getNodo("VAL");
                if (nodoVal != null)
                {
                    if (destino != null)
                    {
                        itemValor valor = nodoVal.getValor(tablaEntornos, destino.tipo);
                        if (destino.lstDimensionesAcceso.Count > 0)
                        //viene la posición de un arreglo
                        {
                            asignarValorMatriz(destino, valor);
                        }
                        else
                        {
                            asignarValor(destino, valor);
                        }
                    }
                    else
                    {
                        println("Me retorno un itemEntorno vacio, no podré asignar la variable prro");
                    }
                }
                else
                {
                    println("no tiene nodo VAl");
                }
            }

            else if (hijos.Count == 1)
            {
                if (lstAtributos.getToken(0).valLower.Equals("+"))

                /*
                 |----------------------------
                 |  ID_VAR_FUNC + sMas + sMas
                 */
                {
                    if (hayErrores())
                    {
                        return(retorno);
                    }

                    _ID_VAR_FUNC nodoFunc = (_ID_VAR_FUNC)getNodo("ID_VAR_FUNC");
                    itemEntorno  destino  = nodoFunc.getDestino(tablaEntornos);



                    if (destino.lstDimensionesAcceso.Count > 0)
                    //viene la posición de un arreglo
                    {
                        tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede incrementar la matriz " + destino.nombre.val + " de tipo: " + destino.tipo.valLower, destino.nombre);
                    }
                    else
                    {
                        itemValor valor  = nodoFunc.getValor(tablaEntornos);
                        itemValor valor2 = new itemValor();
                        valor2.setValue(1);

                        suma sumatoria = new suma(new _E("hijo1", tablaSimbolos), new _E("hijo2", tablaSimbolos), tablaSimbolos, lstAtributos.getToken(0));

                        itemValor resultado = sumatoria.opSumaExterna(tablaEntornos, valor, valor2);

                        Object ObjParseado = resultado.getValorParseado(destino.tipo.valLower);
                        if (ObjParseado != null)
                        {
                            destino.valor.valor = ObjParseado;
                            return(retorno);
                        }
                        else
                        {
                            tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede asignar un tipo :" + sumatoria.GetType() + " a la variable " + destino.nombre.val + " de tipo: " + destino.tipo.valLower, destino.nombre);
                            return(retorno);
                        }
                    }
                }
                else

                /*
                 |----------------------------
                 |  ID_VAR_FUNC + smenos + smenos
                 */
                {
                    if (hayErrores())
                    {
                        return(retorno);
                    }

                    _ID_VAR_FUNC nodoFunc = (_ID_VAR_FUNC)getNodo("ID_VAR_FUNC");
                    itemEntorno  destino  = nodoFunc.getDestino(tablaEntornos);



                    if (destino.lstDimensionesAcceso.Count > 0)
                    //viene la posición de un arreglo
                    {
                        tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede incrementar la matriz " + destino.nombre.val + " de tipo: " + destino.tipo.valLower, destino.nombre);
                    }
                    else
                    {
                        itemValor valor  = nodoFunc.getValor(tablaEntornos);
                        itemValor valor2 = new itemValor();
                        valor2.setValue(1);

                        resta sumatoria = new resta(new _E("hijo1", tablaSimbolos), new _E("hijo2", tablaSimbolos), tablaSimbolos, lstAtributos.getToken(0));

                        itemValor resultado = sumatoria.opRestaExterna(tablaEntornos, valor, valor2);

                        Object ObjParseado = resultado.getValorParseado(destino.tipo.valLower);
                        if (ObjParseado != null)
                        {
                            destino.valor.valor = ObjParseado;
                            return(retorno);
                        }
                        else
                        {
                            tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede asignar un tipo :" + sumatoria.GetType() + " a la variable " + destino.nombre.val + " de tipo: " + destino.tipo.valLower, destino.nombre);
                            return(retorno);
                        }
                    }
                }
            }

            return(retorno);
        }
示例#8
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | EJECUCIÓN FINAL
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public itemEntorno getDestino(elementoEntorno elementoEntorno)
        {
            itemEntorno retorno = null;

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


            if (lstAtributos.listaAtributos.Count == 0)

            /*
             |----------------------------
             |  ID_VAR_FUNC + LST_PUNTOSP
             */
            {
                #region reg1
                nodoModelo idVar = getNodo("ID_VAR_FUNC");
                if (idVar != null)
                {
                    nodoModelo lstPuntos = getNodo("LST_PUNTOSP");
                    if (lstPuntos != null)
                    {
                        _ID_VAR_FUNC temp1  = (_ID_VAR_FUNC)idVar;
                        _LST_PUNTOSP puntos = (_LST_PUNTOSP)lstPuntos;


                        itemValor   te1 = temp1.getValor(elementoEntorno);
                        itemEntorno te2 = puntos.getDestino(elementoEntorno, te1);
                        return(te2);

                        //tengo que obtener el objeto de id_var_func
                    }
                }
                #endregion
            }

            else if (lstAtributos.listaAtributos.Count == 1)
            {
                if (hijos.Count > 0)

                /*
                 |----------------------------
                 | valId + LST_CORCHETES_VAL
                 |------------
                 | Lst_Corchtes tiene que retornar una lista de tipo entero
                 |
                 */
                {
                    #region reg2

                    String item1     = lstAtributos.listaAtributos[0].nombretoken;
                    token  nombreVar = lstAtributos.getToken(0);
                    if (item1.Equals("valId"))

                    {
                        _LST_CORCHETES_VAL lstCorchetes = (_LST_CORCHETES_VAL)getNodo("LST_CORCHETES_VAL");
                        return(getEntornoId(lstAtributos.listaAtributos[0].tok, elementoEntorno, lstCorchetes.getLstInt(elementoEntorno, nombreVar)));
                    }
                    #endregion
                }
                else

                /*
                 |----------------------------
                 | valId
                 */
                {
                    String item1 = lstAtributos.listaAtributos[0].nombretoken;

                    if (item1.Equals("valId"))

                    {
                        return(getEntornoId(lstAtributos.listaAtributos[0].tok, elementoEntorno, new List <int>()));
                    }
                }
            }
            else if (lstAtributos.listaAtributos.Count == 3)
            {
                String item1 = lstAtributos.listaAtributos[0].nombretoken;
                String item2 = lstAtributos.listaAtributos[1].nombretoken;
                String item3 = lstAtributos.listaAtributos[2].nombretoken;

                if (item1.Equals("este") && item2.Equals(".") && item3.Equals("valId"))
                {
                    if (hijos.Count > 0)

                    /*
                     |----------------------------
                     |  tEste + sPunto + valId  + LST_CORCHETES_VAL
                     */
                    {
                        #region reg4


                        String valId     = lstAtributos.listaAtributos[2].nombretoken;
                        token  nombreVar = lstAtributos.getToken(2);
                        if (valId.Equals("valId"))

                        {
                            _LST_CORCHETES_VAL lstCorchetes = (_LST_CORCHETES_VAL)getNodo("LST_CORCHETES_VAL");
                            return(getEntornoId(lstAtributos.listaAtributos[2].tok, elementoEntorno.este.tablaEntorno.raiz, lstCorchetes.getLstInt(elementoEntorno, nombreVar)));
                        }

                        #endregion
                    }
                    else

                    /*
                     |----------------------------
                     |  tEste + sPunto + valId
                     */
                    {
                        String valId = lstAtributos.listaAtributos[2].nombretoken;

                        if (valId.Equals("valId"))

                        {
                            return(getEntornoId(lstAtributos.listaAtributos[2].tok, elementoEntorno.este.tablaEntorno.raiz, new List <int>()));
                        }
                    }
                }

                if (item1.Equals("valId") && item2.Equals("(") && item3.Equals(")"))
                {
                    if (hijos.Count == 2)

                    /*
                     |----------------------------
                     |  valId + sAbreParent + LST_VAL + sCierraParent + LST_CORCHETES_VAL;
                     |------------------------
                     * Primero ejecuto el metodo que me tiene que retornar siempre dimension>0
                     * luego enviarle ese valor, para extraer lo que se quiere
                     */
                    {
                        tablaSimbolos.tablaErrores.insertErrorSemantic("No se le puede asignar un valor a la expresión metodo" + lstAtributos.getToken(0).val + "()[] ", lstAtributos.getToken(0));
                    }

                    if (hijos.Count == 1)
                    {
                        String nombreHijo = hijos[0].nombre;
                        if (nombreHijo.Equals("LST_VAL"))

                        /*
                         |----------------------------
                         |  valId + sAbreParent + LST_VAL + sCierraParent;
                         |-------------
                         | Esto es un metodo
                         */
                        {
                            tablaSimbolos.tablaErrores.insertErrorSemantic("No se le puede asignar un valor a la expresión metodo" + lstAtributos.getToken(0).val + "()", lstAtributos.getToken(0));
                        }
                    }
                }
            }
            else if (lstAtributos.listaAtributos.Count == 5)
            {
                String item1 = lstAtributos.listaAtributos[0].nombretoken;
                String item2 = lstAtributos.listaAtributos[1].nombretoken;
                String item3 = lstAtributos.listaAtributos[2].nombretoken;

                if (item1.Equals("este") && item2.Equals(".") && item3.Equals("valId"))
                {
                    if (hijos.Count == 2)

                    /*
                     |----------------------------
                     | tEste + sPunto + valId + sAbreParent + LST_VAL + sCierraParent + LST_CORCHETES_VAL;
                     */
                    {
                        tablaSimbolos.tablaErrores.insertErrorSemantic("No se le puede asignar un valor a la expresión metodo este." + lstAtributos.getToken(0).val + "()[] ", lstAtributos.getToken(0));
                    }
                    else if (hijos.Count == 1)
                    {
                        if (hijos[0].nombre.Equals("LST_VAL"))

                        /*
                         |----------------------------
                         | tEste + sPunto + valId + sAbreParent + LST_VAL + sCierraParent
                         */
                        {
                            tablaSimbolos.tablaErrores.insertErrorSemantic("No se le puede asignar un valor a la expresión metodo este." + lstAtributos.getToken(0).val + "() ", lstAtributos.getToken(0));
                        }
                    }
                }
            }
            return(retorno);
        }
        public itemValor getValIdCorchetes(token idVal, elementoEntorno elem, List <int> lstIndex)

        /*
         |----------------------------
         | getValIdCorchetes
         */
        {
            itemValor retorno = new itemValor();

            retorno.setTypeNulo();

            itemEntorno et = elem.getItemValor(idVal.valLower);

            if (et != null)
            {
                if (et.dimension.Count == lstIndex.Count)
                {
                    int indiceFinal = 1;
                    //validando si no se salió de los indices
                    for (int i = 0; i < et.dimension.Count; i++)
                    {
                        if (lstIndex[i] < et.dimension[i])
                        {
                            if (i == 0)
                            //inicilizo la lista
                            {
                                indiceFinal = lstIndex[i];
                            }
                            else
                            {
                                indiceFinal = indiceFinal * et.dimension[i] + lstIndex[i];
                            }
                        }
                        else
                        {
                            tablaSimbolos.tablaErrores.insertErrorSemantic("El índice está fuera de rango de la matriz: " + idVal.val + " , rango máximo permitido para la dimensión:" + i + " es " + (et.dimension[i] - 1), idVal);
                            return(retorno);
                        }
                    }

                    //validando que no salga del arreglo de adentro

                    if (indiceFinal < et.valor.arrayValores.Count)
                    {
                        return(et.valor.arrayValores[indiceFinal]);
                    }
                    else
                    {
                        tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede acceder a la posición  de la matriz: " + idVal.val, idVal);
                        return(retorno);
                    }
                    //println("El indice al que quiero acceder es al indice :" + indiceFinal + " de la matriz :" + idVal.val);
                }
                else
                {
                    tablaSimbolos.tablaErrores.insertErrorSemantic("No coinciden las dimensiones en la matriz: " + idVal.val + " para acceder a ella", idVal);
                    return(retorno);
                }
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("La variable : " + idVal.val + "no se encuentra en el ambito correcto para su acceso, no se ha declarado  o no tiene permisos para acceder a ella", idVal);
            }
            return(retorno);
        }
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | EJECUCIÓN FINAL
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public itemValor getValor(elementoEntorno elementoEntorno)
        {
            itemValor retorno = new itemValor();

            retorno.setTypeVacio();

            retorno.setTypeVacio(); //no puede retornar nada, es un metodo mahe



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


            if (lstAtributos.listaAtributos.Count == 0)

            /*
             |----------------------------
             |  ID_VAR_FUNC + LST_PUNTOSP
             */
            {
                #region reg1
                nodoModelo idVar = getNodo("ID_VAR_FUNC");
                if (idVar != null)
                {
                    nodoModelo lstPuntos = getNodo("LST_PUNTOSP");
                    if (lstPuntos != null)
                    {
                        _ID_VAR_FUNC temp1  = (_ID_VAR_FUNC)idVar;
                        _LST_PUNTOSP puntos = (_LST_PUNTOSP)lstPuntos;


                        itemValor te1 = temp1.getValor(elementoEntorno);
                        itemValor te2 = puntos.getValor(elementoEntorno, te1);


                        //aquí puedo revisar si fue una pregunta para poder guardarla en el entorno

                        /* if (te2.isTypeObjeto())
                         * {
                         *   if (te2.nombreObjeto.Equals("form"))
                         *   {
                         *
                         *       //guardando la pregunta dentro de la tabla de simbolos, jejejejejejejejejejejejejeje
                         *       itemEntorno sim = new itemEntorno(te1.nombrePregunta, te1.nombrePregunta, te1, new token("publico"), new List<int>(), tablaSimbolos);
                         *       elementoEntorno.insertarEntorno(sim);
                         *
                         *
                         *       ///ejecuto el metodo ejecutar final, es el que muestra las preguntas
                         *       //elementoEntorno.este.ejecutarMetodoFuncion(new token("ejecutarfinal"), new lstValores(), sim.valor.getObjeto().tablaEntorno.raiz);
                         *       //println("entorno de ejecutar final ===================================0");
                         *
                         *       // sim.valor.getObjeto().tablaEntorno.raiz.este.ejecutarMetodoFuncion(new token("ejecutarfinal"), new lstValores(), sim.valor.getObjeto().tablaEntorno.raiz);
                         *
                         *
                         *   }
                         * }
                         *
                         * if(te1.nombrePregunta.esPregunta)
                         * {
                         *
                         *   if (temp1.lstAtributos.listaAtributos.Count > 0)
                         *   {
                         *       String nombreToken = temp1.lstAtributos.listaAtributos[0].nombretoken;
                         *
                         *       if (nombreToken.Equals("valId"))
                         *       {
                         *           //ahora ya que revisar que se encuentre entre la lsita de preguntas.
                         *           //     elementoEntorno.este.cuerpoClase.ls
                         *           if (tablaSimbolos.esPregunta(temp1.lstAtributos.getToken(0).valLower))
                         *           {
                         *               //es pregunta
                         *               itemEntorno sim = new itemEntorno(te1.nombrePregunta, te1.nombrePregunta, te1, new token("publico"), new List<int>(), tablaSimbolos);
                         *               elementoEntorno.insertarEntorno(sim);
                         *
                         *           }
                         *
                         *       }
                         *
                         *   }
                         *
                         *
                         * }
                         */

                        return(te2);

                        //tengo que obtener el objeto de id_var_func
                    }
                }
                #endregion
            }

            else if (lstAtributos.listaAtributos.Count == 1)
            {
                if (hijos.Count > 0)

                /*
                 |----------------------------
                 | valId + LST_CORCHETES_VAL
                 |------------
                 | Lst_Corchtes tiene que retornar una lista de tipo entero
                 |
                 */
                {
                    #region reg2
                    token      nombreVar  = lstAtributos.getToken(0);
                    nodoModelo nodoLstCor = getNodo("LST_CORCHETES_VAL");
                    if (nodoLstCor != null)
                    {
                        _LST_CORCHETES_VAL lstCorchetes = (_LST_CORCHETES_VAL)nodoLstCor;
                        List <int>         listaEntero  = lstCorchetes.getLstInt(elementoEntorno, nombreVar);
                        String             item1        = lstAtributos.listaAtributos[0].nombretoken;
                        //mapeando el indice

                        if (item1.Equals("valId"))

                        {
                            return(getValIdCorchetes(lstAtributos.listaAtributos[0].tok, elementoEntorno, listaEntero));
                        }
                        else
                        {
                            println(" valId + LST_CORCHETES_VAL -> No viene val id");
                        }
                    }
                    #endregion
                }
                else

                /*
                 |----------------------------
                 | valId
                 */
                {
                    #region reg3
                    String item1 = lstAtributos.listaAtributos[0].nombretoken;

                    if (item1.Equals("valId"))

                    {
                        return(getValId(lstAtributos.listaAtributos[0].tok, elementoEntorno));
                    }
                    #endregion
                }
            }

            else if (lstAtributos.listaAtributos.Count == 3)
            {
                String item1 = lstAtributos.listaAtributos[0].nombretoken;
                String item2 = lstAtributos.listaAtributos[1].nombretoken;
                String item3 = lstAtributos.listaAtributos[2].nombretoken;

                if (item1.Equals("este") && item2.Equals(".") && item3.Equals("valId"))
                {
                    if (hijos.Count > 0)

                    /*
                     |----------------------------
                     |  tEste + sPunto + valId  + LST_CORCHETES_VAL
                     */
                    {
                        #region reg4
                        token      nombreVar  = lstAtributos.getToken(2);
                        nodoModelo nodoLstCor = getNodo("LST_CORCHETES_VAL");
                        if (nodoLstCor != null)
                        {
                            _LST_CORCHETES_VAL lstCorchetes = (_LST_CORCHETES_VAL)nodoLstCor;
                            List <int>         listaEntero  = lstCorchetes.getLstInt(elementoEntorno, nombreVar);
                            String             item11       = lstAtributos.listaAtributos[2].nombretoken;
                            //mapeando el indice

                            if (item11.Equals("valId"))

                            {
                                return(getValIdCorchetes(lstAtributos.listaAtributos[2].tok, elementoEntorno.este.tablaEntorno.raiz, listaEntero));
                            }
                            else
                            {
                                println(" tEste + sPunto + valId  + LST_CORCHETES_VAL -> No viene val id");
                            }
                        }
                        #endregion
                    }
                    else

                    /*
                     |----------------------------
                     |  tEste + sPunto + valId
                     */
                    {
                        #region cuerpo
                        String esteId = lstAtributos.listaAtributos[2].nombretoken;

                        if (esteId.Equals("valId"))

                        {
                            return(getValId(lstAtributos.listaAtributos[2].tok, elementoEntorno.este.tablaEntorno.raiz));
                        }
                        else
                        {
                            println("(tEste + sPunto + valId) No se encontró valId");
                        }

                        #endregion
                    }
                }
                if (item1.Equals("valId") && item2.Equals("(") && item3.Equals(")"))
                {
                    if (hijos.Count == 2)

                    /*
                     |----------------------------
                     |  valId + sAbreParent + LST_VAL + sCierraParent + LST_CORCHETES_VAL;
                     |------------------------
                     * Primero ejecuto el metodo que me tiene que retornar siempre dimension>0
                     * luego enviarle ese valor, para extraer lo que se quiere
                     */
                    {
                        #region cuerpo
                        if (hayErrores())
                        {
                            return(retorno);
                        }

                        String esteId = lstAtributos.listaAtributos[0].nombretoken;

                        if (esteId.Equals("valId"))

                        {
                            //esto es del metodo
                            nodoModelo nodoTemp               = getNodo("LST_VAL");
                            _LST_VAL   lstParametros          = (_LST_VAL)nodoTemp;
                            itemValor  itemValorRetornoMetodo = elementoEntorno.este.ejecutarMetodoFuncion(lstAtributos.getToken(0), lstParametros.getLstValores(elementoEntorno), elementoEntorno.este.tablaEntorno.raiz);

                            //esto es de la parte del arreglo
                            nodoModelo         nodoLstCorchetes = getNodo("LST_CORCHETES_VAL");
                            _LST_CORCHETES_VAL lstCorchetes     = (_LST_CORCHETES_VAL)nodoLstCorchetes;
                            List <int>         listaEntero      = lstCorchetes.getLstInt(elementoEntorno, lstAtributos.listaAtributos[0].tok);

                            if (itemValorRetornoMetodo.dimensiones.Count == listaEntero.Count)
                            //tienen la misma dimension
                            {
                                println("getValCorchetes");
                                return(getValCorchetes(lstAtributos.getToken(0), elementoEntorno, listaEntero, itemValorRetornoMetodo));
                            }
                            else
                            //no tienen la misma dimensión.
                            {
                                tablaSimbolos.tablaErrores.insertErrorSemantic("El metodo: " + lstAtributos.getToken(0).val + " no devuelve la misma cantidad de dimensiones que a las que se quiere acceder", lstAtributos.getToken(0));
                                return(retorno);
                            }
                        }
                        else
                        {
                            println("valId + sAbreParent + LST_VAL + sCierraParent; -> no viene valId");
                            return(retorno);
                        }


                        #endregion
                    }

                    if (hijos.Count == 1)
                    {
                        String nombreHijo = hijos[0].nombre;
                        if (nombreHijo.Equals("LST_CORCHETES_VAL"))

                        /*
                         |----------------------------
                         |  valId + sAbreParent + sCierraParent + LST_CORCHETES_VAL;
                         */
                        {
                            #region cuerpo
                            if (hayErrores())
                            {
                                return(retorno);
                            }

                            String esteId = lstAtributos.listaAtributos[0].nombretoken;

                            if (esteId.Equals("valId"))

                            {
                                //esto es del metodo
                                nodoModelo nodoTemp      = getNodo("LST_VAL");
                                lstValores sinParametros = new lstValores();

                                itemValor itemValorRetornoMetodo = elementoEntorno.este.ejecutarMetodoFuncion(lstAtributos.getToken(0), sinParametros, elementoEntorno.este.tablaEntorno.raiz);

                                //esto es de la parte del arreglo
                                nodoModelo         nodoLstCorchetes = getNodo("LST_CORCHETES_VAL");
                                _LST_CORCHETES_VAL lstCorchetes     = (_LST_CORCHETES_VAL)nodoLstCorchetes;
                                List <int>         listaEntero      = lstCorchetes.getLstInt(elementoEntorno, lstAtributos.listaAtributos[0].tok);

                                if (itemValorRetornoMetodo.dimensiones.Count == listaEntero.Count)
                                //tienen la misma dimension
                                {
                                    println("getValCorchetes");
                                    return(getValCorchetes(lstAtributos.getToken(0), elementoEntorno, listaEntero, itemValorRetornoMetodo));
                                }
                                else
                                //no tienen la misma dimensión.
                                {
                                    tablaSimbolos.tablaErrores.insertErrorSemantic("El metodo: " + lstAtributos.getToken(0).val + " no devuelve la misma cantidad de dimensiones que a las que se quiere acceder", lstAtributos.getToken(0));
                                    return(retorno);
                                }
                            }
                            else
                            {
                                println("valId + sAbreParent + LST_VAL + sCierraParent; -> no viene valId");
                                return(retorno);
                            }

                            #endregion
                        }
                        else if (nombreHijo.Equals("LST_VAL"))

                        /*
                         |----------------------------
                         |  valId + sAbreParent + LST_VAL + sCierraParent;
                         |-------------
                         | Esto es un metodo
                         | Desde aquí puedo llamar a las preguntas, y tiene mayor prioridad
                         | si me encuentro dentro de un entorno de nombre, formulario, o de nombre grupo
                         */
                        {
                            #region cuerpo
                            String esteId = lstAtributos.listaAtributos[0].nombretoken;


                            /*if (elementoEntorno.nombre.Equals("formulario") || elementoEntorno.nombre.Equals("grupo"))
                             *
                             * Esto es como el constructor nuevo pregunta()
                             *
                             * {
                             * }*/

                            //primero busco en las preguntas, luego en los metodos, jejejejeje
                            itemValor ret = crearPregunta(elementoEntorno);
                            if (ret != null)
                            {
                                //eso quiere decir que es una pregunta

                                ret.nombrePregunta            = lstAtributos.getToken(0);
                                ret.nombrePregunta.esPregunta = true;

                                itemEntorno sim = new itemEntorno(ret.nombrePregunta, ret.nombrePregunta, ret, new token("publico"), new List <int>(), tablaSimbolos);
                                elementoEntorno.insertarEntorno(sim);


                                return(ret);
                            }

                            //si no lo encuentro como pregunta, sigo la ejecución en busca de un metodo.
                            if (esteId.Equals("valId"))

                            {
                                nodoModelo nodoTemp      = getNodo("LST_VAL");
                                _LST_VAL   lstParametros = (_LST_VAL)nodoTemp;
                                return(elementoEntorno.este.ejecutarMetodoFuncion(lstAtributos.getToken(0), lstParametros.getLstValores(elementoEntorno), elementoEntorno.este.tablaEntorno.raiz));
                            }
                            else
                            {
                                println("valId + sAbreParent + LST_VAL + sCierraParent; -> no viene valId");
                            }

                            #endregion
                        }
                    }

                    if (hijos.Count == 0)

                    /*
                     |----------------------------
                     |  valId + sAbreParent +  sCierraParent;
                     |-------------
                     | Esto es un metodo sin parámetros
                     | hay que buscarlo entre la lista de metodos
                     */
                    {
                        #region cuerpo
                        String esteId = lstAtributos.listaAtributos[0].nombretoken;

                        if (esteId.Equals("valId"))

                        {
                            lstValores sinParametros = new lstValores();
                            return(elementoEntorno.este.ejecutarMetodoFuncion(lstAtributos.getToken(0), sinParametros, elementoEntorno.este.tablaEntorno.raiz));
                        }
                        else
                        {
                            println("valId + sAbreParent +  sCierraParent -> no viene valId");
                        }
                        #endregion
                    }
                }
            }
            else if (lstAtributos.listaAtributos.Count == 5)
            {
                String item1 = lstAtributos.listaAtributos[0].nombretoken;
                String item2 = lstAtributos.listaAtributos[1].nombretoken;
                String item3 = lstAtributos.listaAtributos[2].nombretoken;

                if (item1.Equals("este") && item2.Equals(".") && item3.Equals("valId"))
                {
                    if (hijos.Count == 2)

                    /*
                     |----------------------------
                     | tEste + sPunto + valId + sAbreParent + LST_VAL + sCierraParent + LST_CORCHETES_VAL;
                     */
                    {
                        #region cuerpo
                        if (hayErrores())
                        {
                            return(retorno);
                        }

                        String esteId = lstAtributos.listaAtributos[2].nombretoken;

                        if (esteId.Equals("valId"))

                        {
                            //esto es del metodo
                            nodoModelo nodoTemp               = getNodo("LST_VAL");
                            _LST_VAL   lstParametros          = (_LST_VAL)nodoTemp;
                            itemValor  itemValorRetornoMetodo = elementoEntorno.este.ejecutarMetodoFuncion(lstAtributos.getToken(2), lstParametros.getLstValores(elementoEntorno), elementoEntorno.este.tablaEntorno.raiz);

                            //esto es de la parte del arreglo
                            nodoModelo         nodoLstCorchetes = getNodo("LST_CORCHETES_VAL");
                            _LST_CORCHETES_VAL lstCorchetes     = (_LST_CORCHETES_VAL)nodoLstCorchetes;
                            List <int>         listaEntero      = lstCorchetes.getLstInt(elementoEntorno, lstAtributos.listaAtributos[2].tok);

                            if (itemValorRetornoMetodo.dimensiones.Count == listaEntero.Count)
                            //tienen la misma dimension
                            {
                                println("getValCorchetes");
                                return(getValCorchetes(lstAtributos.getToken(2), elementoEntorno, listaEntero, itemValorRetornoMetodo));
                            }
                            else
                            //no tienen la misma dimensión.
                            {
                                tablaSimbolos.tablaErrores.insertErrorSemantic("El metodo: " + lstAtributos.getToken(2).val + " no devuelve la misma cantidad de dimensiones que a las que se quiere acceder", lstAtributos.getToken(2));
                                return(retorno);
                            }
                        }
                        else
                        {
                            println("tEste + sPunto + valId + sAbreParent + LST_VAL + sCierraParent + LST_CORCHETES_VAL;");
                        }
                        #endregion
                    }
                    else if (hijos.Count == 1)
                    {
                        if (hijos[0].nombre.Equals("LST_CORCHETES_VAL"))

                        /*
                         |----------------------------
                         | tEste + sPunto + valId + sAbreParent + sCierraParent + LST_CORCHETES_VAL;
                         */
                        {
                            #region cuerpo
                            if (hayErrores())
                            {
                                return(retorno);
                            }

                            String esteId = lstAtributos.listaAtributos[2].nombretoken;

                            if (esteId.Equals("valId"))

                            {
                                //esto es del metodo
                                nodoModelo nodoTemp      = getNodo("LST_VAL");
                                lstValores sinParametros = new lstValores();

                                itemValor itemValorRetornoMetodo = elementoEntorno.este.ejecutarMetodoFuncion(lstAtributos.getToken(2), sinParametros, elementoEntorno.este.tablaEntorno.raiz);

                                //esto es de la parte del arreglo
                                nodoModelo         nodoLstCorchetes = getNodo("LST_CORCHETES_VAL");
                                _LST_CORCHETES_VAL lstCorchetes     = (_LST_CORCHETES_VAL)nodoLstCorchetes;
                                List <int>         listaEntero      = lstCorchetes.getLstInt(elementoEntorno, lstAtributos.listaAtributos[2].tok);

                                if (itemValorRetornoMetodo.dimensiones.Count == listaEntero.Count)
                                //tienen la misma dimension
                                {
                                    println("getValCorchetes");
                                    return(getValCorchetes(lstAtributos.getToken(2), elementoEntorno, listaEntero, itemValorRetornoMetodo));
                                }
                                else
                                //no tienen la misma dimensión.
                                {
                                    tablaSimbolos.tablaErrores.insertErrorSemantic("El metodo: " + lstAtributos.getToken(2).val + " no devuelve la misma cantidad de dimensiones que a las que se quiere acceder", lstAtributos.getToken(2));
                                    return(retorno);
                                }
                            }
                            else
                            {
                                println("tEste + sPunto + valId + sAbreParent + sCierraParent + LST_CORCHETES_VAL");
                            }
                            #endregion
                        }
                        else if (hijos[0].nombre.Equals("LST_VAL"))

                        /*
                         |----------------------------
                         | tEste + sPunto + valId + sAbreParent + LST_VAL + sCierraParent
                         */
                        {
                            #region cuerpo
                            print("tEste + sPunto + valId + sAbreParent + LST_VAL + sCierraParent");
                            String esteId = lstAtributos.listaAtributos[2].nombretoken;

                            if (esteId.Equals("valId"))

                            {
                                nodoModelo nodoTemp      = getNodo("LST_VAL");
                                _LST_VAL   lstParametros = (_LST_VAL)nodoTemp;
                                return(elementoEntorno.este.ejecutarMetodoFuncion(lstAtributos.getToken(2), lstParametros.getLstValores(elementoEntorno), elementoEntorno.este.tablaEntorno.raiz));
                            }
                            else
                            {
                                println("valId + sAbreParent + LST_VAL + sCierraParent; -> no viene valId");
                            }
                        }
                        #endregion
                    }
                    else if (hijos.Count == 0)

                    /*
                     |----------------------------
                     | tEste + sPunto + valId + sAbreParent  + sCierraParent
                     */
                    {
                        #region cuerpo
                        print("tEste + sPunto + valId + sAbreParent  + sCierraParent");
                        String esteId = lstAtributos.listaAtributos[2].nombretoken;

                        if (esteId.Equals("valId"))

                        {
                            nodoModelo nodoTemp      = getNodo("LST_VAL");
                            lstValores sinParametros = new lstValores();
                            return(elementoEntorno.este.ejecutarMetodoFuncion(lstAtributos.getToken(2), sinParametros, elementoEntorno.este.tablaEntorno.raiz));
                        }
                        else
                        {
                            println("valId + sAbreParent + LST_VAL + sCierraParent; -> no viene valId");
                        }
                        #endregion
                    }
                }
            }


            return(retorno);
        }
示例#11
0
        public itemEntorno getDestino(elementoEntorno elementoEntorno, itemValor item)
        {
            itemEntorno retorno = null;

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



            if (item.isTypeObjeto())
            {
                if (lstAtributos.listaAtributos.Count == 2)
                {
                    if (hijos.Count > 0)

                    /*
                     |----------------------------
                     | sPunto + valId + LST_CORCHETES_VAL
                     */
                    {
                        objetoClase tempObjeto = item.getObjeto();

                        String item1     = lstAtributos.listaAtributos[1].nombretoken;
                        token  nombreVar = lstAtributos.getToken(1);
                        if (item1.Equals("valId"))
                        {
                            _LST_CORCHETES_VAL lstCorchetes = (_LST_CORCHETES_VAL)getNodo("LST_CORCHETES_VAL");
                            return(getEntornoId(lstAtributos.listaAtributos[1].tok, tempObjeto.tablaEntorno.raiz, lstCorchetes.getLstInt(elementoEntorno, nombreVar)));
                        }
                    }
                    else

                    /*
                     |----------------------------
                     | sPunto + valId
                     */
                    {
                        objetoClase tempObjeto = item.getObjeto();

                        String item1     = lstAtributos.listaAtributos[1].nombretoken;
                        token  nombreVar = lstAtributos.getToken(1);
                        if (item1.Equals("valId"))
                        {
                            _LST_CORCHETES_VAL lstCorchetes = (_LST_CORCHETES_VAL)getNodo("LST_CORCHETES_VAL");
                            return(getEntornoId(lstAtributos.listaAtributos[1].tok, tempObjeto.tablaEntorno.raiz, new List <int>()));
                        }
                    }
                }
                else if (lstAtributos.listaAtributos.Count == 4)
                {
                    if (hijos.Count == 2)

                    /*
                     |----------------------------
                     | sPunto + valId + sAbreParent + LST_VAL + sCierraParent + LST_CORCHETES_VAL
                     */
                    {
                        tablaSimbolos.tablaErrores.insertErrorSemantic("No se le puede asignar un valor a la expresión metodo" + lstAtributos.getToken(1).val + "()[]", lstAtributos.getToken(1));
                    }
                    else if (hijos.Count == 1)
                    {
                        if (hijos[0].nombre.Equals("LST_VAL"))

                        /*
                         |----------------------------
                         | sPunto + valId + sAbreParent + LST_VAL + sCierraParent
                         */
                        {
                            tablaSimbolos.tablaErrores.insertErrorSemantic("No se le puede asignar un valor a la expresión metodo" + lstAtributos.getToken(1).val + "()", lstAtributos.getToken(1));
                        }
                    }
                }
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSyntax("[objeto.objeto]El atributo/arreglo/metodo al que se quiere acceder no es de tipo objeto", new token());
            }

            return(null);
        }