예제 #1
0
        private ResultadoCompilacionPascal CompilarPascal(string archTemporalPascal, Dictionary <int, int> bindeoLineas)
        {
            ResultadoCompilacionPascal res;

            try
            {
                archTemporalPascal = string.Format("{0}{1}{0}", '"', archTemporalPascal);

                string exe = Path.Combine(DirectorioEjecutables, NombreEjecutable);

                if (!exe.Contains(".exe"))
                {
                    exe = string.Concat(exe, ".exe");
                }

                string auxExe = string.Format("{0}{1}{0}", '"', exe);

                string pathIncludes = Path.Combine(DirectorioTemporales, GlobalesCompilador.NOMBRE_DIR_UNITS_PASCAL);
                pathIncludes = string.Format("{0}{1}{0}", '"', pathIncludes);


                string argumentoInclude                   = string.Format("-Fu{0}", pathIncludes);
                string argumentoModoCompilacion           = string.Format("-Mobjfpc");
                string argumentoUseAnsiStrings            = string.Format("-Sh");
                string argumentoChequearIndicesDeArreglos = string.Format("-Cr");
                string argumentoNombreExe                 = string.Format("-o{0}", auxExe);

                string resultado = EjecucionManager.EjecutarSinVentana(Path.Combine(DirectorioTemporales, GlobalesCompilador.NOMBRE_ARCH_COMPILADOR_PASCAL),
                                                                       new List <string>()
                {
                    argumentoInclude, argumentoModoCompilacion, argumentoUseAnsiStrings, argumentoChequearIndicesDeArreglos, argumentoNombreExe, archTemporalPascal
                });
                res = new ResultadoCompilacionPascal(resultado, bindeoLineas);
                res.NombreEjecutable = exe;
            }
            catch (Exception)
            {
                res = new ResultadoCompilacionPascal();
                res.CompilacionPascalCorrecta = false;
            }

            return(res);
        }
예제 #2
0
        private void CompilarCodigoIntermedio(ResultadoCompilacion res)
        {
            if (res.CompilacionGarGarCorrecta)
            {
                res.ArbolSemanticoResultado = this.analizadorSintactico.ArbolSemantico;

                long timeStampCod = Stopwatch.GetTimestamp();
                res.CodigoPascal = res.ArbolSemanticoResultado.CalcularCodigo(modoDebug);

                Dictionary <int, int> bindeoLineasEntrePascalYGarGar = BindearLineas(res.CodigoPascal.Split(new string[] { "\r\n" }, StringSplitOptions.None));


                res.TiempoGeneracionCodigo = ((float)(Stopwatch.GetTimestamp() - timeStampCod)) / ((float)Stopwatch.Frequency);

                timeStampCod = Stopwatch.GetTimestamp();
                res.ArchTemporalCodigoPascal        = CrearArchivoTemporal(res.CodigoPascal);
                res.ArchTemporalCodigoPascalConRuta = Path.Combine(DirectorioTemporales, res.ArchTemporalCodigoPascal);
                res.TiempoGeneracionTemporalCodigo  = ((float)(Stopwatch.GetTimestamp() - timeStampCod)) / ((float)Stopwatch.Frequency);

                try
                {
                    timeStampCod = Stopwatch.GetTimestamp();



                    ResultadoCompilacionPascal resPas = CompilarPascal(res.ArchTemporalCodigoPascalConRuta, bindeoLineasEntrePascalYGarGar);

                    res.ResultadoCompPascal        = resPas;
                    res.ArchEjecutable             = resPas.NombreEjecutable;
                    res.ArchEjecutableConRuta      = Path.Combine(DirectorioEjecutables, res.ArchEjecutable);
                    res.TiempoGeneracionEjecutable = ((float)(Stopwatch.GetTimestamp() - timeStampCod)) / ((float)Stopwatch.Frequency);

                    res.GeneracionEjectuableCorrecto = resPas.CompilacionPascalCorrecta;
                }
                catch
                {
                    res.GeneracionEjectuableCorrecto = false;
                }

                BorrarTemporales();
            }
        }