Exemplo n.º 1
0
        /*public opModelo(nodoModelo hijo11, nodoModelo hijo21, tablaSimbolos tabla)
         * {
         *  this.hijo11 = hijo11;
         *  this.hijo21 = hijo21;
         *  this.tabla = tabla;
         * }*/

        public opModelo(nodoModelo hijo1, nodoModelo hijo2, tablaSimbolos tabla, token signo)
        {
            this.hijo1 = (_E)hijo1;
            this.hijo2 = (_E)hijo2;
            this.tabla = tabla;
            this.signo = signo;
        }
Exemplo n.º 2
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Funciones ope Tipo
         |-------------------------------------------------------------------------------------------------------------------
         |
         */



        public override itemValor ope_tipo(elementoEntorno elem)
        {
            itemValor retorno = new itemValor();

            retorno.setTypeNulo();

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


            _E        nodoE = (_E)getNodo("E");
            itemValor valE  = nodoE.getValor(elem);

            String tipo = "cadena";

            Object resul = valE.getValorParseado(tipo);

            if (resul != null)
            {
                String cadena = (String)resul;
                retorno.setValue(cadena);
                return(retorno);
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede parsear a " + tipo + " el valor", lstAtributos.getToken(0));
                return(retorno);
            }
        }
Exemplo n.º 3
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Funciones ope Tipo
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

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

            retorno.setTypeNulo();

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

            if (hijos.Count != 3)
            {
                return(retorno);
            }



            _VALOR    nodoE       = (_VALOR)hijos[0];
            itemValor valE        = nodoE.getValor(elem, new token(""));
            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);
            }



            _E nodoE2 = (_E)hijos[1];
            _E nodoE3 = (_E)hijos[2];

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


            itemValor itemVerdadero = nodoE2.getValor(elem);
            itemValor itemFalso     = nodoE3.getValor(elem);



            if (condicion)
            {
                return(itemVerdadero);
            }
            else
            {
                return(itemFalso);
            }
        }
Exemplo n.º 4
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Funciones ope Tipo
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public override itemValor ope_tipo(elementoEntorno elem)
        {
            itemValor retorno = new itemValor();

            retorno.setTypeNulo();

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

            if (hijos.Count != 1)
            {
                return(retorno);
            }



            _E nodoE2 = (_E)hijos[0];

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


            itemValor itemInicio = nodoE2.getValor(elem);



            if (itemInicio.isTypeFecha())
            {
                return(itemInicio);
            }
            else if (itemInicio.isTypeCadena())
            {
                itemValor tel = new itemValor();
                tel.convertirCadena(itemInicio.getCadena());

                if (tel.isTypeFecha())
                {
                    retorno = tel;
                    return(retorno);
                }
                else
                {
                    tablaSimbolos.tablaErrores.insertErrorSemantic("No se pudo parsear a fecha", lstAtributos.getToken(0));
                    return(retorno);
                }
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("No se pueden parsear a fecha expresiones que no sean cadenas", lstAtributos.getToken(0));
                return(retorno);
            }
        }
Exemplo n.º 5
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)
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("Se estan esperando dos parametros, ruta de audio, y valor booleano", lstAtributos.getToken(0));
                return(retorno);
            }


            _E nodo1 = (_E)hijos[0];
            _E nodo2 = (_E)hijos[1];

            itemValor itRuta    = nodo1.getValor(tablaEntornos);
            itemValor itBoolean = nodo2.getValor(tablaEntornos);

            Object objRuta = itRuta.getValorParseado("cadena");
            Object objBool = itBoolean.getValorParseado("booleano");

            if (objRuta == null || objBool == null)
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("Uno de los parámetros no fue cadena y/o booleano", lstAtributos.getToken(0));
                return(retorno);
            }
            else
            {
                string ruta = (string)objRuta;

                ruta = tablaSimbolos.getRutaProyecto() + "\\" + ruta;

                Boolean booleano = (Boolean)objBool;

                frmAudio fdecimal = new frmAudio(tablaEntornos, ruta, booleano);
                fdecimal.ShowDialog();
                return(retorno);
            }
        }
Exemplo n.º 6
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Funciones ope Tipo
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public override itemValor ope_tipo(elementoEntorno elem)
        {
            itemValor retorno = new itemValor();

            retorno.setTypeNulo();

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

            if (hijos.Count != 1)
            {
                return(retorno);
            }


            String tipo2 = "entero";


            _E nodoE2 = (_E)hijos[0];

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

            int inicioVal = 0;



            itemValor itemInicio = nodoE2.getValor(elem);
            Object    inicioTemp = itemInicio.getValorParseado(tipo2);


            if (itemInicio.isTypeDecimal())
            {
                retorno.setValue(Math.Cos(itemInicio.getDecimal()));
                return(retorno);
            }
            else if (inicioTemp != null)
            {
                inicioVal = (int)inicioTemp;
                retorno.setValue(Math.Cos(inicioVal));
                return(retorno);
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede parsear a entero el valor", lstAtributos.getToken(0));
                return(retorno);
            }
        }
