Ejemplo n.º 1
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;
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public Ambito(String nombre, List <Simbolo> tablasimbolo)
        {
            this.TablaSimbolo = tablasimbolo;
            this.Nombre       = nombre;
            this.Tamaño       = 0;

            Simbolo Hermano = null;

            foreach (Simbolo s in tablasimbolo)
            {
                this.Tamaño += s.Tamaño;
                s.Hermano    = Hermano;
                Hermano      = s;
            }
        }
Ejemplo n.º 3
0
 public Simbolo(Simbolo sim)
 {
     this.Visibilidad = sim.Visibilidad;
     this.Tipo        = sim.Tipo;
     this.Nombre      = sim.Nombre;
     this.Rol         = sim.Rol;
     this.Fila        = sim.Fila;
     this.Columna     = sim.Columna;
     this.Ambito      = sim.Ambito;
     this.Tamaño      = sim.Tamaño;
     this.Posicion    = sim.Posicion;
     this.Hermano     = sim.Hermano;
     this.Padre       = sim.Padre;
     this.Valor       = sim.Valor;
     this.este        = sim.este;
 }
Ejemplo n.º 4
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;
                        }
                    }
                }
            }
        }
Ejemplo n.º 5
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;
                        }
                    }
                }
            }
        }
Ejemplo n.º 6
0
        private Simbolo BuscarClaseImports(String nombre, String import)
        {
            Simbolo clase = null;

            //buscamos cada uno de los imports para ver si coinciden con el de los archivos
            foreach (Archivo archivo in TitusTools.Archivos_Importados)
            {
                //si coinciden los imports buscamos en sus clases locales
                if (archivo.Ruta.Equals(import))
                {
                    clase = BuscarClase(nombre, archivo);
                    break;
                }
            }

            return(clase);
        }
Ejemplo n.º 7
0
        static void Regla4(List <Simbolo> Mirilla)
        {
            int     tope = Mirilla.Count;
            Simbolo si   = null;

            for (int i = 0; i < tope; i++)
            {
                Simbolo aux = Mirilla[i];
                if (aux.Rol == Constante.TIf)
                {
                    FIf f = (FIf)aux.Valor;

                    if ((f.Condicion.Izquierda.Tipo.Equals(Constante.TEntero) || f.Condicion.Izquierda.Tipo.Equals(Constante.TDecimal)) && (f.Condicion.Derecha.Tipo.Equals(Constante.TEntero) || f.Condicion.Derecha.Tipo.Equals(Constante.TDecimal)))
                    {
                        if (f.Condicion.ResolverExpresion().Bool)
                        {
                            si = aux;
                        }
                    }
                }
                else
                {
                    if (si != null)
                    {
                        if (aux.Rol.Equals(Constante.TGoto))
                        {
                            FIf f = (FIf)si.Valor;
                            TitusTools.InsertarReporteOptimizacion("Regla 4", "if " + f.Condicion.Generar3DOptimizado() + " goto " + f.Etiqueta, si.Fila, si.Columna);
                            aux.Nombre = f.Etiqueta;
                            Mirilla.Remove(si);
                            tope = Mirilla.Count;
                            i    = i - 1;
                        }
                    }
                    si = null;
                }
            }
        }
