Ejemplo n.º 1
0
        public String generar3D()
        {
            String   codigo      = "";
            cadena3D expresion3D = expresion.resCondicion();
            pasadas  pasadas     = new pasadas(ambito.tablaSimbolo);

            if (expresion3D.tipo.Equals("BOOLEANO"))
            {
                codigo += "/*Inicio del ciclo REPETIR-HASTA*/" + "\r\n";

                //Para el caso de HACER-MIENTRAS(True)
                if (expresion3D.etqVerdadera == "" && expresion3D.etqFalsa == "")
                {
                    expresion3D.etqVerdadera = memoria.getEtq();
                    expresion3D.etqFalsa     = memoria.getEtq();

                    codigo += expresion3D.etqFalsa + ":" + "\r\n";

                    /*Se concatena las sentencias dentro del repetir_hasta*/
                    codigo += memoria.identar(pasadas.ejecutar());
                    /*Se concatena las sentencias dentro del repetir_hasta*/

                    codigo += expresion3D.codigo;

                    codigo += "\t" + "if " + expresion3D.temporal + "==1 goto " + expresion3D.etqVerdadera + ";\n";
                    codigo += "\t" + "goto " + expresion3D.etqFalsa + ";\n";
                }

                else
                {
                    codigo += expresion3D.etqFalsa + ":" + "\r\n";

                    /*Se concatena las sentencias dentro del repetir_hasta*/
                    codigo += memoria.identar(pasadas.ejecutar());
                    /*Se concatena las sentencias dentro del repetir_hasta*/

                    codigo += expresion3D.codigo;
                }

                codigo += expresion3D.etqVerdadera + ":" + "\r\n";
                codigo += "/*Fin del ciclo REPETIR-HASTA*/" + "\r\n\n";
            }
            else
            {
                memoria.addError("ERROR SEMANTICO ", "La condicion debe ser de tipo booleano", expresion.fila, expresion.columna);
            }

            //Goto etiqueta de retorno y salida
            codigo = memoria.reemplazar(codigo, "goto " + expresion3D.etqVerdadera + ";", "goto " + expresion3D.etqFalsa + ";");
            //Goto etiqueta de retorno y salida
            return(codigo);
        }
Ejemplo n.º 2
0
        public String generar3D()
        {
            String codigo     = "";
            String etqRetorno = memoria.getEtq();
            String etqSalida  = memoria.getEtq();

            codigo += "/*Inicio del LOOP*/" + "\r\n";
            codigo += etqRetorno + ":" + "\r\n";

            /*Se concatena las sentencias dentro del mientras*/
            pasadas pasadas = new pasadas(ambito.tablaSimbolo);

            codigo += memoria.identar(pasadas.ejecutar());
            /*Se concatena las sentencias dentro del mientras*/

            codigo += "goto " + etqRetorno + ";\n";
            codigo += etqSalida + ":" + "\r\n";

            //Goto etiqueta de retorno y salida
            codigo = memoria.reemplazar(codigo, "goto " + etqSalida + ";", "goto " + etqRetorno + ";");
            //Goto etiqueta de retorno y salida

            codigo += "/*Fin del LOOP*/" + "\r\n\n";
            return(codigo);
        }
Ejemplo n.º 3
0
        public String generar3D()
        {
            String  codigo  = "";
            pasadas pasadas = new pasadas(ambito.tablaSimbolo);

            codigo += pasadas.ejecutar();
            return(codigo);
        }
