Example #1
0
        public void ImprimirDecimal()
        {
            Variable v = Tabla3D.BuscarVariable(Temporal);

            if (v != null)
            {
                if (v.Valor != null)
                {
                    FNodoExpresion valor = (FNodoExpresion)v.Valor;
                    if (valor.Tipo.Equals(Constante.TDecimal))
                    {
                        TitusTools.ImprimirConsola(valor.Decimal.ToString());
                        TitusTools.ImprimirConsola("\n");
                    }
                    else
                    {
                        TitusTools.InsertarError(Constante.TErrorSemantico, "No se puede imprimir un decimal porque el valor no es decimal del temporal " + Temporal, TitusTools.GetRuta(), Padre.Fila, Padre.Columna);
                    }
                }
                else
                {
                    TitusTools.InsertarError(Constante.TErrorSemantico, "No se ha asignado ningun valor al temporal " + Temporal, TitusTools.GetRuta(), Padre.Fila, Padre.Columna);
                }
            }
            else
            {
                TitusTools.InsertarError(Constante.TErrorSemantico, "No existe el temporal " + Temporal, TitusTools.GetRuta(), Padre.Fila, Padre.Columna);
            }
        }
Example #2
0
        public String Generar3D()
        {
            String cadena = "\t\t//Comienza elegir\n";

            String salida = TitusTools.GetEtq();


            Nodo3D cond = Condicion.Generar3D();

            cadena += cond.Codigo;

            foreach (FCaso caso in Casos)
            {
                cadena += caso.Generar3D(cond);
            }

            if (Defecto != null)
            {
                cadena += Defecto.Generar3D();
            }

            cadena += "\t" + salida + "://termina elegir\n";

            cadena = cadena.Replace("§salir§;", "goto " + salida + ";\n");

            return(cadena);
        }
Example #3
0
        public String Ejecutar()
        {
            FNodoExpresion aux = Condicion.ResolverExpresion();

            if (!TitusTools.HayErrores())
            {
                if (aux.Tipo.Equals(Constante.TBooleano))
                {
                    if (this.Tipo.Equals(Constante.TIf))
                    {
                        if (aux.Bool)
                        {
                            return(Etiqueta);
                        }
                    }
                    else
                    {
                        if (!aux.Bool)
                        {
                            return(Etiqueta);
                        }
                    }
                }
            }

            return("");
        }
        //para asignacion
        public Nodo3D Generar3DAsignacion()
        {
            Nodo3D nodo = new Nodo3D();

            Simbolo sim = Padre.BuscarVariable(this.Nombre);

            if (sim != null)//es un arreglo
            {
                FLlamadaArreglo arr = new FLlamadaArreglo(this.Nombre, Parametros, Fila, Columna);
                arr.setPadre(Padre);

                nodo = arr.Generar3DAsignacion();
            }
            else// es un metodo
            {
                FLlamadaMetodo metodo = new FLlamadaMetodo(this.Nombre, this.Parametros, Fila, Columna);
                metodo.setPadre(Padre);

                nodo = metodo.Generar3DAsignacion();

                sim = metodo.Encontrado;
            }

            if (sim == null)
            {
                TitusTools.InsertarError(Constante.TErrorSemantico, "No se encontro un arreglo o metodo para ejecutar", TitusTools.GetRuta(), Fila, Columna);
            }

            return(nodo);
        }
Example #5
0
        static void Regla3(List <Simbolo> Mirilla)
        {
            int     tope = Mirilla.Count;
            Simbolo si   = null;
            Simbolo gt   = null;

            for (int i = 0; i < tope; i++)
            {
                Simbolo aux = Mirilla[i];
                if (aux.Tipo == Constante.TIf)
                {
                    FIf f = (FIf)aux.Valor;
                    if (f.Tipo.Equals(Constante.TIf))
                    {
                        si = aux;
                    }
                }
                else
                {
                    if (si != null && gt == null)
                    {
                        if (aux.Rol.Equals(Constante.TGoto))
                        {
                            gt = aux;
                        }
                        else
                        {
                            si = null;
                        }
                    }
                    else
                    {
                        if (gt != null)
                        {
                            if (aux.Rol.Equals(Constante.Etiqueta))
                            {
                                FIf f = (FIf)si.Valor;
                                if (f.Etiqueta.Equals(aux.Nombre))
                                {
                                    TitusTools.InsertarReporteOptimizacion("Regla 3", "if " + f.Condicion.Generar3DOptimizado() + " goto " + f.Etiqueta, si.Fila, si.Columna);
                                    f.Tipo     = Constante.TIfFalse;
                                    f.Etiqueta = gt.Nombre;
                                    Mirilla.Remove(gt);
                                    Mirilla.Remove(aux);
                                    tope = Mirilla.Count;
                                    i    = i - 2;
                                    si   = null;
                                    gt   = null;
                                }
                            }
                            else
                            {
                                si = null;
                                gt = null;
                            }
                        }
                    }
                }
            }
        }
