Exemple #1
0
        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();
        }
Exemple #3
0
        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();
        }
Exemple #4
0
        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();
        }
Exemple #5
0
        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();
        }
Exemple #7
0
        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();
        }