Esempio n. 1
0
File: Tiny.cs Progetto: RoyGI/code
        /// <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());
        }
Esempio n. 2
0
        static void mostrarTokens(TinyLexer lexer, System.IO.StreamReader input)
        {
            Console.WriteLine("####### Inicio del análisis léxico #######");
            Symbol symbol;

            while ((symbol = lexer.next_token()).sym != TokenDef.EOF)
            {
                Utilidades.dumpToken(System.Console.Out, symbol);
            }

            input.BaseStream.Position = 0;
            input.DiscardBufferedData();
            Console.WriteLine("####### Fin del análisis léxico #######");
        }
Esempio n. 3
0
        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();
        }
Esempio n. 4
0
        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();
        }
Esempio n. 5
0
        static void mostrarTokens(TinyLexer lexer, System.IO.StreamReader input)
        {
            Console.WriteLine("####### Inicio del análisis léxico #######");
            Symbol symbol;
            while ((symbol = lexer.next_token()).sym != TokenDef.EOF)
            {
                Utilidades.dumpToken(System.Console.Out, symbol);
            }

            input.BaseStream.Position = 0;
            input.DiscardBufferedData();
            Console.WriteLine("####### Fin del análisis léxico #######");
        }