Beispiel #1
0
        public static void Main()
        {
            var codeReader = new StringReader(_code);
            var rawTokens  = new LuaRawTokenizer();
            var luaTokens  = new LuaTokenizer();

            rawTokens.Reset(codeReader);
            luaTokens.Reset(rawTokens);

            var parser  = new LuaParser();
            var builder = new SyntaxTreeBuilder();

            builder.Start();
            luaTokens.EnsureMoveNext();
            parser.Reset(luaTokens, builder);
            parser.Parse();

            var ast = builder.Finish();

            var env = new Table();

            env.SetRaw(TypedValue.MakeString("print"), TypedValue.MakeNClosure(Print));

            var codeGen = new CodeGenerator();
            var closure = codeGen.Compile(ast, env);

            var thread = new Thread();
            var stack  = thread.AllocateRootCSharpStack(1);

            var arg = TypedValue.MakeString("C#");

            stack.Write(0, in arg);
            LuaInterpreter.Execute(stack, closure, 0, 1);
            stack.Read(0, out var ret);
        }
Beispiel #2
0
        public void CreateTokensForValidContent()
        {
            string source = @"a = 1";

            var result = LuaTokenizer.Scan(source);

            result.Values.Should().BeEquivalentTo(Tkn.Letter, Tkn.WhiteSpace, Tkn.Assign, Tkn.WhiteSpace, Tkn.Digit);

            source = @"if a == 43 then print(a) end ";

            result = LuaTokenizer.Scan(source);

            result.Values.Should().BeEquivalentTo(
                Tkn.Keyword_If, Tkn.Letter, Tkn.WhiteSpace, Tkn.Equality, Tkn.WhiteSpace, Tkn.Digit, Tkn.Digit, Tkn.WhiteSpace, Tkn.Keyword_Then,
                Tkn.Letter, Tkn.Letter, Tkn.Letter, Tkn.Letter, Tkn.Letter, Tkn.LParen, Tkn.Letter, Tkn.RParen,
                Tkn.WhiteSpace, Tkn.Keyword_End);
        }
Beispiel #3
0
        private static LClosure Compile(string code)
        {
            var codeReader = new StringReader(code);
            var rawTokens  = new LuaRawTokenizer();
            var luaTokens  = new LuaTokenizer();

            rawTokens.Reset(codeReader);
            luaTokens.Reset(rawTokens);

            var parser  = new LuaParser();
            var builder = new SyntaxTreeBuilder();

            builder.Start();
            luaTokens.EnsureMoveNext();
            parser.Reset(luaTokens, builder);
            parser.Parse();

            var ast = builder.Finish();

            return(_fastLuaCodeGen.Compile(ast, _fastLuaEnv));
        }