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);
                }
            }
        }
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | 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 #4
0
        public override itemRetorno ejecutar(elementoEntorno elementoEntor)

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

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

            _E        nodoE       = (_E)getNodo("E");
            itemValor valE        = nodoE.getValor(elementoEntor);
            Object    objetoValor = valE.getValorParseado("booleano");
            Boolean   condicion   = false;

            if (objetoValor != null)
            {
                condicion = (Boolean)objetoValor;
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("La condición devulelta no es de tipo booleano,es de tipo:" + valE.getTipo(), lstAtributos.getToken(0));
                return(retorno);
            }


            while (condicion)
            {
                _LST_CUERPO nodoCuerpo = (_LST_CUERPO)getNodo("LST_CUERPO");

                elementoEntorno entornoWhile = new elementoEntorno(elementoEntor, tablaSimbolos, "While", elementoEntor.este);
                retorno = nodoCuerpo.ejecutar(entornoWhile);

                //analizando el continue, el break, y el return



                if (retorno.isRomper())
                //este codigo sirve para eliminar el romper en los nodos, más arriba, y solo se quede en el case
                {
                    return(new itemRetorno(0));
                }
                else if (retorno.isRetorno())
                {
                    return(retorno);
                }
                else if (retorno.isContinuar())
                {
                    return(new itemRetorno(0));
                    //retorno = new itemRetorno(0);
                }
                else if (hayErrores())
                {
                    return(retorno);
                }


                //volviendo analizar el while
                nodoE       = (_E)getNodo("E");
                valE        = nodoE.getValor(elementoEntor);
                objetoValor = valE.getValorParseado("booleano");
                condicion   = (Boolean)objetoValor;
            }

            if (retorno.isContinuar())
            {
                return(new itemRetorno(0));
            }
            return(retorno);
        }
Exemple #5
0
        public itemRetorno ejecutar(elementoEntorno elementoEntor, itemValor expresion)

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

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



            if (hijos.Count == 3)

            /*
             |----------------------------
             |  E + sDosPuntos + sAbreLlave + LST_CUERPO + sCierraLlave + CUERPO_CASE
             */
            {
                _E        nodoE = (_E)getNodo("E");
                itemValor valE  = nodoE.getValor(elementoEntor);

                IgualQue  igual     = new IgualQue(new _E("temp1", tablaSimbolos), new _E("temp2", tablaSimbolos), tablaSimbolos, new token("="));
                itemValor resultado = igual.opIgualacion(expresion, valE, "IGUALACION", elementoEntor);

                Object  objetoValor = resultado.getValorParseado("booleano");
                Boolean condicion   = false;

                if (objetoValor != null)
                {
                    condicion = (Boolean)objetoValor;
                    if (condicion)
                    {
                        _LST_CUERPO nodoCuerpo = (_LST_CUERPO)getNodo("LST_CUERPO");
                        itemRetorno break1     = nodoCuerpo.ejecutar(elementoEntor);
                        //voy a revisar si no hay break prro
                        if (break1.isRomper())
                        {
                            println("es romper");
                            itemRetorno ret2 = new itemRetorno(0);
                            //asi retorno un normal
                            return(ret2);
                            //aquí rompo prro
                        }
                        else
                        {
                            println("no es romper");
                            _CUERPO_CASE cuerpoCase = (_CUERPO_CASE)getNodo("CUERPO_CASE");
                            return(cuerpoCase.ejecutar(elementoEntor, expresion));
                        }
                    }
                    else
                    {
                        println("ejecutando cuerpo clase");
                        _CUERPO_CASE sino_si = (_CUERPO_CASE)getNodo("CUERPO_CASE");
                        return(sino_si.ejecutar(elementoEntor, expresion));
                    }
                }
                else
                {
                    println("E + sDosPuntos + sAbreLlave + LST_CUERPO + sCierraLlave + CUERPO_CASE->  No se retorno un boolenano en la igualación");
                    return(retorno);
                }
            }
            else if (hijos.Count == 2)

            /*
             |----------------------------
             |   E + sDosPuntos + sAbreLlave + LST_CUERPO + sCierraLlave
             */
            {
                _E        nodoE = (_E)getNodo("E");
                itemValor valE  = nodoE.getValor(elementoEntor);

                IgualQue  igual     = new IgualQue(new _E("temp1", tablaSimbolos), new _E("temp2", tablaSimbolos), tablaSimbolos, new token("="));
                itemValor resultado = igual.opIgualacion(expresion, valE, "IGUALACION", elementoEntor);

                Object  objetoValor = resultado.getValorParseado("booleano");
                Boolean condicion   = false;

                if (objetoValor != null)
                {
                    condicion = (Boolean)objetoValor;
                    if (condicion)
                    {
                        _LST_CUERPO nodoCuerpo = (_LST_CUERPO)getNodo("LST_CUERPO");
                        return(nodoCuerpo.ejecutar(elementoEntor));
                    }
                    else
                    {
                        return(retorno);
                    }
                }
                else
                {
                    println(" E + sDosPuntos + sAbreLlave + LST_CUERPO + sCierraLlave ->  No se retorno un boolenano en la igualación");
                    return(retorno);
                }
            }
            else if (hijos.Count == 1)

            /*
             |----------------------------
             |  tDefecto + sDosPuntos + sAbreLlave + LST_CUERPO + sCierraLlave;
             */
            {
                _LST_CUERPO nodoCuerpo = (_LST_CUERPO)getNodo("LST_CUERPO");
                return(nodoCuerpo.ejecutar(elementoEntor));
            }
            else
            {
                return(retorno);
            }
        }
