コード例 #1
0
ファイル: tiny.cs プロジェクト: xiul/TinySharp
        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();
        }
コード例 #2
0
ファイル: TinyParser.cs プロジェクト: xiul/TinySharp
 /** Constructor */
 public CUP_TinyParser_actions(TinyParser t_parser)
 {
     this.my_parser = t_parser;
 }
コード例 #3
0
ファイル: TinyParser.cs プロジェクト: xiul/TinySharp
 /** Constructor */
 public CUP_TinyParser_actions(TinyParser t_parser)
 {
     this.my_parser = t_parser;
 }