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); } }
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); } }
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(""); }
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); } } } } } } }
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); } } } } } } }
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); } } } } } } } } }
public FX(FNodoExpresion Condicion1, FNodoExpresion Condicion2, Ambito Ambito) { this.Condicion1 = Condicion1; this.Condicion2 = Condicion2; this.Ambito = Ambito; this.Padre = null; }
public FPara(Simbolo AccionAnterior, FNodoExpresion Condicion, Simbolo AccionSiguiente, Ambito Ambito) { this.AccionAnterior = AccionAnterior; this.Condicion = Condicion; this.AccionSiguiente = AccionSiguiente; this.Ambito = Ambito; this.Padre = null; }
public FSi(FNodoExpresion condicion, Ambito ambito, List <FSinoSi> sinosi, FSino sino) { this.Condicion = condicion; this.Ambito = ambito; this.SinoSi = sinosi; this.Sino = sino; this.Padre = null; }
public FDeclaracion(String visibilidad, String tipo, String nombre, List <FNodoExpresion> dimensiones, Ambito ambito, int fila, int columna, Object valor) { this.Visibilidad = visibilidad; this.Tipo = tipo; this.Nombre = nombre; this.Dimensiones = dimensiones; this.Ambito = ambito; this.Padre = null; this.Fila = fila; this.Columna = columna; this.Valor = (FNodoExpresion)valor; }
public FAsignacion3D(String tipo, FNodoExpresion acceso, FNodoExpresion valor, String tempo) { this.Tipo = tipo; this.Acceso = acceso; this.Valor = valor; this.Temporal = tempo; if (Tipo.Equals(Constante.TH) || Tipo.Equals(Constante.TP)) { this.Temporal = tipo; } }
public FAsignacion(String tipo, Ambito ambito, FNodoExpresion valor, Object nombre) { this.Tipo = tipo; this.Ambito = ambito; this.Valor = valor; if (this.Tipo.Equals(Constante.TAumento) || this.Tipo.Equals(Constante.TDecremento)) { this.Operacion = (FNodoExpresion)nombre; } else { this.Nombre = (FLlamadaObjeto)nombre; } this.Padre = null; }
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); } } }
public static void InsertarStack(int pos, FNodoExpresion valor) { if (Stack.Count - 1 >= pos) { Stack.RemoveAt(pos); Stack.Insert(pos, valor); } else { int aumento = pos - Stack.Count; for (int i = 0; i < aumento; i++) { Stack.Add(null); } Stack.Insert(pos, valor); } }
public static void InsertarHeap(int pos, FNodoExpresion valor) { if (Heap.Count - 1 >= pos) { Heap.RemoveAt(pos); Heap.Insert(pos, valor); } else { int aumento = pos - Heap.Count; for (int i = 0; i < aumento; i++) { Heap.Add(null); } Heap.Insert(pos, valor); } }
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); } } }
public void ImprimirCaracter() { Variable v = Tabla3D.BuscarVariable(Temporal); if (v != null) { if (v.Valor != null) { FNodoExpresion valor = (FNodoExpresion)v.Valor; if (valor.Tipo.Equals(Constante.TEntero)) { if (valor.Entero >= 0) { char c = (char)valor.Entero; TitusTools.ImprimirConsola(c.ToString()); if (valor.Entero == 0) { TitusTools.ImprimirConsola("\n"); } } else { TitusTools.InsertarError(Constante.TErrorSemantico, "No se pueden imprimir un caracter con un ascii negativo en el temporal " + Temporal, TitusTools.GetRuta(), Padre.Fila, Padre.Columna); } } else { TitusTools.InsertarError(Constante.TErrorSemantico, "No se puede imprimir un caracter porque el valor no es entero 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); } }
public String Generar3D() { String cadena = "\t\t//Comienza ciclo X\n"; String retorno = TitusTools.GetEtq(); FNodoExpresion or = new FNodoExpresion(Condicion1, Condicion2, Constante.TOr, Constante.TOr, Condicion1.Fila, Condicion1.Columna, null); FNodoExpresion and = new FNodoExpresion(Condicion1, Condicion2, Constante.TAnd, Constante.TAnd, Condicion1.Fila, Condicion1.Columna, null); Nodo3D cond1 = or.Generar3D(); Nodo3D cond2 = and.Generar3D(); if (!TitusTools.HayErrores()) { cadena += cond1.Codigo; cadena += "\t" + retorno + ":\n"; cadena += cond2.Codigo; cadena += "\t" + cond1.V + ":\n"; cadena += "\t" + cond2.V + ":\n"; foreach (Simbolo sim in Ambito.TablaSimbolo)//cuerpo si es verdadero { cadena += sim.Generar3D(); } cadena += "\t\t" + "goto " + retorno + ";\n"; cadena += "\t" + cond1.F + ":\n"; cadena += "\t" + cond2.F + ":\n"; } cadena += "\t\t//Termina ciclo X\n"; cadena = cadena.Replace("§salir§;", "goto " + cond1.F + ";\n"); cadena = cadena.Replace("§continuar§;", "goto " + retorno + ";\n"); return(cadena); }
public FElegir(FNodoExpresion condicion, Ambito ambito, List <FCaso> casos, FCaso defecto) { this.Casos = casos; this.Defecto = defecto; this.Ambito = ambito; this.Condicion = condicion; FNodoExpresion aux = null; foreach (FCaso caso in Casos) { if (aux != null) { if (aux.Tipo != caso.Valor.Tipo) { TitusTools.InsertarError(Constante.TErrorSemantico, "Los valores de los casos de la sentencia elegir deben ser iguales", TitusTools.GetRuta(), caso.Valor.Fila, caso.Valor.Columna); } } else { aux = caso.Valor; } } }
public static Object RecorrerArbol(ParseTreeNode Nodo) { switch (Nodo.Term.Name) { case Constante.INICIO: { //LISTA_CLASE; List <Simbolo> clases = (List <Simbolo>)RecorrerArbol(Nodo.ChildNodes[0]); Ambito ambito = new Ambito(Constante.ARCHIVO, clases); Ejecucion3D ArchivoEjecucion = new Ejecucion3D(ambito); return(ArchivoEjecucion); } case Constante.LISTA_SENTENCIAS: { List <Simbolo> tabla = new List <Simbolo>(); if (Nodo.ChildNodes.Count > 0) { tabla = (List <Simbolo>)RecorrerArbol(Nodo.ChildNodes[0]); } return(tabla); } case Constante.LISTA_SENTENCIA: { List <Simbolo> tabla = new List <Simbolo>(); foreach (ParseTreeNode nodo in Nodo.ChildNodes) { foreach (Simbolo sim in (List <Simbolo>)RecorrerArbol(nodo)) { tabla.Add(sim); } } return(tabla); } case Constante.SENTENCIA: { List <Simbolo> lista = new List <Simbolo>(); if (Nodo.ChildNodes.Count == 2) { List <Simbolo> cuerpo = (List <Simbolo>)RecorrerArbol(Nodo.ChildNodes[1]); FMetodo metodo = new FMetodo(Constante.TPublico, Constante.TMain, Constante.TMain, new List <Simbolo>(), new Ambito(Constante.TMain, cuerpo), Nodo.ChildNodes[0].Token.Location.Line + 1, Nodo.ChildNodes[0].Token.Location.Column + 1); Simbolo s = new Simbolo(metodo.Visibilidad, metodo.Tipo, metodo.Nombre, Constante.TMain, metodo.Fila, metodo.Columna, metodo.Ambito, metodo); Simbolo anterior = null; foreach (Simbolo sim in metodo.Ambito.TablaSimbolo) { sim.Anterior = anterior; if (anterior != null) { anterior.Siguiente = sim; sim.Anterior = anterior; } anterior = sim; } lista.Add(s); } else { List <Simbolo> cuerpo = (List <Simbolo>)RecorrerArbol(Nodo.ChildNodes[2]); FMetodo metodo = new FMetodo(Constante.TPublico, Constante.TVoid, Nodo.ChildNodes[1].Token.ValueString, new List <Simbolo>(), new Ambito(Constante.TMain, cuerpo), Nodo.ChildNodes[0].Token.Location.Line + 1, Nodo.ChildNodes[0].Token.Location.Column + 1); Simbolo s = new Simbolo(metodo.Visibilidad, metodo.Tipo, metodo.Nombre, Constante.TMetodo, metodo.Fila, metodo.Columna, metodo.Ambito, metodo); Simbolo anterior = null; foreach (Simbolo sim in metodo.Ambito.TablaSimbolo) { sim.Anterior = anterior; if (anterior != null) { anterior.Siguiente = sim; sim.Anterior = anterior; } anterior = sim; } lista.Add(s); } return(lista); } case Constante.LISTA_INSTRUCCIONES: { List <Simbolo> tabla = new List <Simbolo>(); if (Nodo.ChildNodes.Count > 0) { tabla = (List <Simbolo>)RecorrerArbol(Nodo.ChildNodes[0]); } return(tabla); } case Constante.LISTA_INSTRUCCION: { List <Simbolo> tabla = new List <Simbolo>(); foreach (ParseTreeNode nodo in Nodo.ChildNodes) { Simbolo sim = (Simbolo)RecorrerArbol(nodo); tabla.Add(sim); } return(tabla); } case Constante.INSTRUCCION: { if (Nodo.ChildNodes.Count == 1) { switch (Nodo.ChildNodes[0].Term.Name) { case Constante.Etiqueta: return(new Simbolo(Constante.TPublico, Constante.Etiqueta, Nodo.ChildNodes[0].Token.ValueString, Constante.Etiqueta, Nodo.ChildNodes[0].Token.Location.Line + 1, Nodo.ChildNodes[0].Token.Location.Column + 1, new Ambito(Constante.Etiqueta), null)); case Constante.Id: return(new Simbolo(Constante.TPublico, Constante.LLAMADA_METODO, Nodo.ChildNodes[0].Token.ValueString, Constante.LLAMADA_METODO, Nodo.ChildNodes[0].Token.Location.Line + 1, Nodo.ChildNodes[0].Token.Location.Column + 1, new Ambito(Constante.LLAMADA_METODO), null)); default: return(RecorrerArbol(Nodo.ChildNodes[0])); } } else if (Nodo.ChildNodes.Count == 2) { if (Nodo.ChildNodes[0].Token.ValueString.Equals(Constante.TGoto)) { return(new Simbolo(Constante.TPublico, Constante.TGoto, Nodo.ChildNodes[1].Token.ValueString, Constante.TGoto, Nodo.ChildNodes[0].Token.Location.Line + 1, Nodo.ChildNodes[0].Token.Location.Column + 1, new Ambito(Constante.TGoto), null)); } else { return(new Simbolo(Constante.TPublico, Constante.TError, Nodo.ChildNodes[1].Token.ValueString, Constante.TError, Nodo.ChildNodes[0].Token.Location.Line + 1, Nodo.ChildNodes[0].Token.Location.Column + 1, new Ambito(Constante.TError), null)); } } else if (Nodo.ChildNodes.Count == 3) { String tipo = (String)RecorrerArbol(Nodo.ChildNodes[1]); String temp = Nodo.ChildNodes[2].Token.ValueString; FPrint print = new FPrint(tipo, temp); Simbolo sim = new Simbolo(Constante.TPublico, Constante.TPrint, Constante.TPrint, Constante.TPrint, Nodo.ChildNodes[0].Token.Location.Line + 1, Nodo.ChildNodes[0].Token.Location.Column + 1, new Ambito(Constante.TPrint), print); print.Padre = sim; return(sim); } else { String Tipo = Constante.TIf; if (Nodo.ChildNodes[0].Term.Name.Equals(Constante.TIfFalse)) { Tipo = Constante.TIfFalse; } FNodoExpresion cond = (FNodoExpresion)RecorrerArbol(Nodo.ChildNodes[1]); String etq = Nodo.ChildNodes[3].Token.ValueString; FIf si = new FIf(Tipo, cond, etq); Simbolo sim = new Simbolo(Constante.TPublico, Constante.TIf, Constante.TIf, Constante.TIf, Nodo.ChildNodes[0].Token.Location.Line + 1, Nodo.ChildNodes[0].Token.Location.Column + 1, new Ambito(Constante.TIf), si); si.Padre = sim; return(sim); } } case Constante.ASIGNACION: if (Nodo.ChildNodes.Count == 2) { if (Nodo.ChildNodes[0].Term.Name.Equals(Constante.Temporal)) { FNodoExpresion val = (FNodoExpresion)RecorrerArbol(Nodo.ChildNodes[1]); FAsignacion3D asi = new FAsignacion3D(Constante.Temporal, null, val, Nodo.ChildNodes[0].Token.ValueString); Simbolo sim = new Simbolo(Constante.TPublico, Constante.ASIGNACION, Constante.ASIGNACION, Constante.ASIGNACION, Nodo.ChildNodes[0].Token.Location.Line + 1, Nodo.ChildNodes[0].Token.Location.Column + 1, new Ambito(Constante.ASIGNACION), asi); return(sim); } else { FNodoExpresion val = (FNodoExpresion)RecorrerArbol(Nodo.ChildNodes[1]); FAsignacion3D asi = new FAsignacion3D(Nodo.ChildNodes[0].Term.Name, null, val, ""); Simbolo sim = new Simbolo(Constante.TPublico, Constante.ASIGNACION, Constante.ASIGNACION, Constante.ASIGNACION, Nodo.ChildNodes[0].Token.Location.Line + 1, Nodo.ChildNodes[0].Token.Location.Column + 1, new Ambito(Constante.ASIGNACION), asi); return(sim); } } else { FNodoExpresion acceos = (FNodoExpresion)RecorrerArbol(Nodo.ChildNodes[1]); FNodoExpresion val = (FNodoExpresion)RecorrerArbol(Nodo.ChildNodes[2]); FAsignacion3D asi = new FAsignacion3D(Nodo.ChildNodes[0].Token.ValueString, acceos, val, ""); Simbolo sim = new Simbolo(Constante.TPublico, Constante.ASIGNACION, Constante.ASIGNACION, Constante.ASIGNACION, Nodo.ChildNodes[0].Token.Location.Line + 1, Nodo.ChildNodes[0].Token.Location.Column + 1, new Ambito(Constante.ASIGNACION), asi); return(sim); } case Constante.TPrint: return(Nodo.ChildNodes[0].Term.Name); case Constante.RELACIONAL: { FNodoExpresion izq = (FNodoExpresion)RecorrerArbol(Nodo.ChildNodes[0]); FNodoExpresion der = (FNodoExpresion)RecorrerArbol(Nodo.ChildNodes[2]); return(new FNodoExpresion(izq, der, Nodo.ChildNodes[1].Token.ValueString, Nodo.ChildNodes[1].Token.ValueString, Nodo.ChildNodes[1].Token.Location.Line + 1, Nodo.ChildNodes[1].Token.Location.Column + 1, null)); } case Constante.ARITMETICA: if (Nodo.ChildNodes.Count == 3) { FNodoExpresion izq = (FNodoExpresion)RecorrerArbol(Nodo.ChildNodes[0]); FNodoExpresion der = (FNodoExpresion)RecorrerArbol(Nodo.ChildNodes[2]); return(new FNodoExpresion(izq, der, Nodo.ChildNodes[1].Token.ValueString, Nodo.ChildNodes[1].Token.ValueString, Nodo.ChildNodes[1].Token.Location.Line + 1, Nodo.ChildNodes[1].Token.Location.Column + 1, null)); } else { if (Nodo.ChildNodes[0].Term.Name.Equals(Constante.TMenos)) { FNodoExpresion der = (FNodoExpresion)RecorrerArbol(Nodo.ChildNodes[1]); return(new FNodoExpresion(null, der, Nodo.ChildNodes[0].Token.ValueString, Nodo.ChildNodes[0].Token.ValueString, Nodo.ChildNodes[0].Token.Location.Line + 1, Nodo.ChildNodes[0].Token.Location.Column + 1, null)); } else if (Nodo.ChildNodes[0].Term.Name.Equals(Constante.THeap)) { FNodoExpresion der = (FNodoExpresion)RecorrerArbol(Nodo.ChildNodes[1]); return(new FNodoExpresion(null, der, Constante.THeap, Constante.THeap, Nodo.ChildNodes[0].Token.Location.Line + 1, Nodo.ChildNodes[0].Token.Location.Column + 1, null)); } else { FNodoExpresion der = (FNodoExpresion)RecorrerArbol(Nodo.ChildNodes[1]); return(new FNodoExpresion(null, der, Constante.TStack, Constante.TStack, Nodo.ChildNodes[0].Token.Location.Line + 1, Nodo.ChildNodes[0].Token.Location.Column + 1, null)); } } case Constante.EXP: { return(RecorrerArbol(Nodo.ChildNodes[0])); } case Constante.Entero: return(new FNodoExpresion(null, null, Constante.TEntero, Constante.TEntero, Nodo.Token.Location.Line + 1, Nodo.Token.Location.Column + 1, Nodo.Token.ValueString)); case Constante.Decimal: return(new FNodoExpresion(null, null, Constante.TDecimal, Constante.TDecimal, Nodo.Token.Location.Line + 1, Nodo.Token.Location.Column + 1, Nodo.Token.ValueString)); case Constante.TH: return(new FNodoExpresion(null, null, Constante.TH, Constante.TH, Nodo.Token.Location.Line + 1, Nodo.Token.Location.Column + 1, Nodo.Token.ValueString)); case Constante.TP: return(new FNodoExpresion(null, null, Constante.TP, Constante.TP, Nodo.Token.Location.Line + 1, Nodo.Token.Location.Column + 1, Nodo.Token.ValueString)); case Constante.Temporal: return(new FNodoExpresion(null, null, Constante.Temporal, Nodo.Token.ValueString, Nodo.Token.Location.Line + 1, Nodo.Token.Location.Column + 1, Nodo.Token.ValueString)); } return(null); }
private Nodo3D Relacional3D(Nodo3D izq, FNodoExpresion der, int Fila, int Columna) { var codigo3d = new Nodo3D(); var auxder = der.Generar3D(); if (!TitusTools.HayErrores()) { switch (izq.Tipo) { case Constante.TEntero: { switch (auxder.Tipo) { case Constante.TEntero: { String cad = ""; codigo3d.F = TitusTools.GetEtq(); cad += "\t\t" + "ifFalse " + izq.Valor + " " + "==" + " " + auxder.Valor + " goto " + codigo3d.F + ";\n"; codigo3d.Codigo = auxder.Codigo + cad; codigo3d.Tipo = Constante.TBooleano; } break; case Constante.TDecimal: { String cad = ""; codigo3d.F = TitusTools.GetEtq(); cad += "\t\t" + "ifFalse " + izq.Valor + " " + "==" + " " + auxder.Valor + " goto " + codigo3d.F + ";\n"; codigo3d.Codigo = auxder.Codigo + cad; codigo3d.Tipo = Constante.TBooleano; } break; case Constante.TCaracter: { String cad = ""; codigo3d.F = TitusTools.GetEtq(); cad += "\t\t" + "ifFalse " + izq.Valor + " " + "==" + " " + auxder.Valor + " goto " + codigo3d.F + ";\n"; codigo3d.Codigo = auxder.Codigo + cad; codigo3d.Tipo = Constante.TBooleano; } break; default: TitusTools.InsertarError(Constante.TErrorSemantico, "No se puede " + izq.Tipo + " " + "==" + " " + auxder.Tipo, TitusTools.GetRuta(), Fila, Columna); break; } } break; case Constante.TDecimal: { switch (auxder.Tipo) { case Constante.TEntero: { String cad = ""; codigo3d.F = TitusTools.GetEtq(); cad += "\t\t" + "ifFalse " + izq.Valor + " " + "==" + " " + auxder.Valor + " goto " + codigo3d.F + ";\n"; codigo3d.Codigo = auxder.Codigo + cad; codigo3d.Tipo = Constante.TBooleano; } break; case Constante.TDecimal: { String cad = ""; codigo3d.F = TitusTools.GetEtq(); cad += "\t\t" + "if " + izq.Valor + " " + "==" + " " + auxder.Valor + " goto " + codigo3d.F + ";\n"; codigo3d.Codigo = auxder.Codigo + cad; codigo3d.Tipo = Constante.TBooleano; } break; case Constante.TCaracter: { String cad = ""; codigo3d.F = TitusTools.GetEtq(); cad += "\t\t" + "if " + izq.Valor + " " + "==" + " " + auxder.Valor + " goto " + codigo3d.F + ";\n"; codigo3d.Codigo = auxder.Codigo + cad; codigo3d.Tipo = Constante.TBooleano; } break; default: TitusTools.InsertarError(Constante.TErrorSemantico, "No se puede " + izq.Tipo + " " + "==" + " " + auxder.Tipo, TitusTools.GetRuta(), Fila, Columna); break; } } break; case Constante.TCaracter: { switch (auxder.Tipo) { case Constante.TEntero: { String cad = ""; codigo3d.F = TitusTools.GetEtq(); cad += "\t\t" + "if " + izq.Valor + " " + "==" + " " + auxder.Valor + " goto " + codigo3d.F + ";\n"; codigo3d.Codigo = auxder.Codigo + cad; codigo3d.Tipo = Constante.TBooleano; } break; case Constante.TDecimal: { String cad = ""; codigo3d.F = TitusTools.GetEtq(); cad += "\t\t" + "if " + izq.Valor + " " + "==" + " " + auxder.Valor + " goto " + codigo3d.F + ";\n"; codigo3d.Codigo = auxder.Codigo + cad; codigo3d.Tipo = Constante.TBooleano; } break; case Constante.TCaracter: { String cad = ""; codigo3d.F = TitusTools.GetEtq(); cad += "\t\t" + "if " + izq.Valor + " " + "==" + " " + auxder.Valor + " goto " + codigo3d.F + ";\n"; codigo3d.Codigo = auxder.Codigo + cad; codigo3d.Tipo = Constante.TBooleano; } break; case Constante.TCadena: { String cad = ""; String etqcad1 = TitusTools.GetEtq(); String etqcad2 = TitusTools.GetEtq(); String tempascii2 = TitusTools.GetTemp(); String tempcad2 = TitusTools.GetTemp(); cad += "\t\t" + tempascii2 + " = 0 ;\n"; cad += "\t" + etqcad1 + ":\n"; cad += "\t\t" + tempcad2 + " = Heap[" + auxder.Valor + "];\n"; cad += "\t\t" + "if " + tempcad2 + " == 0 goto " + etqcad2 + ";\n"; cad += "\t\t" + tempascii2 + " = " + tempascii2 + " + " + tempcad2 + ";\n"; cad += "\t\t" + auxder.Valor + " = " + auxder.Valor + " + 1;\n"; cad += "\t\t" + "goto " + etqcad1 + ";\n"; cad += "\t" + etqcad2 + ":\n"; codigo3d.F = TitusTools.GetEtq(); cad += "\t\t" + "if " + izq.Valor + " " + "==" + " " + tempascii2 + " goto " + codigo3d.F + ";\n"; codigo3d.Codigo = auxder.Codigo + cad; codigo3d.Tipo = Constante.TBooleano; } break; default: TitusTools.InsertarError(Constante.TErrorSemantico, "No se puede " + izq.Tipo + " " + "==" + " " + auxder.Tipo, TitusTools.GetRuta(), Fila, Columna); break; } } break; case Constante.TCadena: { switch (auxder.Tipo) { case Constante.TCaracter: { String cad = ""; String tempascii1 = TitusTools.GetTemp(); String tempcad1 = TitusTools.GetTemp(); String etqcad1 = TitusTools.GetEtq(); String etqcad2 = TitusTools.GetEtq(); cad += "\t\t" + tempascii1 + " = 0 ;\n"; cad += "\t" + etqcad1 + ":\n"; cad += "\t\t" + tempcad1 + " = Heap[" + izq.Valor + "];\n"; cad += "\t\t" + "if " + tempcad1 + " == 0 goto " + etqcad2 + ";\n"; cad += "\t\t" + tempascii1 + " = " + tempascii1 + " + " + tempcad1 + ";\n"; cad += "\t\t" + izq.Valor + " = " + izq.Valor + " + 1;\n"; cad += "\t\t" + "goto " + etqcad1 + ";\n"; cad += "\t" + etqcad2 + ":\n"; codigo3d.F = TitusTools.GetEtq(); cad += "\t\t" + "if " + tempascii1 + " " + "==" + " " + auxder.Valor + " goto " + codigo3d.F + ";\n"; codigo3d.Codigo = auxder.Codigo + cad; codigo3d.Tipo = Constante.TBooleano; } break; case Constante.TCadena: { String cad = ""; String tempascii1 = TitusTools.GetTemp(); String tempcad1 = TitusTools.GetTemp(); String etqcad1 = TitusTools.GetEtq(); String etqcad2 = TitusTools.GetEtq(); cad += "\t\t" + tempascii1 + " = 0 ;\n"; cad += "\t" + etqcad1 + ":\n"; cad += "\t\t" + tempcad1 + " = Heap[" + izq.Valor + "];\n"; cad += "\t\t" + "if " + tempcad1 + " == 0 goto " + etqcad2 + ";\n"; cad += "\t\t" + tempascii1 + " = " + tempascii1 + " + " + tempcad1 + ";\n"; cad += "\t\t" + izq.Valor + " = " + izq.Valor + " + 1;\n"; cad += "\t\t" + "goto " + etqcad1 + ";\n"; cad += "\t" + etqcad2 + ":\n"; String tempascii2 = TitusTools.GetTemp(); String tempcad2 = TitusTools.GetTemp(); etqcad1 = TitusTools.GetEtq(); etqcad2 = TitusTools.GetEtq(); cad += "\t\t" + tempascii2 + " = 0 ;\n"; cad += "\t" + etqcad1 + ":\n"; cad += "\t\t" + tempcad2 + " = Heap[" + auxder.Valor + "];\n"; cad += "\t\t" + "if " + tempcad2 + " == 0 goto " + etqcad2 + ";\n"; cad += "\t\t" + tempascii2 + " = " + tempascii2 + " + " + tempcad2 + ";\n"; cad += "\t\t" + auxder.Valor + " = " + auxder.Valor + " + 1;\n"; cad += "\t\t" + "goto " + etqcad1 + ";\n"; cad += "\t" + etqcad2 + ":\n"; codigo3d.F = TitusTools.GetEtq(); cad += "\t\t" + "if " + tempascii1 + " " + "==" + " " + tempascii2 + " goto " + codigo3d.F + ";\n"; codigo3d.Codigo = auxder.Codigo + cad; codigo3d.Tipo = Constante.TBooleano; } break; default: TitusTools.InsertarError(Constante.TErrorSemantico, "No se puede " + izq.Tipo + " " + "==" + " " + auxder.Tipo, TitusTools.GetRuta(), Fila, Columna); break; } } break; } } return(codigo3d); }
public FCaso(FNodoExpresion valor, Ambito ambito) { this.Valor = valor; this.Ambito = ambito; }
public FMientras(FNodoExpresion Condicion, Ambito Ambito) { this.Condicion = Condicion; this.Ambito = Ambito; this.Padre = null; }
public FSinoSi(FNodoExpresion Condicion, Ambito Ambito) { this.Condicion = Condicion; this.Ambito = Ambito; this.Padre = null; }
public FIf(String tipo, FNodoExpresion condicion, String etiqueta) { this.Tipo = tipo; this.Condicion = condicion; this.Etiqueta = etiqueta; }
public FImprimir(FNodoExpresion Valor) { this.Valor = Valor; }