Ejemplo n.º 4
0
        public String generar3D()
        {
            String   codigo      = "";
            cadena3D expresion3D = expresion.resCondicion();

            codigo += "/*Inicio de SI*/" + "\r\n";
            if (expresion3D.tipo == "BOOLEANO")
            {
                codigo += expresion3D.codigo;
                codigo += expresion3D.etqVerdadera + ":" + "\r\n";
                pasadas pasadas = new pasadas(ambito.tablaSimbolo);
                codigo += memoria.identar(pasadas.ejecutar());

                String etiqSalida = memoria.getEtq();
                codigo += "goto " + etiqSalida + ";\r\n";
                codigo += expresion3D.etqFalsa + ":" + "\r\n\n";

                if (lista_sino_si != null)
                {
                    foreach (sino_si sino_si in lista_sino_si)
                    {
                        cadena3D expresion3D_sino_si = sino_si.expresion.resCondicion();

                        if (expresion3D.tipo == "BOOLEANO")
                        {
                            codigo += "//Inicio de sino_si" + "\r\n";
                            codigo += expresion3D_sino_si.codigo;
                            codigo += expresion3D_sino_si.etqVerdadera + ":" + "\r\n";
                            pasadas = new pasadas(sino_si.ambito.tablaSimbolo);
                            codigo += memoria.identar(pasadas.ejecutar());
                            codigo += "goto " + etiqSalida + ";\r\n";
                            codigo += expresion3D_sino_si.etqFalsa + ":" + "\r\n";
                            codigo += "//Fin de sino_si" + "\r\n\n";
                        }
                        else
                        {
                            memoria.addError("ERROR SEMANTICO ", "La condicion SI_NO_SI debe ser de tipo booleano", sino_si.expresion.fila, sino_si.expresion.columna);
                        }
                    }
                }

                if (sino != null)
                {
                    codigo += "//Inicio de sino" + "\r\n";
                    pasadas = new pasadas(sino.ambito.tablaSimbolo);
                    codigo += memoria.identar(pasadas.ejecutar());
                    codigo += "//Inicio de sino" + "\r\n";
                }
                codigo += etiqSalida + ":" + "\r\n";
                codigo += "/*Fin de SI*/" + "\r\n\n";
            }
            else
            {
                memoria.addError("ERROR SEMANTICO ", "La condicion SI debe ser de tipo booleano", expresion.fila, expresion.columna);
            }
            return(codigo);
        }
Ejemplo n.º 5
0
        public String generar3D()
        {
            String codigo       = "";
            String etq1         = memoria.getEtq();
            String etqVerdadera = memoria.getEtq();
            String etqFalsa     = memoria.getEtq();
            String etqSalida    = memoria.getEtq();

            expresion expresion_or  = new expresion(expresion1, expresion2, "||", "||", fila, columna, null);
            expresion expresion_and = new expresion(expresion1, expresion2, "&&", "&&", fila, columna, null);

            cadena3D expresion3D_OR = expresion_or.resCondicion();

            if (expresion3D_OR.tipo.Equals("BOOLEANO"))
            {
                codigo += "/*Inicio del ciclo X*/" + "\r\n";
                codigo += etq1 + ":" + "\r\n";
                codigo += expresion3D_OR.codigo;
                codigo += expresion3D_OR.etqVerdadera + ":" + "\r\n";
                codigo += memoria.identar("goto " + etqVerdadera + ";\r\n");
                codigo += expresion3D_OR.etqFalsa + ":" + "\r\n";
                codigo += memoria.identar("goto " + etqSalida + ";\r\n");

                codigo += etqVerdadera + ":" + "\r\n";
                /*Se concatena las sentencias dentro del mientras*/
                pasadas pasadas = new pasadas(ambito.tablaSimbolo);
                codigo += memoria.identar(pasadas.ejecutar());
                /*Se concatena las sentencias dentro del mientras*/
                cadena3D expresion3D_AND = expresion_and.resCondicion();
                codigo += expresion3D_AND.codigo;
                codigo += expresion3D_AND.etqVerdadera + ":" + "\r\n";
                codigo += memoria.identar("goto " + etqVerdadera + ";\r\n");
                codigo += expresion3D_AND.etqFalsa + ":" + "\r\n";
                codigo += memoria.identar("goto " + etqSalida + ";\r\n");

                codigo += etqSalida + ":" + "\r\n";
                codigo += "/*Fin del ciclo X*/" + "\r\n\n";
            }
            else
            {
                memoria.addError("ERROR SEMANTICO ", "La condicion debe ser de tipo booleano", fila, columna);
            }
            //Goto etiqueta de retorno y salida
            codigo = memoria.reemplazar(codigo, "goto " + etqSalida + ";", "goto " + etq1 + ";");
            //Goto etiqueta de retorno y salida
            return(codigo);
        }
