static void Main(string[] args) { Console.OutputEncoding = System.Text.Encoding.UTF8; try { var fileName = "my-programm.txt"; var tiny = new TinyParser(); var countLine = 0; Console.WriteLine("# Tiny Grammar"); var code = ""; var input = new StreamReader(fileName); code = input.ReadToEnd(); Console.WriteLine($"++++++ Example file: {fileName} +++++++\n"); Console.WriteLine(code); Console.WriteLine($"\n++++++ RESULT +++++++\n"); tiny.Parser(++countLine, code); } catch (Exception e) { Console.WriteLine($"\n\n{e}"); } Console.ReadLine(); }
/// <summary> /// Trees the specified code. /// </summary> /// <param name="code">The code.</param> /// <returns>the parser.</returns> public TinyParser.UnitContext Tree(string code) { var stream = new AntlrInputStream(code); var lexer = new TinyLexer(stream); lexer.AddErrorListener(this.errors); var token = new CommonTokenStream(lexer); var parser = new TinyParser(token); parser.AddErrorListener(this.errors); return(parser.unit()); }
static void Main(string[] args) { System.IO.StreamReader input; String nombreArchivo; Dictionary <String, String> opciones = parseArgs(args); //Validar que no existan opciones incorrectas if (opciones.ContainsKey("--help") || opciones.Count == 0) { mostrarUso(); } else if (opcionInvalida(opciones)) { Console.WriteLine("Error: opción incorrecta"); mostrarUso(); } try { //Validar el archivo de entrada if (!opciones.ContainsKey("--entrada")) { Console.WriteLine("Error: falta archivo de entrada"); mostrarUso(); } nombreArchivo = opciones["--entrada"]; input = new System.IO.StreamReader(nombreArchivo); TinyLexer lexer = new TinyLexer(input); if (opciones.ContainsKey("--mostrar-tokens")) { Console.WriteLine("\n\n\n"); mostrarTokens(lexer, input); } lexer.setNombreArchivo(nombreArchivo); TinyParser parser = new TinyParser(lexer); Programa result = (Programa)(parser.parse().value); if (parser.getOmerrs() > 0) { System.Console.Error.WriteLine("La compilación ha terminado con " + parser.getOmerrs() + " errores"); WriteKeyPressForExit(); System.Environment.Exit(1); } if (opciones.ContainsKey("--mostrar-ast")) { Console.WriteLine("\n\n\n"); Console.WriteLine("\n####### Inicio del Árbol Sintáctico Abstracto #######"); result.dump(System.Console.Out, 0); Console.WriteLine("####### Fin del Árbol Sintáctico Abstracto #######\n"); } AnalizadorSemantico sem = new AnalizadorSemantico(result); sem.analizar(); if (SemantErrorReport.Instancia.tieneErrores()) { Console.Error.WriteLine("La compilación ha terminado con " + SemantErrorReport.Instancia.Errores + " errores"); WriteKeyPressForExit(); System.Environment.Exit(1); } else { if (opciones.ContainsKey("--mostrar-tipos")) { Console.WriteLine("\n\n\n"); Console.WriteLine("####### Inicio del Árbol Sintáctico Abstracto Anotado #######"); result.dump(System.Console.Out, 0); Console.WriteLine("####### Fin del Árbol Sintáctico Abstracto Anotado #######\n"); } Console.WriteLine("\n\n\n"); string path = Directory.GetCurrentDirectory(); Console.WriteLine("El directorio donde se ha generado el ejecutable es {0}", path); Sentencia s = result.Sentencias.getLista()[1]; Condicional c = (Condicional)s; GeneradorCodigo gen = new GeneradorCodigo(result, System.IO.Path.GetFileName(nombreArchivo), System.IO.Path.GetFileName(nombreArchivo) + ".exe"); if (opciones.ContainsKey("--generar-con-ast")) { gen.GenerarEjecutableconAst(false); } else if (opciones.ContainsKey("--generar-con-func")) { gen.GenerarEjecutableconFuncion(false); } else { gen.GenerarEjecutableconFuncion(false); } Console.WriteLine("La compilación ha finalizado correctamente"); } } catch (Exception e) { Console.Error.WriteLine(e.Message); Console.Error.WriteLine("!!! ERROR GRAVE: EL COMPILADOR NO GENERADO DE FORMA CORRECTA EL EJECUTABLE !!!"); throw new System.Exception("ERROR-0001: Un error inesperado no ha permitido llevar a cabo de forma correcta el proceso de compilacion"); } WriteKeyPressForExit(); }