Ejemplo n.º 8
0
        public void GenerarTablaSimbolos(Simbolo simbolo, String NombreAmbito)
        {
            switch (simbolo.Rol)
            {
            case Constante.TClase:
                InsertarTablaSimbolos(simbolo.Rol, simbolo.Tipo, NombreAmbito, simbolo.Nombre, simbolo.Tamaño.ToString(), simbolo.Posicion.ToString());
                foreach (Simbolo sim in simbolo.Ambito.TablaSimbolo)
                {
                    GenerarTablaSimbolos(sim, simbolo.Nombre);
                }
                break;

            case Constante.TMetodo:

                InsertarTablaSimbolos(simbolo.Rol, simbolo.Tipo, NombreAmbito, simbolo.Nombre, simbolo.Tamaño.ToString(), simbolo.Posicion.ToString());

                foreach (Simbolo sim in ((FMetodo)simbolo.Valor).Parametros)
                {
                    InsertarTablaSimbolos(sim.Rol, sim.Tipo, NombreAmbito + "_" + simbolo.Nombre, sim.Nombre, sim.Tamaño.ToString(), sim.Posicion.ToString());
                }

                foreach (Simbolo sim in simbolo.Ambito.TablaSimbolo)
                {
                    GenerarTablaSimbolos(sim, NombreAmbito + "_" + simbolo.Nombre);
                }

                break;

            case Constante.TConstructor:

                InsertarTablaSimbolos(simbolo.Rol, simbolo.Tipo, NombreAmbito, simbolo.Nombre, simbolo.Tamaño.ToString(), simbolo.Posicion.ToString());

                foreach (Simbolo sim in ((FMetodo)simbolo.Valor).Parametros)
                {
                    InsertarTablaSimbolos(sim.Rol, sim.Tipo, NombreAmbito + "_" + simbolo.Rol, sim.Nombre, sim.Tamaño.ToString(), sim.Posicion.ToString());
                }

                foreach (Simbolo sim in simbolo.Ambito.TablaSimbolo)
                {
                    GenerarTablaSimbolos(sim, NombreAmbito + "_" + simbolo.Rol);
                }

                break;

            case Constante.TPara:
                FPara para = (FPara)simbolo.Valor;
                //InsertarTablaSimbolos(simbolo.Rol, simbolo.Tipo, NombreAmbito, simbolo.Nombre, simbolo.Tamaño.ToString(), simbolo.Posicion.ToString());
                if (para.AccionAnterior.Rol.Equals(Constante.DECLARACION))
                {
                    GenerarTablaSimbolos(para.AccionAnterior, NombreAmbito + "_" + simbolo.Rol);
                }

                foreach (Simbolo sim in simbolo.Ambito.TablaSimbolo)
                {
                    GenerarTablaSimbolos(sim, NombreAmbito + "_" + sim.Rol);
                }
                break;

            case Constante.TSi:
                FSi si = (FSi)simbolo.Valor;
                //InsertarTablaSimbolos(simbolo.Rol, simbolo.Tipo, NombreAmbito, simbolo.Nombre, simbolo.Tamaño.ToString(), simbolo.Posicion.ToString());

                foreach (Simbolo sim in si.Ambito.TablaSimbolo)
                {
                    GenerarTablaSimbolos(sim, NombreAmbito + "_" + sim.Rol);
                }

                foreach (FSinoSi sinosi in si.SinoSi)
                {
                    //InsertarTablaSimbolos(Constante.TSinoSi, "", NombreAmbito, "", sinosi.Ambito.Tamaño.ToString(), (-1).ToString());
                    foreach (Simbolo sim in sinosi.Ambito.TablaSimbolo)
                    {
                        GenerarTablaSimbolos(sim, NombreAmbito + "_" + Constante.TSinoSi);
                    }
                }

                if (si.Sino != null)
                {
                    //InsertarTablaSimbolos(Constante.TSino, "", NombreAmbito, "", si.Sino.Ambito.Tamaño.ToString(), (-1).ToString());
                    foreach (Simbolo sim in simbolo.Ambito.TablaSimbolo)
                    {
                        GenerarTablaSimbolos(sim, NombreAmbito + "_" + Constante.TSino);
                    }
                }
                break;

            case Constante.TElegir:
                FElegir elegir = (FElegir)simbolo.Valor;
                //InsertarTablaSimbolos(Constante.TElegir, "", NombreAmbito, "", simbolo.Ambito.Tamaño.ToString(), simbolo.Posicion.ToString());
                foreach (FCaso caso in elegir.Casos)
                {
                    //InsertarTablaSimbolos(Constante.CASO, "", NombreAmbito + "_" + Constante.TElegir, "", caso.Ambito.Tamaño.ToString(), (-1).ToString());
                    foreach (Simbolo sim in caso.Ambito.TablaSimbolo)
                    {
                        GenerarTablaSimbolos(sim, NombreAmbito + "_" + Constante.TElegir + "_" + Constante.CASO);
                    }
                }

                if (elegir.Defecto != null)
                {
                    //InsertarTablaSimbolos(Constante.DEFECTO, "", NombreAmbito + "_" + Constante.TElegir, "", elegir.Defecto.Ambito.Tamaño.ToString(), (-1).ToString());
                    foreach (Simbolo sim in elegir.Defecto.Ambito.TablaSimbolo)
                    {
                        GenerarTablaSimbolos(sim, NombreAmbito + "_" + Constante.TElegir + "_" + Constante.DEFECTO);
                    }
                }
                break;

            default:
                if (simbolo.Rol.Equals(Constante.DECLARACION))
                {
                    InsertarTablaSimbolos(simbolo.Rol, simbolo.Tipo, NombreAmbito, simbolo.Nombre, simbolo.Tamaño.ToString(), simbolo.Posicion.ToString());
                }
                else
                {
                    if (simbolo.Tamaño > 0)
                    {
                        //InsertarTablaSimbolos(simbolo.Rol, simbolo.Tipo, NombreAmbito, simbolo.Nombre, simbolo.Tamaño.ToString(), simbolo.Posicion.ToString());
                        foreach (Simbolo sim in simbolo.Ambito.TablaSimbolo)
                        {
                            GenerarTablaSimbolos(sim, NombreAmbito + "_" + simbolo.Rol);
                        }
                    }
                }
                break;
            }
        }