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); }
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(); } }