Exemple #1
0
        private static void Compile(DogeFile file, bool verbose, string code, params string[] startup)
        {
            IEnumerable <DogeToken> tokens = Workspace.Tokenize(code).ToArray();

            if (verbose)
            {
                Console.WriteLine($"{string.Join(",\n", tokens.Select(x => x.ToString()))}");
            }

            DogeNamespaceDefinition @namespace = Workspace.Build(file, tokens);

            if (verbose)
            {
                Console.Write(@namespace.ToString());
            }

            DogeSymbolTable symbolTable = Workspace.BuildSymbolTable(@namespace);

            if (verbose)
            {
                Console.Write(symbolTable);
            }

            Workspace.AddStandardLibrary(symbolTable);

            Workspace.ResolveSymbols(@namespace, symbolTable);
            if (verbose)
            {
                Console.Write(@namespace.ToString());
            }

            DogeProject project = new DogeProject(
                @namespace,
                (DogeNamedMethodDefinition)symbolTable.ResolveSymbol(
                    startup,
                    s => s.SymbolType == DogeSymbolType.Method,
                    _ => true)
                .Definition !);

            DogeInterpreter interpreter = new DogeInterpreter(project);

            interpreter.Run();
        }