Example #1
0
        private static Instruction[] LexParseAndEmit(string source)
        {
            var reader = source.CharwiseWithTrimmedLines();

            using var lexer = new Lexer(reader);
            var tokens    = lexer.Lex().ToList();
            var parser    = new Parser(tokens);
            var ast       = (ProgramSyntax)parser.Parse();
            var functions = new SymbolWaddler().WaddleProgram(ast);
            var emitter   = new EmittingVisitor(functions[Naming.EntryPointFunctionName].Variables
                                                .ToDictionary(kvp => kvp.Key, kvp => kvp.Value as Symbol));

            ast.Accept(emitter);
            return(emitter.BuildProgram());
        }