Exemplo n.º 7
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Funciones ope Tipo
         |-------------------------------------------------------------------------------------------------------------------
         |
         */



        public override itemValor ope_tipo(elementoEntorno elem)
        {
            itemValor retorno = new itemValor();

            retorno.setTypeNulo();

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

            if (hijos.Count != 1)
            {
                return(retorno);
            }


            String tipo1 = "booleano";


            _E nodoE1 = (_E)hijos[0];


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

            Boolean boolVal = false;



            itemValor itemBool   = nodoE1.getValor(elem);
            Object    boolObject = itemBool.getValorParseado(tipo1);


            if (boolObject != null)
            {
                boolVal = (Boolean)boolObject;
                retorno.setValue(boolVal);
                return(retorno);
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede parsear a booleano el valor", lstAtributos.getToken(0));
                return(retorno);
            }
        }
Exemplo n.º 8
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | EJECUCIÓN FINAL
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public override itemRetorno ejecutar(elementoEntorno elementoEntor)

        /*
         |----------------------------
         | EJECUTAR
         |----------------------------
         | 0 = normal
         | 1 = return;
         | 2 = break
         | 3 = continue
         | 4 = errores
         */
        {
            /*
             |----------------------------
             |  tCaso + sAbreParent + E + sCierraParent + tDe + sAbreLlave + CUERPO_CASE + sCierraLlave;
             */
            itemRetorno retorno = new itemRetorno(0);

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

            _E        nodoE = (_E)getNodo("E");
            itemValor valE  = nodoE.getValor(elementoEntor);

            _CUERPO_CASE    nodoCuerpo = (_CUERPO_CASE)hijos[1];
            elementoEntorno entornoIf  = new elementoEntorno(elementoEntor, tablaSimbolos, "case", elementoEntor.este);
            itemRetorno     cuerpoCase = nodoCuerpo.ejecutar(entornoIf, valE);


            if (cuerpoCase.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
            {
                return(retorno);
            }
        }
Exemplo n.º 9
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Funciones ope Tipo
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

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

            retorno.setTypeNulo();

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

            if (hijos.Count != 1)
            {
                return(retorno);
            }



            _E nodoE2 = (_E)hijos[0];

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


            itemValor itVal = nodoE2.getValor(elem);

            if (itVal.dimensiones.Count <= 0)
            {
                retorno.setValue(0);
            }
            else
            {
                retorno.setValue(itVal.dimensiones[0]);
            }
            return(retorno);
        }
Exemplo n.º 10
0
        public itemValor getValor(elementoEntorno elementoEntor, token tipo)
        {
            itemValor retorno = new itemValor();

            if (hayErrores())
            {
                return(retorno);
            }
            //println(hijos[0].nombre);

            nodoModelo temp = getNodo("E");

            if (temp != null)

            /*
             |----------------------------
             | PAR_CORCHETES_VAL.Rule = sAbreCorchete + E + sCierraCorchete;
             */
            {
                _E ret = (_E)temp;
                // ret.getValor(elementoEntor).imprimirVariable();

                ///return ret.getValor(elementoEntor);
                itemValor temporal = ret.getValor(elementoEntor);
                if (temporal.dimensiones.Count > 0)
                {
                    tablaSimbolos.tablaErrores.insertErrorSemantic("El lenguaje no soporta variables, o nuevos arreglos anidados de una forma diferente de {{E,E},{E,E}}: Error en matriz", tipo);
                    return(retorno);
                }
                else
                {
                    //temporal.imprimirVariable();
                    return(temporal);
                }
            }

            return(retorno);
        }
Exemplo n.º 11
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | EJECUCIÓN FINAL
         |-------------------------------------------------------------------------------------------------------------------
         |
         */

        public override itemRetorno ejecutar(elementoEntorno tablaEntornos)

        /*
         |----------------------------
         | EJECUTAR
         |----------------------------
         | 0= normal
         | 1 = return;
         | 2 = break
         | 3 = continue
         | 4 = errores
         */
        {
            //validar que solo vengan en formulario y pregutnas, y grupos


            itemRetorno retorno = new itemRetorno(0);

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



            _E val = getNodoE();

            if (val != null)
            {
                //se estan guardando valores en la variable
                //  println("Ejecutando el imprimir que tiene un hijo de valore ejejejejejejejejej");



                itemValor temp = val.getValor(tablaEntornos);

                if (temp.isTypeNulo())
                {
                    mostrarMensaje("Mensaje");
                }
                else
                {
                    if (tablaSimbolos.consola != null)
                    {
                        if (temp.valor != null)
                        {
                            try
                            {
                                mostrarMensaje(temp.valor.ToString());
                            }
                            catch (Exception e)
                            {
                                tablaSimbolos.consola.insertar(e.ToString());
                            }
                        }
                        //tablaSimbolos.consola.insertar("imprimiendo");
                    }
                    else
                    {
                        println("tablaSimblo.consola is null");
                    }
                    //
                }
            }
            else
            {
                mostrarMensaje("");
            }

            return(retorno);
        }