Example #6
0
        private Simbolo BuscarVariableHerencia(String nombre)
        {
            Simbolo var = null;
            Simbolo sim = BuscarClasePadre();

            FClase clase = (FClase)sim.Valor;

            if (!clase.Herencia.Equals(""))
            {
                Simbolo bc = BuscarClase(clase.Herencia, clase.ArchivoPadre);
                if (bc != null)
                {
                    var = bc.BuscarVariable(nombre);
                    if (var != null)
                    {
                        if (var.Visibilidad.Equals(Constante.TPublico) || var.Visibilidad.Equals(Constante.TProtegido))
                        {
                            var.Posicion += sim.Tamaño;
                        }
                        else
                        {
                            var = null;
                        }
                    }
                }
                else
                {
                    TitusTools.InsertarError(Constante.TErrorSemantico, "No se encontro una clase para herederar con el nombre " + clase.Herencia, TitusTools.GetRuta(), sim.Fila, sim.Columna);
                }
            }

            return(var);
        }
Example #7
0
        public void EjecutarError(Simbolo sim)
        {
            switch (sim.Nombre)
            {
            case "1":
                TitusTools.InsertarError(Constante.TErrorSemantico, "Acceso fuera de los limites", TitusTools.GetRuta(), sim.Fila, sim.Columna);
                break;

            case "2":
                TitusTools.InsertarError(Constante.TErrorSemantico, "No se puede asignar el arreglo por que las dimensiones y sus tamaños no son iguales", TitusTools.GetRuta(), sim.Fila, sim.Columna);
                break;

            case "3":
                TitusTools.InsertarError(Constante.TErrorSemantico, "No se puedo convertir de cadena a entero", TitusTools.GetRuta(), sim.Fila, sim.Columna);
                break;

            case "4":
                TitusTools.InsertarError(Constante.TErrorSemantico, "No se puede convertir de cadena a decimal", TitusTools.GetRuta(), sim.Fila, sim.Columna);
                break;

            default:
                TitusTools.InsertarError(Constante.TErrorSemantico, "Error desconocido", TitusTools.GetRuta(), sim.Fila, sim.Columna);
                break;
            }
        }
Example #8
0
        public void AsignarTemporal()
        {
            Variable variable = Tabla3D.BuscarVariable(Temporal);

            if (variable != null)
            {
                FNodoExpresion valor = this.Valor.ResolverExpresion();
                if (!TitusTools.HayErrores())
                {
                    if (valor.Tipo.Equals(Constante.TEntero) || valor.Tipo.Equals(Constante.TDecimal))
                    {
                        variable.Valor = valor;
                        Console.WriteLine(variable.Nombre + " = " + valor.Cadena);
                    }
                    else
                    {
                        TitusTools.InsertarError(Constante.TErrorSemantico, "Se esperaba un valor numerico.", TitusTools.GetRuta(), this.Valor.Fila, this.Valor.Columna);
                    }
                }
            }
            else
            {
                TitusTools.InsertarError(Constante.TErrorSemantico, "No se encontroo el temporal " + this.Temporal, TitusTools.GetRuta(), this.Valor.Fila, this.Valor.Columna);
            }
        }
