Exemplo n.º 1
0
        private static void StandAloneTest(string text)
        {
            var inputStream = new AntlrInputStream(text);
            var lexer       = new Parser.GolangLexer(inputStream);

            var tokens = lexer.GetAllTokens();

            Console.WriteLine("=== Lexer matches ===");
            foreach (var token in tokens)
            {
                Console.WriteLine("    {0} ({1})", token.Text, lexer.RuleNames[token.Type - 1]);
            }

            lexer.Reset();
            var cts    = new CommonTokenStream(lexer);
            var parser = new Parser.GolangParser(cts);

            parser.Trace = true;
            parser.statement();
        }
Exemplo n.º 2
0
        private static bool BuildLibrary(string name)
        {
            if (IsInteralLibrary(name))
            {
                throw new NotImplementedException();
            }

            var dir = Path.Combine(Environment.CurrentDirectory, StandardLibraryDir, name);

            // create ast root
            var root    = new AST.Root();
            var builder = new AstBuilder(root);

            int count = 42;

            foreach (var file in Directory.EnumerateFiles(dir, "*.go"))
            {
                // parse each file
                var basename = Path.GetFileNameWithoutExtension(file);
                var index    = basename.LastIndexOf('_');
                var fileFlag = string.Empty;
                if (index != -1)
                {
                    fileFlag = basename.Substring(index + 1);
                }

                if (string.IsNullOrEmpty(fileFlag))
                {
                    using (var fileStream = new StreamReader(file, Encoding.UTF8))
                    {
                        var parser = new Parser.GolangParser(
                            new CommonTokenStream(
                                new Parser.GolangLexer(
                                    new AntlrInputStream(fileStream))));

                        parser.RemoveErrorListeners();
                        parser.AddErrorListener(new ErrorHandler(fileStream));
                        builder.Visit(parser.source_file());
                    }

                    if (--count == 0)
                    {
                        break;
                    }
                }
            }

            var tempGatherer = new NodeGatherer <AST.ImportDeclaration>();

            tempGatherer.Process(root);
            var imports = tempGatherer.Results;

            var imported = new HashSet <string>();

            foreach (var i in imports)
            {
                if (imported.Contains(i.Package))
                {
                    continue;
                }

                imported.Add(i.Package);
                LoadImport(i.Package, root);
            }

            var conversionProcessor = new ConversionProcessor();
            var constantEvaluator   = new ConstantEvaluator();
            var resolver            = new AstResolver();
            var typeChecker         = new TypeChecker();
            var translator          = new Translator();
            var compiler            = new Compiler(name, true);

            //new AstPrinter().Process(root);

            conversionProcessor.Process(root);
            constantEvaluator.Process(root);
            resolver.Process(root);
            new AstPrinter(new StreamWriter("log.txt")).Process(root);

            /*typeChecker.Process(root);
             * translator.Process(root);
             * compiler.Process(root);*/

            //Console.WriteLine(root.Packages.First().Value.Imports.Count);
            //compiler.Finalize();
            return(false);
        }