Exemplo n.º 12
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);
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Funciones ope Tipo
         |-------------------------------------------------------------------------------------------------------------------
         |
         */



        public override itemValor ope_tipo(elementoEntorno elem)
        {
            itemValor retorno = new itemValor();

            retorno.setTypeNulo();

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

            if (hijos.Count != 1)
            {
                return(retorno);
            }



            _E nodoE1 = (_E)hijos[0];


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



            itemValor itemInicio = nodoE1.getValor(elem);


            if (itemInicio.valor != null)
            {
                if (itemInicio.isTypeBooleano() || itemInicio.isTypeEntero() || itemInicio.isTypeDecimal())
                {
                    Object intObject = itemInicio.getValorParseado("entero");
                    if (intObject != null)
                    {
                        int reton = (int)intObject;
                        retorno.setValue(reton);
                        return(retorno);
                    }
                }

                Object cadeObject = itemInicio.getValorParseado("cadena");

                if (cadeObject != null)
                {
                    String caden = (String)cadeObject;

                    retorno.setValue(caden.Length);
                    return(retorno);
                }
                else
                {
                    tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede parsear a cadena para verificar su tamaño", lstAtributos.getToken(0));
                    return(retorno);
                }
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede parsear un objeto nulo", lstAtributos.getToken(0));
                return(retorno);
            }
        }
Exemplo n.º 15
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Funciones ope Tipo
         |-------------------------------------------------------------------------------------------------------------------
         |
         */



        public override itemValor ope_tipo(elementoEntorno elem)
        {
            itemValor retorno = new itemValor();

            retorno.setTypeNulo();

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

            if (hijos.Count != 2)
            {
                return(retorno);
            }


            String tipo1 = "cadena";
            String tipo2 = "entero";


            _E nodoE1 = (_E)hijos[0];
            _E nodoE2 = (_E)hijos[1];


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

            String cadenaVal = "";
            int    inicioVal = 0;


            itemValor itemCadena = nodoE1.getValor(elem);
            Object    cadenaTemp = itemCadena.getValorParseado(tipo1);


            itemValor itemInicio = nodoE2.getValor(elem);
            Object    inicioTemp = itemInicio.getValorParseado(tipo2);



            if (cadenaTemp != null)
            {
                cadenaVal = (String)cadenaTemp;
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede parsear a cadena el valor", lstAtributos.getToken(0));
                return(retorno);
            }

            if (inicioTemp != null)
            {
                inicioVal = (int)inicioTemp;
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede parsear a entero el valor", lstAtributos.getToken(0));
                return(retorno);
            }



            if ((inicioVal) > cadenaVal.Length || (inicioVal) < 0)
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("El indice superior supera la longitud de la cadena", lstAtributos.getToken(0));
                return(retorno);
            }

            Char[] temp1 = cadenaVal.ToCharArray();

            String salida = temp1[inicioVal].ToString();

            retorno.setValue(salida);

            return(retorno);
        }
Exemplo n.º 16
0
        /*
         |-------------------------------------------------------------------------------------------------------------------
         | Funciones ope Tipo
         |-------------------------------------------------------------------------------------------------------------------
         |
         */



        public override itemValor ope_tipo(elementoEntorno elem)
        {
            itemValor retorno = new itemValor();

            retorno.setTypeNulo();

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

            if (hijos.Count != 2)
            {
                return(retorno);
            }


            String tipo2 = "entero";


            _E nodoE2 = (_E)hijos[0];
            _E nodoE3 = (_E)hijos[1];

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

            int inicioVal = 0;
            int finalVal  = 0;



            itemValor itemInicio = nodoE2.getValor(elem);
            Object    inicioTemp = itemInicio.getValorParseado(tipo2);


            itemValor itemFinal = nodoE3.getValor(elem);
            Object    finalTemp = itemFinal.getValorParseado(tipo2);



            if (inicioTemp != null)
            {
                inicioVal = (int)inicioTemp;
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede parsear a entero el valor", lstAtributos.getToken(0));
                return(retorno);
            }

            if (finalTemp != null)
            {
                finalVal = (int)finalTemp;
            }
            else
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("No se puede parsear a entero el valor", lstAtributos.getToken(0));
                return(retorno);
            }

            if (inicioVal == 0 || finalVal == 0)
            {
                tablaSimbolos.tablaErrores.insertErrorSemantic("Potencia con base 0 elevado a 0 es indeterminado", lstAtributos.getToken(0));
                return(retorno);
            }

            retorno.setValue(Math.Pow(inicioVal, finalVal));


            return(retorno);
        }
Exemplo n.º 17
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);
            }
        }
Exemplo n.º 18
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);
        }
Exemplo n.º 19
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);
        }