Example #9
0
        static void Regla19(List <Simbolo> Mirilla)
        {
            foreach (Simbolo sim in Mirilla.ToList())
            {
                if (sim.Rol.Equals(Constante.ASIGNACION))
                {
                    FAsignacion3D asignacion = (FAsignacion3D)sim.Valor;

                    if (asignacion.Valor.Tipo.Equals(Constante.TDivision))
                    {
                        FNodoExpresion izq = asignacion.Valor.Izquierda;
                        FNodoExpresion der = asignacion.Valor.Derecha;

                        if (izq.Tipo.Equals(Constante.TEntero))
                        {
                            if (der.Tipo == Constante.TP || der.Tipo == Constante.Temporal || der.Tipo == Constante.TH)
                            {
                                if (izq.Entero == 0)
                                {
                                    asignacion.Valor = izq;
                                    TitusTools.InsertarReporteOptimizacion("Regla 19", asignacion.Temporal + " = 0 / " + der.Nombre + ";", sim.Fila, sim.Columna);
                                    //Mirilla.Remove(sim);
                                }
                            }
                        }
                    }
                }
            }
        }
Example #10
0
        static void Regla16(List <Simbolo> Mirilla)
        {
            foreach (Simbolo sim in Mirilla.ToList())
            {
                if (sim.Rol.Equals(Constante.ASIGNACION))
                {
                    FAsignacion3D asignacion = (FAsignacion3D)sim.Valor;

                    if (asignacion.Valor.Tipo.Equals(Constante.TPotenciaOCL))
                    {
                        FNodoExpresion izq = asignacion.Valor.Izquierda;
                        FNodoExpresion der = asignacion.Valor.Derecha;

                        if (der.Tipo.Equals(Constante.TEntero))
                        {
                            if (izq.Tipo == Constante.TP || izq.Tipo == Constante.Temporal || izq.Tipo == Constante.TH)
                            {
                                if (der.Entero == 2)
                                {
                                    asignacion.Valor = new FNodoExpresion(izq, izq, Constante.TPor, Constante.TPor, asignacion.Valor.Fila, asignacion.Valor.Columna, null);
                                    TitusTools.InsertarReporteOptimizacion("Regla 16", asignacion.Temporal + " = " + izq.Nombre + " ^ 2;", sim.Fila, sim.Columna);
                                    //Mirilla.Remove(sim);
                                }
                            }
                        }
                    }
                }
            }
        }