Exemple #6
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);
        }
Exemple #7
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | EJECUCIÓN FINAL
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public override itemRetorno ejecutar(elementoEntorno elementoEntor)

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

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

            _E        nodoE       = (_E)getNodo("E");
            itemValor valE        = nodoE.getValor(elementoEntor);
            Object    objetoValor = valE.getValorParseado("booleano");
            Boolean   condicion   = false;

            if (objetoValor != null)
            {
                condicion = (Boolean)objetoValor;
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("La condición devulelta no es de tipo booleano,es de tipo:" + valE.getTipo(), lstAtributos.getToken(0));
                return(retorno);
            }


            if (hijos.Count == 2)

            /*
             |----------------------------
             |  tSino + tSi + sAbreParent + E + sCierraParent + sAbreLlave + LST_CUERPO + sCierraLlave
             */
            {
                if (condicion)
                {
                    _LST_CUERPO nodoCuerpo = (_LST_CUERPO)getNodo("LST_CUERPO");


                    elementoEntorno entornoIf = new elementoEntorno(elementoEntor, tablaSimbolos, "Sino_Si", elementoEntor.este);
                    return(nodoCuerpo.ejecutar(entornoIf));
                }
            }
            else if (hijos.Count == 3)
            {
                string caso = hijos[2].nombre;

                if (caso.Equals("SINO_SI"))

                /*
                 |----------------------------
                 | tSino + tSi + sAbreParent + E + sCierraParent + sAbreLlave + LST_CUERPO + sCierraLlave + SINO_SI
                 */
                {
                    if (condicion)
                    {
                        _LST_CUERPO nodoCuerpo = (_LST_CUERPO)getNodo("LST_CUERPO");


                        elementoEntorno entornoIf = new elementoEntorno(elementoEntor, tablaSimbolos, "Sino_Si", elementoEntor.este);
                        return(nodoCuerpo.ejecutar(entornoIf));
                    }
                    else
                    {
                        _SINO_SI sino_si = (_SINO_SI)getNodo("SINO_SI");
                        return(sino_si.ejecutar(elementoEntor));
                    }
                }
                else if (caso.Equals("SINO"))

                /*
                 |----------------------------
                 | tSino + tSi + sAbreParent + E + sCierraParent + sAbreLlave + LST_CUERPO + sCierraLlave + SINO;
                 */
                {
                    if (condicion)
                    {
                        _LST_CUERPO     nodoCuerpo = (_LST_CUERPO)getNodo("LST_CUERPO");
                        elementoEntorno entornoIf  = new elementoEntorno(elementoEntor, tablaSimbolos, "Sino_si", elementoEntor.este);
                        return(nodoCuerpo.ejecutar(entornoIf));
                    }
                    else
                    {
                        _SINO           nodoSINO    = (_SINO)getNodo("SINO");
                        elementoEntorno entornoSino = new elementoEntorno(elementoEntor, tablaSimbolos, "Sino", elementoEntor.este);
                        return(nodoSINO.ejecutar(entornoSino));
                    }
                }
            }



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

        public override itemRetorno ejecutar(elementoEntorno elementoEntor)

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

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


            if (hijos[0].nombre.Equals("DECLARAR_VARIABLE_SINVISIBI"))

            /*
             |----------------------------
             |   tPara + sAbreParent + DECLARAR_VARIABLE_SINVISIBI + sPuntoComa + E + sPuntoComa + ASIG_VALOR+ sCierraParent+ sAbreLlave+ LST_CUERPO + sCierraLlave
             */
            {
                nodoModelo nodotemp = getNodo("DECLARAR_VARIABLE_SINVISIBI");

                if (nodotemp == null)
                {
                    return(retorno);
                }


                _DECLARAR_VARIABLE_SINVISIBI decla = (_DECLARAR_VARIABLE_SINVISIBI)nodotemp;
                decla.ejecutar(elementoEntor);

                _E        nodoE       = (_E)getNodo("E");
                itemValor valE        = nodoE.getValor(elementoEntor);
                Object    objetoValor = valE.getValorParseado("booleano");
                Boolean   condicion   = false;


                if (objetoValor != null)
                {
                    condicion = (Boolean)objetoValor;
                }
                else
                {
                    tablaSimbolos.tablaErrores.insertErrorSemantic("La condición devulelta no es de tipo booleano,es de tipo:" + valE.getTipo(), lstAtributos.getToken(0));
                    return(retorno);
                }


                while (condicion)
                {
                    elementoEntorno entornoFor = new elementoEntorno(elementoEntor, tablaSimbolos, "para", elementoEntor.este);
                    _LST_CUERPO     nodoCuerpo = (_LST_CUERPO)getNodo("LST_CUERPO");

                    retorno = nodoCuerpo.ejecutar(entornoFor);

                    //analizando el continue, el break, y el return



                    if (retorno.isRomper())
                    //este codigo sirve para eliminar el romper en los nodos, más arriba, y solo se quede en el case
                    {
                        return(new itemRetorno(0));
                    }
                    else if (retorno.isRetorno())
                    {
                        return(retorno);
                    }
                    else if (retorno.isContinuar())
                    {
                        return(new itemRetorno(0));
                        //retorno = new itemRetorno(0);
                    }
                    else if (hayErrores())
                    {
                        return(retorno);
                    }


                    //i++
                    _ASIG_VALOR asig = (_ASIG_VALOR)getNodo("ASIG_VALOR");
                    asig.ejecutar(entornoFor);


                    //volviendo analizar el while
                    nodoE       = (_E)getNodo("E");
                    valE        = nodoE.getValor(entornoFor);
                    objetoValor = valE.getValorParseado("booleano");
                    condicion   = (Boolean)objetoValor;
                }

                if (retorno.isContinuar())
                {
                    return(new itemRetorno(0));
                }
            }
            else if (hijos[0].nombre.Equals("ASIG_VALOR"))

            /*
             |----------------------------
             | tPara + sAbreParent + ASIG_VALOR + sPuntoComa + E + sPuntoComa + ASIG_VALOR + sCierraParent + sAbreLlave + LST_CUERPO + sCierraLlave;
             */
            {
                nodoModelo nodotemp = getNodo("ASIG_VALOR");

                if (nodotemp == null)
                {
                    return(retorno);
                }


                _ASIG_VALOR decla = (_ASIG_VALOR)hijos[0];
                decla.ejecutar(elementoEntor);

                _E        nodoE       = (_E)getNodo("E");
                itemValor valE        = nodoE.getValor(elementoEntor);
                Object    objetoValor = valE.getValorParseado("booleano");
                Boolean   condicion   = false;


                if (objetoValor != null)
                {
                    condicion = (Boolean)objetoValor;
                }
                else
                {
                    tablaSimbolos.tablaErrores.insertErrorSemantic("La condición devulelta no es de tipo booleano,es de tipo:" + valE.getTipo(), lstAtributos.getToken(0));
                    return(retorno);
                }


                while (condicion)
                {
                    elementoEntorno entornoFor = new elementoEntorno(elementoEntor, tablaSimbolos, "para", elementoEntor.este);

                    _LST_CUERPO nodoCuerpo = (_LST_CUERPO)getNodo("LST_CUERPO");

                    retorno = nodoCuerpo.ejecutar(entornoFor);

                    //analizando el continue, el break, y el return



                    if (retorno.isRomper())
                    //este codigo sirve para eliminar el romper en los nodos, más arriba, y solo se quede en el case
                    {
                        return(new itemRetorno(0));
                    }
                    else if (retorno.isRetorno())
                    {
                        return(retorno);
                    }
                    else if (retorno.isContinuar())
                    {
                        return(new itemRetorno(0));
                        //retorno = new itemRetorno(0);
                    }
                    else if (hayErrores())
                    {
                        return(retorno);
                    }


                    //i++
                    _ASIG_VALOR asig = (_ASIG_VALOR)hijos[2];
                    asig.ejecutar(entornoFor);


                    //volviendo analizar el while
                    nodoE       = (_E)getNodo("E");
                    valE        = nodoE.getValor(entornoFor);
                    objetoValor = valE.getValorParseado("booleano");
                    condicion   = (Boolean)objetoValor;
                }

                if (retorno.isContinuar())
                {
                    return(new itemRetorno(0));
                }
            }



            return(retorno);
        }
        public nodoModelo getNodo(String nombreNoTerminal, tablaSimbolos tabla)
        {
            nodoModelo retorno = null;

            switch (nombreNoTerminal)
            {
            case "S":
                retorno = new _S(nombreNoTerminal, tabla);

                break;

            case "LST_IMPORT":
                retorno = new _LST_IMPORT(nombreNoTerminal, tabla);

                break;

            case "IMPORT":
                retorno = new _IMPORT(nombreNoTerminal, tabla);

                break;

            case "LST_CLASE":
                retorno = new _LST_CLASE(nombreNoTerminal, tabla);

                break;

            case "CLASE":
                retorno = new _CLASE(nombreNoTerminal, tabla);

                break;

            case "TIPO":
                retorno = new _TIPO(nombreNoTerminal, tabla);

                break;

            case "EXTENDER":
                retorno = new _EXTENDER(nombreNoTerminal, tabla);

                break;

            case "VISIBILIDAD":
                retorno = new _VISIBILIDAD(nombreNoTerminal, tabla);

                break;

            case "LST_PARAMETROS":
                retorno = new _LST_PARAMETROS(nombreNoTerminal, tabla);

                break;

            case "PARAMETRO":
                retorno = new _PARAMETRO(nombreNoTerminal, tabla);

                break;

            case "LST_VAL":
                retorno = new _LST_VAL(nombreNoTerminal, tabla);

                break;

            case "CP_CLASE":
                retorno = new _CP_CLASE(nombreNoTerminal, tabla);

                break;

            case "CUERPO_CLASE":
                retorno = new _CUERPO_CLASE(nombreNoTerminal, tabla);

                break;

            case "METODO":
                retorno = new _METODO(nombreNoTerminal, tabla);

                break;

            case "SOBRESCRITURA":
                retorno = new _SOBRESCRITURA(nombreNoTerminal, tabla);

                break;

            case "MAIN":
                retorno = new _MAIN(nombreNoTerminal, tabla);

                break;

            case "CONSTRUCTOR":
                retorno = new _CONSTRUCTOR(nombreNoTerminal, tabla);

                break;

            case "DECLARAR_VARIABLE_GLOBAL":
                retorno = new _DECLARAR_VARIABLE_GLOBAL(nombreNoTerminal, tabla);

                break;

            case "DECLARAR_VARIABLE_SINVISIBI":
                retorno = new _DECLARAR_VARIABLE_SINVISIBI(nombreNoTerminal, tabla);

                break;

            case "VAL":
                retorno = new _VAL(nombreNoTerminal, tabla);

                break;

            case "LST_LLAVES_VAL":
                retorno = new _LST_LLAVES_VAL(nombreNoTerminal, tabla);

                break;

            case "LLAVES_VAL_P":
                retorno = new _LLAVES_VAL_P(nombreNoTerminal, tabla);

                break;

            case "VAR_ARREGLO":
                retorno = new _VAR_ARREGLO(nombreNoTerminal, tabla);

                break;

            case "LST_CORCHETES":
                retorno = new _LST_CORCHETES(nombreNoTerminal, tabla);

                break;

            case "LST_CORCHETES_VAL":
                retorno = new _LST_CORCHETES_VAL(nombreNoTerminal, tabla);

                break;

            case "USAR_METO_VAR":
                retorno = new _USAR_METO_VAR(nombreNoTerminal, tabla);

                break;

            case "USAR_VARIABLEP":
                retorno = new _USAR_VARIABLEP(nombreNoTerminal, tabla);

                break;

            case "USAR_VARIABLE":
                retorno = new _USAR_VARIABLE(nombreNoTerminal, tabla);

                break;

            case "USAR_METODO":
                retorno = new _USAR_METODO(nombreNoTerminal, tabla);

                break;

            case "LLAMADA_FORMULARIO":
                retorno = new _LLAMADA_FORMULARIO(nombreNoTerminal, tabla);

                break;

            case "LST_CUERPO":
                retorno = new _LST_CUERPO(nombreNoTerminal, tabla);

                break;

            case "CUERPO":
                retorno = new _CUERPO(nombreNoTerminal, tabla);

                break;

            case "VALOR":
                retorno = new _VALOR(nombreNoTerminal, tabla);

                break;

            case "PAR_CORCHETES_VACIOS":
                retorno = new _PAR_CORCHETES_VACIOS(nombreNoTerminal, tabla);
                break;

            case "E":
                retorno = new _E(nombreNoTerminal, tabla);
                break;

            case "FUNCIONES_NATIVAS":
                retorno = new _FUNCIONES_NATIVAS(nombreNoTerminal, tabla);
                break;

            case "IMPRIMIR":
                retorno = new _IMPRIMIR(nombreNoTerminal, tabla);
                break;


            case "ID_VAR_FUNC":
                retorno = new _ID_VAR_FUNC(nombreNoTerminal, tabla);
                break;

            case "LST_PUNTOSP":
                retorno = new _LST_PUNTOSP(nombreNoTerminal, tabla);
                break;

            case "ASIG_VALOR":
                retorno = new _ASIG_VALOR(nombreNoTerminal, tabla);
                break;

            case "PAR_CORCHETES_VAL":
                retorno = new _PAR_CORCHETES_VAL(nombreNoTerminal, tabla);
                break;

            case "RETORNO":
                retorno = new _RETORNO(nombreNoTerminal, tabla);
                break;

            case "SI":
                retorno = new _SI(nombreNoTerminal, tabla);
                break;


            case "SINO_SI":
                retorno = new _SINO_SI(nombreNoTerminal, tabla);
                break;


            case "SINO":
                retorno = new _SINO(nombreNoTerminal, tabla);
                break;

            case "SENTENCIAS":
                retorno = new _SENTENCIAS(nombreNoTerminal, tabla);
                break;

            case "SI_SIMPLIFICADO":
                retorno = new _SI_SIMPLIFICADO(nombreNoTerminal, tabla);
                break;

            case "CASO":
                retorno = new _CASO(nombreNoTerminal, tabla);
                break;

            case "CUERPO_CASE":
                retorno = new _CUERPO_CASE(nombreNoTerminal, tabla);
                break;

            case "ROMPER":
                retorno = new _ROMPER(nombreNoTerminal, tabla);
                break;

            case "WHILE":
                retorno = new _WHILE(nombreNoTerminal, tabla);
                break;


            case "CONTINUAR":
                retorno = new _CONTINUAR(nombreNoTerminal, tabla);
                break;

            case "FOR":
                retorno = new _FOR(nombreNoTerminal, tabla);
                break;

            case "DOWHILE":
                retorno = new _DOWHILE(nombreNoTerminal, tabla);
                break;

            case "REPETIR":
                retorno = new _REPETIR(nombreNoTerminal, tabla);
                break;

            case "MENSAJE":
                retorno = new _MENSAJE(nombreNoTerminal, tabla);
                break;

            case "TO_CADENA":
                retorno = new _TO_CADENA(nombreNoTerminal, tabla);
                break;

            case "SUB_CAD":
                retorno = new _SUB_CAD(nombreNoTerminal, tabla);
                break;

            case "POS_CAD":
                retorno = new _POS_CAD(nombreNoTerminal, tabla);
                break;

            case "TO_BOOLEAN":
                retorno = new _TO_BOOLEAN(nombreNoTerminal, tabla);
                break;

            case "TO_ENTERO":
                retorno = new _TO_ENTERO(nombreNoTerminal, tabla);
                break;

            case "HOY":
                retorno = new _HOY(nombreNoTerminal, tabla);
                break;

            case "AHORA":
                retorno = new _AHORA(nombreNoTerminal, tabla);
                break;

            case "TO_FECHA":
                retorno = new _TO_FECHA(nombreNoTerminal, tabla);
                break;

            case "TO_HORA":
                retorno = new _TO_HORA(nombreNoTerminal, tabla);
                break;

            case "TO_FECHAHORA":
                retorno = new _TO_FECHAHORA(nombreNoTerminal, tabla);
                break;

            case "TAM":
                retorno = new _TAM(nombreNoTerminal, tabla);
                break;

            case "RANDOM":
                retorno = new _RANDOM(nombreNoTerminal, tabla);
                break;

            case "MIN":
                retorno = new _MIN(nombreNoTerminal, tabla);
                break;

            case "MAX":
                retorno = new _MAX(nombreNoTerminal, tabla);
                break;

            case "OPE_TIPO":
                retorno = new _OPE_TIPO(nombreNoTerminal, tabla);
                break;

            case "OPE_ARITME":
                retorno = new _OPE_ARITME(nombreNoTerminal, tabla);
                break;


            case "POTENCIA":
                retorno = new _POTENCIA(nombreNoTerminal, tabla);
                break;

            case "LOGARITMO":
                retorno = new _LOGARITMO(nombreNoTerminal, tabla);
                break;

            case "LOGARITMO10":
                retorno = new _LOGARITMO10(nombreNoTerminal, tabla);
                break;

            case "ABSOLUTO":
                retorno = new _ABSOLUTO(nombreNoTerminal, tabla);
                break;

            case "SENO":
                retorno = new _SENO(nombreNoTerminal, tabla);
                break;

            case "COSENO":
                retorno = new _COSENO(nombreNoTerminal, tabla);
                break;

            case "TANGENTE":
                retorno = new _TANGENTE(nombreNoTerminal, tabla);
                break;

            case "RAIZ":
                retorno = new _RAIZ(nombreNoTerminal, tabla);
                break;

            case "PI":
                retorno = new _PI(nombreNoTerminal, tabla);
                break;


            case "SUPER":
                retorno = new _SUPER(nombreNoTerminal, tabla);
                return(retorno);

            case "FORMULARIO":
                retorno = new _FORMULARIO(nombreNoTerminal, tabla);
                return(retorno);


            case "PREGUNTA":
                retorno = new _PREGUNTA(nombreNoTerminal, tabla);
                return(retorno);


            case "GRUPO":
                retorno = new _GRUPO(nombreNoTerminal, tabla);
                return(retorno);


            case "LST_CUERPO_PREGUNTA":
                retorno = new _LST_CUERPO_PREGUNTA(nombreNoTerminal, tabla);
                return(retorno);


            case "CUERPO_PREGUNTA":
                retorno = new _CUERPO_PREGUNTA(nombreNoTerminal, tabla);
                return(retorno);

            case "PREGUNTA_NATIVA":
                retorno = new _PREGUNTA_NATIVA(nombreNoTerminal, tabla);
                return(retorno);

            case "ESCRIBIR_ARCHIVO":
                retorno = new _ESCRIBIR_ARCHIVO(nombreNoTerminal, tabla);
                return(retorno);

            case "FUNC_MULTIMEDIA":
                retorno = new _FUNC_MULTIMEDIA(nombreNoTerminal, tabla);
                return(retorno);

            case "AUDIO":
                retorno = new _AUDIO(nombreNoTerminal, tabla);
                return(retorno);

            case "VIDEO":
                retorno = new _VIDEO(nombreNoTerminal, tabla);
                return(retorno);

            case "IMAGEN":
                retorno = new _IMAGEN(nombreNoTerminal, tabla);
                return(retorno);

            case "LEN":
                retorno = new _LEN(nombreNoTerminal, tabla);
                return(retorno);

            default:
                retorno = new nodoModelo("Desc_" + nombreNoTerminal, tabla);
                Console.WriteLine("[generarArbol]No se encontró el nodo:" + nombreNoTerminal);
                break;
            }

            return(retorno);
        }