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 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 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); } }
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); } }
/***************************** ejecucion de 3d *****************************/ public void Ejecutar() { Tabla3D.InsertarAmbito(this.Ambito); if (!TitusTools.HayErrores()) { for (int i = 0; i < this.Ambito.TablaSimbolo.Count && i >= 0; i++) { Simbolo sim = Ambito.TablaSimbolo.ElementAt(i); if (!TitusTools.HayErrores()) { switch (sim.Rol) { case Constante.LLAMADA_METODO: EjecutarLlamadaMetodo(sim); break; case Constante.TGoto: { int pos = EjecutarGoTo(sim); if (pos != 0) { i += pos - 1; } else { break; } } break; case Constante.TIf: { int pos = EjecutarIf(sim); if (pos != 0) { i += pos - 1; } else { break; } } break; case Constante.ASIGNACION: EjecutarAsignacion(sim); break; case Constante.TPrint: EjecutarPrint(sim); break; case Constante.TError: EjecutarError(sim); break; } } else { break; } } } Tabla3D.SacarAmbito(); }