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; } } } } }
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; } }
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; }
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; } } } } }
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; } } } } }
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); }
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; } } }
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; } }