public void CompilacionGarGarIncorrectaConTexto() { Compilador compilador = new Compilador(); ResultadoCompilacion res = compilador.Compilar(PROGRAMA_ERRONEO); Assert.IsFalse(res.CompilacionGarGarCorrecta); }
public void CompilacionGarGarVacia() { Compilador compilador = new Compilador(); ResultadoCompilacion res = compilador.Compilar(""); Assert.IsFalse(res.CompilacionGarGarCorrecta); }
public void CompilacionGarGarCorrectaBasica() { Compilador compilador = new Compilador(true, "basica"); ResultadoCompilacion res = compilador.Compilar(PROGRAMA_BASICO); Assert.IsTrue(res.CompilacionGarGarCorrecta, ObtenerErrores(res)); Assert.IsTrue(res.ResultadoCompPascal.CompilacionPascalCorrecta); }
private string ObtenerErrores(ResultadoCompilacion res) { StringBuilder strBldr = new StringBuilder(); foreach (var item in res.ListaErrores) { strBldr.AppendLine(string.Format("{0},{1}: {2}", item.Fila, item.Columna, item.Mensaje.Descripcion)); } return(strBldr.ToString()); }
public void CompilacionCorrectaTest() { Compilador compilador = new Compilador(); string resourceName = "UnitTestCompiladorGarGar.Programas.test.gar"; string programa = Utilidades.FileManager.LeerArchivoEnteroDeAssembly(Assembly.GetExecutingAssembly(), resourceName); ResultadoCompilacion res = compilador.Compilar(programa); Assert.IsTrue(res.CompilacionGarGarCorrecta, ObtenerErrores(res)); Assert.IsTrue(res.ResultadoCompPascal.CompilacionPascalCorrecta); }
public void CompilacionErrorLexicoPrimerCaracter() { Compilador compilador = new Compilador(); string resourceName = "UnitTestCompiladorGarGar.Programas.testErrorLexico.gar"; string programa = Utilidades.FileManager.LeerArchivoEnteroDeAssembly(Assembly.GetExecutingAssembly(), resourceName); ResultadoCompilacion res = compilador.Compilar(programa); Assert.IsTrue(res.ListaErrores[0].Mensaje.CodigoGlobal == 43); }
private void PruebaSintactica(int errorPretendido, string pruebaBis = "") { Compilador compilador = new Compilador(); string resourceName = string.Format("UnitTestCompiladorGarGar.Programas.ErroresSintacticos.error{0}{1}.gar", errorPretendido, pruebaBis); string programa = Utilidades.FileManager.LeerArchivoEnteroDeAssembly(Assembly.GetExecutingAssembly(), resourceName); ResultadoCompilacion res = compilador.Compilar(programa); Assert.IsFalse(res.CompilacionGarGarCorrecta, string.Format("La compilacion da correcta y esperaba error {0}", errorPretendido)); Assert.IsTrue(res.ListaErrores[0].Mensaje.CodigoGlobal == errorPretendido, string.Format("Error {0} y esperaba {1}. Error: {2}", res.ListaErrores[0].Mensaje.CodigoGlobal, errorPretendido, res.ListaErrores[0].Mensaje.Descripcion)); }
public void CompilacionMenorTresSegundos() { Compilador compilador = new Compilador("validacionesSemanticasCorrectas"); string resourceName = "UnitTestCompiladorGarGar.Programas.validacionesSemanticasCorrectas.gar"; string programa = Utilidades.FileManager.LeerArchivoEnteroDeAssembly(Assembly.GetExecutingAssembly(), resourceName); ResultadoCompilacion res = compilador.Compilar(programa); Assert.IsTrue(res.CompilacionGarGarCorrecta, ObtenerErrores(res)); Assert.IsTrue(res.ResultadoCompPascal.CompilacionPascalCorrecta); Assert.IsTrue(res.TiempoCompilacionTotal < 3); }
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(); } }
public ResultadoCompilacion Compilar(string texto) { Stopwatch temporizador = Stopwatch.StartNew(); ResultadoCompilacion res = new ResultadoCompilacion(); if (texto != string.Empty) { try { long timeStamp = Stopwatch.GetTimestamp(); long timeStampPaso; ReiniciarCompilador(); res.TiempoGeneracionAnalizadorSintactico = temporizador.Elapsed.TotalSeconds; List <PasoDebugTiempos> tiempos = new List <PasoDebugTiempos>(); int i = 1; long timeStampLex = Stopwatch.GetTimestamp(); CargarAnalizadorLexico(texto); float tiempoCargarLexico = ((float)(Stopwatch.GetTimestamp() - timeStampLex)) / ((float)Stopwatch.Frequency); bool pararComp = false; GlobalesCompilador.TipoError tipoError = GlobalesCompilador.TipoError.Ninguno; while (!this.analizadorSintactico.EsFinAnalisisSintactico() && !pararComp) { timeStampPaso = Stopwatch.GetTimestamp(); List <ErrorCompilacion> retorno = this.analizadorSintactico.AnalizarSintacticamenteUnPaso(); float tiempoAnalizSint = ((float)(Stopwatch.GetTimestamp() - timeStampPaso)) / ((float)Stopwatch.Frequency); if (retorno.Count > 0) { foreach (var item in retorno) { switch (item.TipoError) { case GlobalesCompilador.TipoError.Sintactico: tipoError = item.TipoError; res.ListaErrores.Add(item); pararComp = pararComp || item.PararCompilacion; break; case GlobalesCompilador.TipoError.Semantico: tipoError = item.TipoError; res.ListaErrores.Add(item); pararComp = pararComp || item.PararCompilacion; break; case GlobalesCompilador.TipoError.Ninguno: tipoError = item.TipoError; break; } } } if (modoDebug) { PasoCompilacion paso = new PasoCompilacion(this.analizadorSintactico.Pila.ToString(), this.analizadorSintactico.CadenaEntrada.ToString(), tipoError); res.ListaDebugSintactico.Add(paso); } float numPaso = ((float)(Stopwatch.GetTimestamp() - timeStampPaso)) / ((float)Stopwatch.Frequency); tiempos.Add(new PasoDebugTiempos() { NumPaso = i, TiempoAnalizadorSint = tiempoAnalizSint, TiempoAnalizadorTot = numPaso });; i++; } if (this.analizadorSintactico.EsFinAnalisisSintactico() && res.ListaErrores.Count == 0) { res.CompilacionGarGarCorrecta = true; } CompilarCodigoIntermedio(res); } catch (Exception ex) { string error = null; if (modoDebug) { error = string.Format("{0}: \r\n {1}", ex.Message, ex.StackTrace); } res.CompilacionGarGarCorrecta = false; res.ListaErrores.Add(new ErrorCompilacion(new ErrorDesconocido(error), GlobalesCompilador.TipoError.Ninguno, 0, 0)); } res.TiempoCompilacionTotal = temporizador.Elapsed.TotalSeconds; } else { //No hay nada para compilar res.ListaErrores.Add(new ErrorCompilacion( new ErrorNoHayProgramaParaCompilar(), GlobalesCompilador.TipoError.Sintactico, GlobalesCompilador.UltFila, GlobalesCompilador.UltCol, false) ); } return(res); }
/// <summary> /// The main entry point for the application. /// </summary> private static void Main(string[] args) { try { //Compilador comp = new Compilador(); //Application.Run(comp); var options = new Options(); var result = CommandLine.Parser.Default.ParseArguments <Options>(args); if (!result.Errors.Any()) { if (File.Exists(result.Value.InputFile)) { using (StreamReader reader = new StreamReader(result.Value.InputFile)) { string textoCompilar = reader.ReadToEnd(); //Compilador compilador = new Compilador(false, Globales.ConstantesGlobales.PathEjecucionAplicacion, Globales.ConstantesGlobales.PathEjecucionAplicacion, result.Value.ExeFile); Compilador compilador = new Compilador(false, Path.GetTempPath(), Path.GetTempPath(), result.Value.ExeFile); ResultadoCompilacion res = compilador.Compilar(textoCompilar); if (res.CompilacionGarGarCorrecta && res.ResultadoCompPascal != null && res.ResultadoCompPascal.CompilacionPascalCorrecta) { Console.WriteLine("Compilacion exitosa"); } else { Console.WriteLine("Error de compilacion"); foreach (var error in res.ListaErrores) { Console.WriteLine(string.Format("<{0},{1}> {2}", error.Fila, error.Columna, error.Mensaje.Descripcion)); } } } } } //if (args != null) //{ // if (args.Length > 0) // { // List<string> argumentos = new List<string>(args); // } // else // { // Console.WriteLine("Coloque el parametro -? para ayuda"); // } //} //else //{ // Console.WriteLine("Coloque el parametro -? para ayuda"); //} } catch (Exception ex) { Console.WriteLine("Error fatal en el compilador."); Console.WriteLine(ex.Message); } }