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(); }
/** Constructor */ public CUP_TinyParser_actions(TinyParser t_parser) { this.my_parser = t_parser; }