Beispiel #1
0
        private static (ProgramSyntax ast, IImmutableDictionary <string, FunctionDecl> functions) LexParseAndWaddleSymbols(
            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);

            return(ast, functions);
        }
Beispiel #2
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());
        }
Beispiel #3
0
        public void AstEmissionTest()
        {
            var reader = @"
                function main() {
                }
                ".CharwiseWithTrimmedLines();

            using var lexer = new Lexer(reader);
            var tokens          = lexer.Lex().ToList();
            var parser          = new Parser(tokens);
            var ast             = parser.Parse();
            var symbols         = new SymbolWaddler().WaddleProgram((ProgramSyntax)ast);
            var semanticWaddler = new SemanticWaddler(symbols);

            semanticWaddler.WaddleProgram((ProgramSyntax)ast);
        }