Example #11
0
        static void Regla11(List <Simbolo> Mirilla)
        {
            foreach (Simbolo sim in Mirilla.ToList())
            {
                if (sim.Rol.Equals(Constante.ASIGNACION))
                {
                    FAsignacion3D asignacion = (FAsignacion3D)sim.Valor;
                    if (asignacion.Tipo.Equals(Constante.Temporal))
                    {
                        if (asignacion.Valor.Tipo.Equals(Constante.TDivision))
                        {
                            FNodoExpresion izq = asignacion.Valor.Izquierda;
                            FNodoExpresion der = asignacion.Valor.Derecha;

                            if (izq != null)
                            {
                                if (izq.Tipo.Equals(Constante.TEntero) || der.Tipo.Equals(Constante.TEntero))
                                {
                                    if (izq.Tipo == Constante.Temporal && asignacion.Temporal.Equals(izq.Nombre))
                                    {
                                        if (der.Entero == 1)
                                        {
                                            TitusTools.InsertarReporteOptimizacion("Regla 11", asignacion.Temporal + " = " + izq.Nombre + " / 1;", sim.Fila, sim.Columna);
                                            Mirilla.Remove(sim);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Example #12
0
        public Simbolo BuscarMetodoHerencia(String nombre, List <Nodo3D> parametros)
        {
            Simbolo var = null;
            Simbolo sim = BuscarClasePadre();

            FClase clase = (FClase)sim.Valor;

            if (!clase.Herencia.Equals(""))
            {
                Simbolo bc = BuscarClase(clase.Herencia, clase.ArchivoPadre);
                if (bc != null)
                {
                    var = bc.BuscarMetodo(nombre, parametros);
                    if (var != null)
                    {
                        if (!var.Visibilidad.Equals(Constante.TPublico) && !var.Visibilidad.Equals(Constante.TProtegido))
                        {
                            var = null;
                        }
                    }
                }
                else
                {
                    TitusTools.InsertarError(Constante.TErrorSemantico, "No se encontro una clase para herederar con el nombre " + clase.Herencia, TitusTools.GetRuta(), sim.Fila, sim.Columna);
                }
            }

            return(var);
        }
Example #13
0
 public void GenerarTablaSimbolos()
 {
     IniciarTablaSimbolos();
     foreach (Simbolo simbolo in Clases.TablaSimbolo)
     {
         GenerarTablaSimbolos(simbolo, "");
     }
     TitusTools.InsertarTablaSimbolos(this.TablaSimbolos);
 }
Example #14
0
        public String Generar3DInit()
        {
            String temp = TitusTools.GetTemp();
            String init = "void init_" + this.Nombre + "(){\n";

            init += "\t\t" + temp + " = H;\n";
            int sizeherencia = Ambito.Tamaño;

            String init3 = "";

            foreach (Simbolo sim in Ambito.TablaSimbolo)
            {
                if (sim.Rol.Equals(Constante.DECLARACION))
                {
                    FDeclaracion decla = (FDeclaracion)sim.Valor;
                    init3 += decla.Generar3DInit(temp, 0);
                }
            }

            //buscamos los init de los hereda

            if (!Herencia.Equals(""))
            {
                String herencia = Herencia;
                while (herencia != "")
                {
                    Simbolo clase = Padre.BuscarClase(herencia, ArchivoPadre);
                    if (clase != null)
                    {
                        FClase nuevaclase = (FClase)clase.Valor;
                        foreach (Simbolo sim in nuevaclase.Ambito.TablaSimbolo)
                        {
                            if (sim.Rol.Equals(Constante.DECLARACION))
                            {
                                FDeclaracion decla = (FDeclaracion)sim.Valor;
                                init3 += decla.Generar3DInit(temp, sizeherencia);
                            }
                        }
                        sizeherencia += nuevaclase.Ambito.Tamaño;
                        herencia      = nuevaclase.Herencia;
                    }
                    else
                    {
                        TitusTools.InsertarError(Constante.TErrorSemantico, "No se encontro la clase para heredar " + herencia, TitusTools.GetRuta(), Padre.Fila, Padre.Columna);
                        break;
                    }
                }
            }

            String init2 = "\t\t" + "H = H + " + sizeherencia.ToString() + ";\n";

            init += init2 + init3;

            init += "}\n\n";
            return(init);
        }
Example #15
0
        private String GenerarRetornar()
        {
            String  cadena      = "";
            Nodo3D  val         = ((FNodoExpresion)Valor).Generar3D();
            Simbolo metodopadre = BuscarMetodoPadre();
            FMetodo met         = (FMetodo)metodopadre.Valor;
            String  tipometodo  = metodopadre.Tipo;

            if (met.Dimensiones > 0)
            {
                tipometodo = "arreglo " + tipometodo;
            }

            if (val.Tipo.Equals(Constante.TBooleano))
            {
                if (val.V == "" && val.F == "")
                {//si trae etiquetas viene de una relacional si no es un bool nativo
                }
                else
                {
                    var cad = "";

                    var auxtemp = TitusTools.GetTemp();
                    var salida  = TitusTools.GetEtq();

                    cad += "\t" + val.V + ":\n";
                    cad += "\t\t" + auxtemp + " = 1;\n";
                    cad += "\t\t" + "goto " + salida + ";\n";
                    cad += "\t" + val.F + ":\n";
                    cad += "\t\t" + auxtemp + " = 0;\n";
                    cad += "\t" + salida + ":\n";

                    val.Valor  = auxtemp;
                    cad       += "\t\t" + val.Valor + " =  - " + auxtemp + ";\n";
                    val.Codigo = val.Codigo + cad;
                }
            }

            if (tipometodo.Equals(val.Tipo))
            {
                String retorno = TitusTools.GetTemp();
                cadena += val.Codigo;
                cadena += "\t\t" + retorno + " = P + 1;//Posicion de retorno\n";
                cadena += "\t\t" + "Stack[" + retorno + "] = " + val.Valor + ";//Asignacion de retorno\n";

                cadena += "\t\t§retornar§;\n";
            }
            else
            {
                TitusTools.InsertarError(Constante.TErrorSemantico, "El metodo " + met.Nombre + " solo puede retornar un tipo " + tipometodo + ", no un tipo " + val.Tipo, TitusTools.GetRuta(), Fila, Columna);
            }


            return(cadena);
        }
Example #16
0
        public String Generar3D()
        {
            String cadena = "\t\t//Comienza si\n";

            Nodo3D cond = Condicion.Generar3D();

            if (cond.Tipo == Constante.TBooleano)
            {
                String salida = TitusTools.GetEtq();
                //Parte del if
                cadena += cond.Codigo;
                if (cond.V != "" && cond.F != "")
                {
                    cadena += "\t" + cond.V + ":\n";
                    foreach (Simbolo sim in Ambito.TablaSimbolo)//cuerpo si es verdadero
                    {
                        cadena += sim.Generar3D();
                    }
                }
                else
                {
                    cond.V = TitusTools.GetEtq();
                    cond.F = TitusTools.GetEtq();

                    cadena += "\t\t" + "if " + cond.Valor + " == 1 goto " + cond.V + ";\n";
                    cadena += "\t\t" + "goto " + cond.F + ";\n";
                    cadena += "\t" + cond.V + ":\n";
                    foreach (Simbolo sim in Ambito.TablaSimbolo)//cuerpo si es verdadero
                    {
                        cadena += sim.Generar3D();
                    }
                }
                cadena += "\t\t" + "goto " + salida + ";\n";
                cadena += "\t" + cond.F + ":\n";

                //parte de los sinosi
                foreach (FSinoSi sinosi in SinoSi)
                {
                    cadena += sinosi.Generar3D(salida);
                }

                if (Sino != null)
                {
                    cadena += Sino.Generar3D(salida);
                }
                cadena += "\t" + salida + "://Termina si\n";
            }
            else
            {
                TitusTools.InsertarError(Constante.TErrorSemantico, "La sentencia si esperaba un tipo booleano no un tipo " + cond.Tipo, TitusTools.GetRuta(), Padre.Fila, Padre.Columna);
            }

            return(cadena);
        }
Example #17
0
 public void Ejecutar()
 {
     PrimerPasada();
     if (!TitusTools.HayErrores())
     {
         MessageBox.Show("Ejecucion de codigo 3D finalizada con exito.", "Codigo 3D", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     else
     {
         MessageBox.Show("Se encontraron errores", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
Example #18
0
        public void EjecutarLlamadaMetodo(Simbolo sim)
        {
            FMetodo metodo = Tabla3D.BuscarMetodo(sim.Nombre);

            if (metodo != null)
            {
                metodo.Ejecutar();
            }
            else
            {
                TitusTools.InsertarError(Constante.TErrorSemantico, "No se encontro el metodo " + sim.Nombre, TitusTools.GetRuta(), sim.Fila, sim.Columna);
            }
        }
Example #19
0
        static void Regla7(List <Simbolo> Mirilla)
        {
            int     tope = Mirilla.Count;
            Simbolo go   = null;
            Simbolo et   = null;

            for (int i = 0; i < tope; i++)
            {
                Simbolo aux = Mirilla[i];
                if (aux.Rol == Constante.TIf && go == null && et == null)
                {
                    go = aux;
                }
                else
                {
                    if (go != null && et == null)
                    {
                        if (aux.Rol.Equals(Constante.Etiqueta))
                        {
                            FIf f = (FIf)go.Valor;
                            if (aux.Nombre.Equals(f.Etiqueta))
                            {
                                et = aux;
                            }
                            else
                            {
                                go = null;
                            }
                        }
                    }
                    else
                    {
                        if (aux.Rol.Equals(Constante.TGoto))
                        {
                            FIf f = (FIf)go.Valor;
                            TitusTools.InsertarReporteOptimizacion("Regla 7", "if " + f.Condicion.Generar3DOptimizado() + "goto " + f.Etiqueta, go.Fila, go.Columna);
                            f.Etiqueta = aux.Nombre;
                            go         = null;
                            et         = null;
                        }
                        else
                        {
                            go = null;
                            et = null;
                        }
                    }
                }
            }
        }
Example #20
0
        public String Generar3D(String salida)
        {
            String cadena = "\t\t//Comienza sino\n";

            if (!TitusTools.HayErrores())
            {
                foreach (Simbolo sim in Ambito.TablaSimbolo)//cuerpo si es verdadero
                {
                    cadena += sim.Generar3D();
                }
                cadena += "\t\t" + "//Termina sino\n";
            }

            return(cadena);
        }
Example #21
0
        public void GenerarImports()
        {
            List <String> nuevosImports = new List <String>();

            foreach (String ruta in Imports)
            {
                if (!TitusTools.ExisteArchivo(ruta))
                {
                    if (ruta.ToLower().Contains("http://"))
                    {
                        ObtenerCodigoArchivos(ruta, 0);
                    }
                    else if (ruta.ToLower().Contains("\\"))
                    {
                        if (ruta.ToLower().Contains(".tree"))
                        {
                            ObtenerCodigoArchivos(ruta, 1);
                        }
                        else if (ruta.ToLower().Contains(".olc"))
                        {
                            ObtenerCodigoArchivos(ruta, 2);
                        }
                        else
                        {
                            TitusTools.InsertarError(Constante.TErrorSemantico, "No se puede importar la ruta " + ruta, this.Ruta, 1, 1);
                        }
                    }
                    else
                    {
                        if (ruta.ToLower().Contains(".tree"))
                        {
                            nuevosImports.Add(Path.GetDirectoryName(this.Ruta) + "\\" + ruta);
                            ObtenerCodigoArchivos(Path.GetDirectoryName(this.Ruta) + "\\" + ruta, 1);
                        }
                        else if (ruta.ToLower().Contains(".olc"))
                        {
                            nuevosImports.Add(Path.GetDirectoryName(this.Ruta) + "\\" + ruta);
                            ObtenerCodigoArchivos(Path.GetDirectoryName(this.Ruta) + "\\" + ruta, 2);
                        }
                        else
                        {
                            TitusTools.InsertarError(Constante.TErrorSemantico, "No se puede importar la ruta " + ruta, this.Ruta, 1, 1);
                        }
                    }
                }
            }
            Imports = nuevosImports;
        }
Example #22
0
        public void PrimerPasada()
        {
            //Limpiamos las variables que utilizamos para la ejecucion
            Tabla3D.IniciarTabla();

            //buscamos el main y apartamos la primera posicion de la tabla de variables


            foreach (Simbolo sim in Codigo3D.TablaSimbolo)
            {
                if (sim.Rol.Equals(Constante.TMain))
                {
                    if (Tabla3D.Tabla.Count == 0)
                    {
                        Tabla3D.Tabla.Insert(0, new Variable(sim.Nombre, sim.Rol, sim.Fila, sim.Columna, sim.Ambito, sim.Valor));
                    }
                    else
                    {
                        TitusTools.InsertarError(Constante.TErrorSemantico, "Exite mas de un metodo main", TitusTools.GetRuta(), 1, 1);
                    }
                }
            }

            foreach (Simbolo sim in Codigo3D.TablaSimbolo)
            {
                if (!sim.Rol.Equals(Constante.TMain))
                {
                    Tabla3D.Tabla.Add(new Variable(sim.Nombre, sim.Rol, sim.Fila, sim.Columna, sim.Ambito, sim.Valor));
                }
            }

            if (!TitusTools.HayErrores())
            {
                if (Tabla3D.Tabla.Count > 0)
                {
                    if (!Tabla3D.Tabla[0].Rol.Equals(Constante.TMain))
                    {
                        TitusTools.InsertarError(Constante.TErrorSemantico, "No se encontro un metodo main", TitusTools.GetRuta(), 1, 1);
                    }
                    else
                    {
                        FMetodo main = (FMetodo)Tabla3D.Tabla[0].Valor;
                        main.Ejecutar();
                    }
                }
            }
        }
Example #23
0
        public String Generar3D()
        {
            String cadena = "";

            String retorno = TitusTools.GetEtq();

            if (!TitusTools.HayErrores())
            {
                cadena  = "\t\t//Comienza para\n";
                cadena += AccionAnterior.Generar3D();//asignacion de variables
                cadena += "\t" + retorno + ":\n";


                Nodo3D cond = Condicion.Generar3D();

                cadena += cond.Codigo;
                if (cond.Tipo == Constante.TBooleano)
                {
                    if (cond.V == "" || cond.F == "")
                    {
                        cond.V = TitusTools.GetEtq();
                        cond.F = TitusTools.GetEtq();


                        cadena += "\t" + "if " + cond.Valor + " == 1 goto " + cond.V + ";\n";
                        cadena += "\t" + "goto " + cond.F + ";\n";
                    }
                    cadena += "\t" + cond.V + ":\n";
                    foreach (Simbolo sim in Ambito.TablaSimbolo)//cuerpo si es verdadero
                    {
                        cadena += sim.Generar3D();
                    }
                    cadena += AccionSiguiente.Generar3D();//actualizacion de varaibles
                    cadena += "\t\t" + "goto " + retorno + ";\n";
                    cadena += "\t" + cond.F + "://Termina para\n";

                    cadena = cadena.Replace("§salir§;", "goto " + cond.F + ";\n");
                    cadena = cadena.Replace("§continuar§;", "goto " + cond.V + ";\n");
                }
                else
                {
                    TitusTools.InsertarError(Constante.TErrorSemantico, "El ciclo for esperaba un tipo booleano no un tipo " + cond.Tipo, TitusTools.GetRuta(), Padre.Fila, Padre.Columna);
                }
            }

            return(cadena);
        }
Example #24
0
        static void Regla6(List <Simbolo> Mirilla)
        {
            int     tope = Mirilla.Count;
            Simbolo go   = null;
            Simbolo et   = null;

            for (int i = 0; i < tope; i++)
            {
                Simbolo aux = Mirilla[i];
                if (aux.Rol == Constante.TGoto && go == null && et == null)
                {
                    go = aux;
                }
                else
                {
                    if (go != null && et == null)
                    {
                        if (aux.Rol.Equals(Constante.Etiqueta))
                        {
                            if (aux.Nombre.Equals(go.Nombre))
                            {
                                et = aux;
                            }
                            else
                            {
                                go = null;
                            }
                        }
                    }
                    else
                    {
                        if (aux.Rol.Equals(Constante.TGoto))
                        {
                            TitusTools.InsertarReporteOptimizacion("Regla 6", "goto " + go.Nombre, go.Fila, go.Columna);
                            go.Nombre = aux.Nombre;
                            go        = null;
                            et        = null;
                        }
                        else
                        {
                            go = null;
                            et = null;
                        }
                    }
                }
            }
        }
Example #25
0
        public String Generar3D()
        {
            String cadena = "";

            Nodo3D val = Valor.Generar3D();

            cadena += val.Codigo;
            switch (val.Tipo)
            {
            case Constante.TCadena:
            {
                String temp = TitusTools.GetTemp();
                String etq  = TitusTools.GetEtq();

                cadena += "\t" + etq + "://comienza imprimir\n";
                cadena += "\t\t" + temp + " = " + "Heap[" + val.Valor + "];\n";
                cadena += "\t\t" + "print(\"%c\", " + temp + ");\n";
                cadena += "\t\t" + val.Valor + " = " + val.Valor + " + 1 ;\n";
                cadena += "\t\t" + "if " + temp + " != 0 goto " + etq + ";//Termina imprimir\n";
            }
            break;

            case Constante.TCaracter:
            {
                cadena += "\t\t" + "print(\"%c\", " + val.Valor + ");//Termina imprimir\n";
            }
            break;

            case Constante.TEntero:
            {
                cadena += "\t\t" + "print(\"%d\", " + val.Valor + ");//Termina imprimir\n";
            }
            break;

            case Constante.TDecimal:
            {
                cadena += "\t\t" + "print(\"%f\", " + val.Valor + ");//Termina imprimir\n";
            }
            break;

            default:
                TitusTools.InsertarError(Constante.TErrorSemantico, "No se puede imprimir un tipo " + val.Tipo, TitusTools.GetRuta(), Padre.Fila, Padre.Columna);
                break;
            }

            return(cadena);
        }
Example #26
0
        static void Regla2(List <Simbolo> Mirilla)
        {
            int     star = -1;
            int     end  = -1;
            int     tope = Mirilla.Count;
            Simbolo gt   = null;

            for (int i = 0; i < tope; i++)
            {
                if (gt == null)
                {
                    if (Mirilla[i].Rol.Equals(Constante.TGoto))
                    {
                        gt   = Mirilla[i];
                        star = i;
                    }
                }
                else
                {
                    if (Mirilla[i].Rol.Equals(Constante.Etiqueta))
                    {
                        if (Mirilla[i].Nombre.Equals(gt.Nombre))
                        {
                            end = i;

                            i = i - ((end - star) - 1);
                            Mirilla.RemoveRange(star + 1, end - star - 1);
                            tope = Mirilla.Count;

                            if (end - star - 1 > 0)
                            {
                                TitusTools.InsertarReporteOptimizacion("Regla 2", "goto " + gt.Nombre, gt.Fila, gt.Columna);
                            }

                            gt   = null;
                            star = -1;
                            end  = -1;
                        }
                        else
                        {
                            gt   = null;
                            star = -1;
                        }
                    }
                }
            }
        }
Example #27
0
        public int EjecutarGoTo(Simbolo sim)
        {
            Boolean estado   = false;
            int     i        = -1;
            Simbolo anterior = sim.Anterior;

            while (anterior != null)
            {
                if (anterior.Rol.Equals(Constante.Etiqueta) && anterior.Nombre.Equals(sim.Nombre))
                {
                    estado = true;

                    break;
                }
                i--;
                anterior = anterior.Anterior;
            }


            if (!estado)
            {
                i = 1;
                Simbolo siguiente = sim.Siguiente;
                while (siguiente != null)
                {
                    if (siguiente.Rol.Equals(Constante.Etiqueta) && siguiente.Nombre.Equals(sim.Nombre))
                    {
                        estado = true;
                        break;
                    }
                    i++;
                    siguiente = siguiente.Siguiente;
                }
            }


            if (estado)
            {
                return(i);
            }
            else
            {
                TitusTools.InsertarError(Constante.TErrorSemantico, "No se econtro la etiqueta " + sim.Nombre, TitusTools.GetRuta(), sim.Fila, sim.Columna);
                return(0);
            }
        }
Example #28
0
        public void AsignarP()
        {
            FNodoExpresion valor = this.Valor.ResolverExpresion();

            if (!TitusTools.HayErrores())
            {
                if (valor.Tipo.Equals(Constante.TEntero))
                {
                    Tabla3D.P = valor.Entero;
                    Console.WriteLine("P = " + valor.Cadena);
                }
                else
                {
                    TitusTools.InsertarError(Constante.TErrorSemantico, "Se esperaba un valor numerico.", TitusTools.GetRuta(), this.Valor.Fila, this.Valor.Columna);
                }
            }
        }
Example #29
0
        public String Generar3D()
        {
            String cadena = "";
            String salida = TitusTools.GetEtq();

            cadena += "void " + GetNombre3D() + "(){\n";

            foreach (Simbolo simbolo in Ambito.TablaSimbolo)
            {
                cadena += simbolo.Generar3D();
            }
            cadena += "\t" + salida + ":\n";
            cadena += "}\n\n";
            cadena  = cadena.Replace("§retornar§;", "goto " + salida + ";//salida al fin de metodo\n");

            return(cadena);
        }
Example #30
0
        public void AsignarStack()
        {
            FNodoExpresion acceso = this.Acceso.ResolverExpresion();
            FNodoExpresion valor  = this.Valor.ResolverExpresion();

            if (!TitusTools.HayErrores())
            {
                if (acceso.Tipo.Equals(Constante.TEntero))
                {
                    Tabla3D.InsertarStack(acceso.Entero, valor);
                    Console.WriteLine(Acceso.Fila.ToString() + " Stack[" + acceso.Cadena + "] = " + valor.Cadena);
                }
                else
                {
                    TitusTools.InsertarError(Constante.TErrorSemantico, "Se esperaba un valor entero para acceder al heap.", TitusTools.GetRuta(), this.Acceso.Fila, this.Acceso.Columna);
                }
            }
        }