コード例 #1
0
        static void Main(string[] args)
        {
            // 失望
            Console.InputEncoding  = Encoding.Unicode;
            Console.OutputEncoding = Encoding.Unicode;
            Console.CursorVisible  = true;
            Console.WriteLine("MyScript 0.9");
            VM vm = new VM();

            vm.global_table["echo"] = new MyConsole();
            MyScriptStdLib.LibString.Register(vm);
            MyTable       module = new MyTable();
            StringBuilder sb     = new StringBuilder();

            for (; ;)
            {
                if (sb.Length > 0)
                {
                    Console.Write('>');
                }
                Console.Write("> ");
                string line = Console.ReadLine();
                if (line == null)
                {
                    return;
                }
                sb.AppendLine(line);
                var source = sb.ToString();
                if (IsComplete(source) == false)
                {
                    continue;
                }
                try
                {
                    FunctionBody tree = vm.Parse(source);
                    if (tree.block.statements.Count == 1 && tree.block.statements[0] is ExpSyntaxTree)
                    {
                        source = "return " + source;
                        tree   = vm.Parse(source);
                        var func = tree.CreateFunction(vm, module);
                        var obj  = func.Call();
                        if (obj is not null)
                        {
                            Console.WriteLine($"{obj}");
                        }
                    }
                    else
                    {
                        vm.DoString(source, module);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Error: {e.Message}");
                }
                sb.Clear();
            }
        }