public override void CalcularCodigo(bool modoDebug) { StringBuilder strBldr = new StringBuilder(); if (this.hijosNodo[0].GetType() != typeof(NodoTerminal)) { if (this.hijosNodo[0].TipoDato == NodoTablaSimbolos.TipoDeDato.Booleano) { strBldr.Append(GeneracionCodigoHelpers.EscribirValorBooleano(this.hijosNodo[0].Codigo)); } else if (this.hijosNodo[0].TipoDato == NodoTablaSimbolos.TipoDeDato.Numero) { strBldr.Append(GeneracionCodigoHelpers.EscribirValorNumerico(this.hijosNodo[0].Codigo)); } else { strBldr.Append(this.hijosNodo[0].Codigo); } } else { strBldr.Append(this.hijosNodo[0].Lexema); } this.Codigo = strBldr.ToString(); }
public override void CalcularCodigo(bool modoDebug) { StringBuilder strBldr = new StringBuilder(); strBldr.AppendLine(GeneracionCodigoHelpers.AsignarLinea(this.hijosNodo[2].LineaCorrespondiente)); strBldr.AppendLine(string.Format("{0} := 0;", nombreVarControladora)); strBldr.Append("While "); strBldr.Append("( "); strBldr.Append(this.hijosNodo[2].Codigo); strBldr.Append(") "); strBldr.AppendLine("do"); strBldr.AppendLine("begin"); strBldr.Append("\t").AppendLine(string.Format("if ( {0} = {1} ) then", nombreVarControladora, GlobalesCompilador.CANT_MAX_ITERACIONES)); strBldr.Append("\t").AppendLine("begin"); strBldr.Append("\t").Append("\t").AppendLine("raise EIteracionInfinitaException.Create('')"); strBldr.Append("\t").AppendLine("end;"); strBldr.AppendLine(string.Format("{0} := {0} + 1;", nombreVarControladora)); strBldr.Append("\t").AppendLine(this.hijosNodo[5].Codigo.Replace("\r\n", "\r\n\t")); strBldr.AppendLine("end;"); this.Codigo = strBldr.ToString(); }
public override void CalcularCodigo(bool modoDebug) { StringBuilder strBldr = new StringBuilder(); strBldr.AppendLine(GeneracionCodigoHelpers.AsignarLinea(this.hijosNodo[2].LineaCorrespondiente)); strBldr.Append("If "); strBldr.Append("( "); strBldr.Append(this.hijosNodo[2].Codigo); strBldr.Append(") "); strBldr.AppendLine("then"); strBldr.AppendLine("begin"); strBldr.Append("\t").AppendLine(this.hijosNodo[5].Codigo.Replace("\r\n", "\r\n\t")); strBldr.Append("end"); if (this.hijosNodo[6].Codigo != string.Empty) { strBldr.AppendLine(); strBldr.Append(this.hijosNodo[6].Codigo); } else { strBldr.AppendLine(";"); } this.Codigo = strBldr.ToString().ToString().TrimEnd(); }
public override void CalcularCodigo(bool modoDebug) { StringBuilder strBldr = new StringBuilder(); strBldr.AppendLine(GeneracionCodigoHelpers.AsignarLinea(LineaCorrespondiente)); strBldr.Append("WriteLn "); strBldr.Append("( "); strBldr.Append(this.hijosNodo[2].Codigo); strBldr.Append(") "); strBldr.Append(";"); if (modoDebug) { strBldr.AppendLine(string.Format("Writeln(UserFile,{0});", this.hijosNodo[2].Codigo)); } if (ConPausa) { strBldr.AppendLine(); strBldr.AppendLine(GeneracionCodigoHelpers.PausarHastaEntradaTeclado()); } this.Codigo = strBldr.ToString(); }
public override void CalcularCodigo(bool modoDebug) { bool esFuncion = (this.hijosNodo[0].Lexema.ToUpper() == "FUNCION"); StringBuilder strBldr = new StringBuilder(); if (esFuncion) { strBldr.Append("function "); strBldr.Append(this.LexemaVariable); strBldr.Append(" ( "); strBldr.Append(this.hijosNodo[3].Codigo); strBldr.Append(" ) "); strBldr.Append(" : "); strBldr.Append(this.hijosNodo[6].Codigo); strBldr.AppendLine(" ;"); strBldr.Append(this.hijosNodo[7].Codigo); strBldr.AppendLine("begin"); strBldr.Append(GeneracionCodigoHelpers.InicializarVariablesProc(this.TablaSimbolos, this.Lexema)); strBldr.Append("\t").AppendLine(this.hijosNodo[9].Codigo.Replace("\r\n", "\r\n\t")); strBldr.Append("\t").Append(this.LexemaVariable).Append(" := ").Append(this.hijosNodo[11].Codigo).AppendLine(";"); strBldr.AppendLine("end;"); strBldr.AppendLine(); } else { //if (this.Lexema.ToLower().Equals(GlobalesCompilador.NOMBRE_PROC_PRINCIPAL.ToLower())) //{ // this.VariablesProcPrincipal = this.hijosNodo[5].Codigo; // strBldr.AppendLine("begin"); // strBldr.Append("\t").AppendLine(this.hijosNodo[7].Codigo.Replace("\r\n", "\r\n\t")); // strBldr.AppendLine(GeneracionCodigoHelpers.PausarHastaEntradaTeclado()); // strBldr.AppendLine("end."); //} //else //{ strBldr.Append("procedure "); strBldr.Append(this.LexemaVariable); strBldr.Append(" ( "); strBldr.Append(this.hijosNodo[3].Codigo); strBldr.Append(" ) "); strBldr.AppendLine(" ;"); strBldr.Append(this.hijosNodo[5].Codigo); strBldr.AppendLine("begin"); strBldr.Append(GeneracionCodigoHelpers.InicializarVariablesProc(this.TablaSimbolos, this.Lexema)); strBldr.Append("\t").AppendLine(this.hijosNodo[7].Codigo.Replace("\r\n", "\r\n\t")); strBldr.AppendLine("end;"); strBldr.AppendLine(); //} } this.Codigo = strBldr.ToString(); }
public override void CalcularCodigo(bool modoDebug) { StringBuilder strBldr = new StringBuilder(); strBldr.AppendLine(GeneracionCodigoHelpers.AsignarLinea(LineaCorrespondiente)); strBldr.Append(this.hijosNodo[0].Codigo); strBldr.Append(" := "); strBldr.Append(this.hijosNodo[2].Codigo); strBldr.Append(";"); this.Codigo = strBldr.ToString(); }
public override void CalcularCodigo(bool modoDebug) { // flanzani 15/11/2012 // IDC_APP_6 // Agregar funciones matematicas al framework // Agrego la excepcion en pascal para cuando la tangente es invalida y da excepcion StringBuilder strBldr = new StringBuilder(); strBldr.AppendLine("program temporal;"); strBldr.AppendLine("uses crt, Sysutils;"); strBldr.AppendLine(""); if (!string.IsNullOrWhiteSpace(this.hijosNodo[0].ConstantesGlobales)) { strBldr.AppendLine("Const"); strBldr.AppendLine(this.hijosNodo[0].ConstantesGlobales); } strBldr.AppendLine("Type"); strBldr.AppendLine("EIteracionInfinitaException = class(Exception);"); strBldr.AppendLine("EIndiceArregloInvalido = class(Exception);"); strBldr.AppendLine("EMatematicaRaizException = class(Exception);"); strBldr.AppendLine("EMatematicaTangenteException = class(Exception);"); strBldr.AppendLine(ArmarTiposDeArreglo(this.TablaSimbolos.ListaTiposArreglos)); strBldr.AppendLine("Var"); strBldr.AppendLine("UserFile : Text;"); strBldr.AppendLine(string.Format("{0} : integer;", GeneracionCodigoHelpers.VariableContadoraLineas)); strBldr.AppendLine(this.hijosNodo[0].VariablesGlobales); strBldr.AppendLine(GeneracionCodigoHelpers.DefinirVariablesAuxiliares(this.TablaSimbolos)); //strBldr.AppendLine(this.hijosNodo[1].VariablesProcPrincipal); strBldr.AppendLine(""); strBldr.AppendLine(GeneracionCodigoHelpers.DefinirFuncionesBasicas()); // flanzani 8/11/2012 // IDC_APP_2 // Agregar funciones por defecto en el framework // Agrego la definicion de las funciones del framework para que aparezcan en pascal strBldr.AppendLine(GeneracionCodigoHelpers.DefinirFuncionesFramework(this.TablaSimbolos)); strBldr.AppendLine(this.hijosNodo[1].Codigo); strBldr.AppendLine("begin"); strBldr.AppendLine(@"Assign(UserFile,'resultado.txt');"); strBldr.AppendLine("Rewrite(UserFile);"); strBldr.Append(GeneracionCodigoHelpers.InicializarVariablesGlobales(this.TablaSimbolos)); strBldr.AppendLine("try"); strBldr.Append("\t").AppendLine(string.Format("{0}PRINCIPAL();", GlobalesCompilador.PREFIJO_VARIABLES)); strBldr.AppendLine("except"); strBldr.AppendLine("on E: SysUtils.EDivByZero do"); strBldr.AppendLine("begin"); strBldr.AppendLine(string.Format("WriteLn('ERROR FATAL: Se intento dividir por cero en la linea ',{0});", GeneracionCodigoHelpers.VariableContadoraLineas)); strBldr.AppendLine("end;"); strBldr.AppendLine("on EIteracion: EIteracionInfinitaException do"); strBldr.AppendLine("begin"); strBldr.AppendLine(string.Format("WriteLn('ERROR FATAL: Iteracion infinita posible encontrada en la linea ',{0});", GeneracionCodigoHelpers.VariableContadoraLineas)); strBldr.AppendLine("end;"); strBldr.AppendLine("on ERango: SysUtils.ERangeError do"); strBldr.AppendLine("begin"); strBldr.AppendLine(string.Format("WriteLn('Error Fatal: Se intento acceder a una posicion invalida de un arreglo en la linea ',{0});", GeneracionCodigoHelpers.VariableContadoraLineas)); strBldr.AppendLine("end;"); strBldr.AppendLine("on EIndiceInvalido: EIndiceArregloInvalido do"); strBldr.AppendLine("begin"); strBldr.AppendLine("WriteLn(EIndiceInvalido.Message);"); strBldr.AppendLine("end;"); strBldr.AppendLine("on ERaiz: EMatematicaRaizException do"); strBldr.AppendLine("begin"); strBldr.AppendLine("WriteLn(ERaiz.Message);"); strBldr.AppendLine("end;"); strBldr.AppendLine("on ETangente: EMatematicaTangenteException do"); strBldr.AppendLine("begin"); strBldr.AppendLine("WriteLn(ETangente.Message);"); strBldr.AppendLine("end;"); strBldr.AppendLine("on ETotal: Exception do"); strBldr.AppendLine("begin"); strBldr.AppendLine("end;"); strBldr.AppendLine("end;"); strBldr.AppendLine(string.Format("WriteLn('<<presione cualquier tecla para finalizar el programa>>');")); strBldr.AppendLine("Close(UserFile);"); strBldr.AppendLine(GeneracionCodigoHelpers.PausarHastaEntradaTeclado()); strBldr.AppendLine("end."); this.Codigo = strBldr.ToString(); }