Ejemplo n.º 6
0
        public String generar3D()
        {
            String codigo = "";

            codigo += "/*Inicio del ciclo para*/" + "\r\n";
            if (declara_asigna.rol.Equals("DECLARACION"))
            {
                declaracion declaracion = (declaracion)declara_asigna.valor;
                codigo += declaracion.generar3D();
            }
            else
            {
                asignacion asignacion = (asignacion)declara_asigna.valor;
                codigo += asignacion.generar3D();
            }

            String   etqRetorno  = memoria.getEtq();
            cadena3D expresion3D = condicion.resCondicion();

            if (expresion3D.tipo.Equals("BOOLEANO"))
            {
                codigo += etqRetorno + ":" + "\r\n";
                codigo += expresion3D.codigo;
                codigo += expresion3D.etqVerdadera + ":" + "\r\n";

                /*Se concatena las sentencias dentro del for*/
                pasadas pasadas = new pasadas(ambito.tablaSimbolo);
                codigo += memoria.identar(pasadas.ejecutar());
                /*Se concatena las sentencias dentro del for*/

                codigo += ((aumento_decremento)decre_aum.valor).generar3D();

                codigo += "goto " + etqRetorno + ";\r\n";
                codigo += expresion3D.etqFalsa + ":" + "\r\n";
            }
            else
            {
                memoria.addError("ERROR SEMANTICO ", "La condicion debe ser de tipo booleano", condicion.fila, condicion.columna);
            }
            codigo += "/*Fin del ciclo para*/" + "\r\n\n";

            //Goto etiqueta de retorno y salida
            codigo = memoria.reemplazar(codigo, "goto " + expresion3D.etqFalsa + ";", "goto " + etqRetorno + ";");
            //Goto etiqueta de retorno y salida
            return(codigo);
        }
Ejemplo n.º 7
0
        public String generar3D()
        {
            String codigo = "";

            codigo += "void " + nombre + "(){\n";

            pasadas pasadas = new pasadas(ambito.tablaSimbolo);

            codigo += memoria.identar(pasadas.ejecutar());
            String etq = memoria.getEtq();

            codigo += memoria.identar(etq + ":\r\n");

            codigo += "}" + "\r\n\n";

            codigo = codigo.Replace("~RETORNAR~", "goto " + etq + ";");
            return(codigo);
        }
Ejemplo n.º 8
0
        public String generar3D()
        {
            String   codigo      = "";
            cadena3D expresion3D = expresion.resCondicion();
            String   etiqSalida  = memoria.getEtq();

            codigo += "/*Inicio de Elegir*/" + "\r\n";
            codigo += expresion3D.codigo;
            if (lista_caso != null)
            {
                foreach (caso caso in lista_caso)
                {
                    cadena3D expresion_caso = caso.expresion.resCondicion();
                    codigo += expresion_caso.codigo;
                    String etiqFalsa = memoria.getEtq();
                    codigo += "//Inicio de  caso" + "\r\n";
                    codigo += "ifFalse " + expresion3D.temporal + "==" + expresion_caso.temporal + " goto " + etiqFalsa + "; \r\n";
                    pasadas pasadas = new pasadas(caso.ambito.tablaSimbolo);
                    codigo += memoria.identar(pasadas.ejecutar());
                    codigo += etiqFalsa + ": \r\n";
                    codigo += "//Fin de caso" + "\r\n";
                }
            }

            if (defecto != null)
            {
                codigo += "//Inicio Defecto" + "\r\n";
                pasadas pasadas = new pasadas(defecto.ambito.tablaSimbolo);
                codigo += memoria.identar(pasadas.ejecutar());
                codigo += "//Fin Defecto" + "\r\n";
            }
            codigo += etiqSalida + ":" + "\r\n";
            codigo += "/*Fin de Elegir*/" + "\r\n\n";

            codigo = memoria.reemplazar(codigo, "goto " + etiqSalida + ";", "");
            return(codigo);
        }