コード例 #1
0
        public void LexerAndParserPrint()
        {
            var engine = new MonkeyspeakEngine();
            //engine.Options.Debug = true;
            var stream = new MemoryStream(Encoding.UTF8.GetBytes(tableScript));

            using (Lexer lexer = new Lexer(engine, new SStreamReader(stream)))
            {
                Parser parser = new Parser(engine);
                //parser.VisitToken = VisitTokens;
                foreach (var triggerList in parser.Parse(lexer))
                {
                    Logger.Info($"New Block starting with {triggerList.()}");
                    // each triggerList instance is a new (0:###) block.
                    foreach (var trigger in triggerList)
                    {
                        // check trigger's out here.
                        StringBuilder sb = new StringBuilder();
                        sb.Append(trigger.ToString(true, true));
                        Logger.Info(sb.ToString());
                    }
                }
                parser.VisitToken = null;
            }
        }
コード例 #2
0
        public void NonExistantTimerTest()
        {
            var timerLibTestScript = @"

(0:0) when the script starts,
    (5:300) create timer 13 to go off every 900 second(s) with a start delay of 0 second(s).
    (5:102) print {Timer 13 created} to the console.

(0:300) when timer 2 goes off,
    (5:302) get current timer and put the id into variable %timerId.
    (5:304) get the current uptime and put it into variable %currentTime.
    (5:102) print {Timer %timerId at %currentTime secs} to the console.
";
            var engine             = new MonkeyspeakEngine();

            engine.Options.Debug = true;
            var page = engine.LoadFromString(timerLibTestScript);

            //page.Error += DebugAllErrors;

            page.LoadAllLibraries();
            // page.RemoveLibrary<Monkeyspeak.Libraries.Debug>();

            page.AddTriggerHandler(TriggerCategory.Cause, 0, HandleScriptStartCause);

            page.Execute(0);
            System.Threading.Thread.Sleep(100);
            page.Dispose();
        }
コード例 #3
0
        public void Tables()
        {
            for (int i = 0; i < 1; i++)
            {
                var engine = new MonkeyspeakEngine();
                engine.Options.Debug = false;

                Logger.Info(tableScript);
                Page page = engine.LoadFromString(tableScript); // replace with tableScriptMini to see results of that script

                page.Error += DebugAllErrors;
                page.AddTriggerHandler(TriggerCategory.Condition, 666, AlwaysFalseCond);
                page.LoadAllLibraries();
                //   page.RemoveLibrary<Monkeyspeak.Libraries.Debug>();
                page.SetVariable("%testVariable", "Hello WOrld", true);

                page.AddTriggerHandler(TriggerCategory.Cause, 0, HandleScriptStartCause);

                // Trigger count created by subscribing to TriggerAdded event and putting triggers into a list.
                Console.WriteLine("Trigger Count: " + page.Size);
                Logger.Assert(page.Size > 0, "Page size was 0 = FAIL!");
                page.Execute();
                foreach (var variable in page.Scope)
                {
                    Logger.Info($"{variable.ToString()} {variable.GetType().Name}");
                }
            }
        }
コード例 #4
0
        public void TestReflectionLoader()
        {
            MonkeyspeakEngine engine = new MonkeyspeakEngine();
            Page page = engine.LoadFromString(@"
(0:1000)
(5:1000) {Hello Reflection Test}
(5:1001) {Hello Reflection Test 2}
");

            page.LoadLibraryFromAssembly(Assembly.GetExecutingAssembly().Location);

            page.Execute(1000);
        }
コード例 #5
0
        public void DurabilityParseString()
        {
            var engine = new MonkeyspeakEngine();

            // Set the trigger limit to int.MaxValue to prevent TriggerLimit reached exceptions
            engine.Options.TriggerLimit = int.MaxValue;

            var sb = new StringBuilder();

            for (int i = 0; i < 1; i++)
            {
                sb.AppendLine();
                sb.AppendLine("(0:0) when the script is started,");
                sb.AppendLine("(5:100) set %hello to {Hello World}.");
                sb.AppendLine("(1:104) and variable %hello equals {this will be false move on to next condition}");
                sb.AppendLine("(5:102) print {hello = %hello helloNum = % helloNum} to the console.");
                sb.AppendLine("(1:104) and variable %hello equals {Hello World}");
                sb.AppendLine("(5:101) set %helloNum to 5.");
                sb.AppendLine("(5:102) print {hello = %hello helloNum = %helloNum} to the console.");
                sb.AppendLine();
            }
            Logger.Info(sb.ToString());
            Page page = engine.LoadFromString(sb.ToString());

            page.LoadAllLibraries();
            page.RemoveLibrary <Monkeyspeak.Libraries.Debug>();

            var sb2 = new StringBuilder();

            for (int i = 0; i < 5; i++)
            {
                sb.AppendLine();
                sb.AppendLine("(0:0) when the script is started,");
                sb.AppendLine("(5:100) set %hello to {Hello World}.");
                sb.AppendLine("(1:104) and variable %hello equals {this will be false move on to next condition}");
                sb.AppendLine("(5:102) print {hello = %hello helloNum = % helloNum} to the console.");
                sb.AppendLine("(1:104) and variable %hello equals {Hello World}");
                sb.AppendLine("(5:101) set %helloNum to 5.");
                sb.AppendLine("(5:102) print {hello = %hello helloNum = % helloNum} to the console.");
                sb.AppendLine();
            }

            engine.LoadFromString(page, sb2.ToString());

            page.Error += DebugAllErrors;

            page.AddTriggerHandler(TriggerCategory.Cause, 0, HandleScriptStartCause);

            Logger.Info($"Triggers: {page.Size}");
            page.Execute();
        }
コード例 #6
0
        public void TestCompileToFile()
        {
            Logger.SingleThreaded = true;
            var engine = new MonkeyspeakEngine
            {
                Options = { TriggerLimit = int.MaxValue, Debug = false }
            };

            var sb = new StringBuilder(testScript);

            /*for (int i = 0; i <= 50; i++)
             * {
             *  sb.AppendLine();
             *  sb.AppendLine(testScript);
             *  sb.AppendLine();
             * }*/
            Stopwatch watch   = Stopwatch.StartNew();
            var       oldPage = engine.LoadFromString(sb.ToString());

            oldPage.AddTriggerHandler(TriggerCategory.Cause, 0, UnitTest1.HandleScriptStartCause);

            watch.Stop();
            Console.WriteLine($"Loaded in {watch.ElapsedMilliseconds} ms");
            Console.WriteLine($"Page Trigger Count: {oldPage.Size}");
            watch.Restart();

            oldPage.CompileToFile(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "test.msx"));

            watch.Stop();
            Console.WriteLine($"Compiled in {watch.ElapsedMilliseconds} ms");
            watch.Restart();

            var page = engine.LoadCompiledFile(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "test.msx"));

            //page.RemoveLibrary<MyLibrary>();
            watch.Stop();
            Console.WriteLine($"Loaded compiled in {watch.ElapsedMilliseconds} ms");

            page.LoadAllLibraries();
            page.RemoveLibrary <Monkeyspeak.Libraries.Debug>();
            page.AddTriggerHandler(TriggerCategory.Cause, 0, UnitTest1.HandleScriptStartCause);
            Console.WriteLine("Page Trigger Count: " + page.Size);
            page.Execute();
            page.Dispose();
            oldPage.Dispose();
        }
コード例 #7
0
        public void GetTriggerDescriptionsTest()
        {
            MonkeyspeakEngine engine = new MonkeyspeakEngine();

            engine.Options.Debug = true;
            Page page = engine.LoadFromString(testScript);

            page.Error += DebugAllErrors;

            page.LoadAllLibraries();
            page.RemoveLibrary <Monkeyspeak.Libraries.Debug>();

            foreach (string desc in page.GetTriggerDescriptions())
            {
                Console.WriteLine(desc);
            }
        }
コード例 #8
0
        public void DurabilityParseStringAsync()
        {
            var engine = new MonkeyspeakEngine();

            // Set the trigger limit to int.MaxValue to prevent TriggerLimit reached exceptions
            engine.Options.TriggerLimit = int.MaxValue;

            var sb = new StringBuilder();

            for (int i = 0; i < 10000; i++)
            {
                sb.AppendLine();
                sb.Append("(5:100) set %hello to {Hello World}.");
                sb.AppendLine();
            }

            Page page = engine.LoadFromString(sb.ToString());

            page.LoadAllLibraries();
            page.RemoveLibrary <Monkeyspeak.Libraries.Debug>();

            var sb2 = new StringBuilder();

            for (int i = 0; i < 50000; i++)
            {
                sb2.AppendLine();
                sb2.Append("(5:100) set %hello to {Hello World}.");
                sb2.AppendLine();
            }
            var tasks = new Task[5];

            for (int i = 0; i <= tasks.Length - 1; i++)
            {
                tasks[i] = engine.LoadFromStringAsync(page, sb2.ToString());
                tasks[i].ContinueWith(task => Logger.Info($"Triggers: {page.Size}"));
            }

            page.Error += DebugAllErrors;

            page.AddTriggerHandler(TriggerCategory.Cause, 0, HandleScriptStartCause);

            Task.WaitAll(tasks);
            Logger.Info($"Triggers: {page.Size}");
            //page.Execute(0);
        }
コード例 #9
0
        public void SetGetVariableTest()
        {
            MonkeyspeakEngine engine = new MonkeyspeakEngine();

            engine.Options.VariableCountLimit = 100000;
            Page page = engine.LoadFromString(testScript);

            page.Error += DebugAllErrors;

            for (int i = 0; i <= 10000; i++)
            {
                page.SetVariable(i.ToString(), true.ToString(), false);
            }
            foreach (var variable in page.Scope)
            {
                Console.WriteLine(variable.ToString());
            }
        }
コード例 #10
0
        public void TimerLibraryTest()
        {
            var timerLibTestScript = @"
(0:0) when the script starts,
    (5:303) pause script execution for 2 seconds.
    (5:304) get the current time in seconds and put it into variable %currentTime.
    (5:102) print {Current Time %currentTime secs} to the console.

(0:0) when the script starts,
    (5:101) set variable %timer to 1.
    (5:300) create timer %timer to go off every 2 second(s) with a start delay of 1 second(s).
    (5:300) create timer 2 to go off every 5 second(s). *don't need delay part here
    (5:300) create timer 13 to go off every 900 second(s) with a start delay of # second(s).

(0:300) when timer 2 goes off,
(0:300) when timer %timer goes off,
    (5:302) get current timer and put the id into variable %timerId.
    (5:304) get the current uptime and put it into variable %currentTime.
    (5:102) print {Timer %timerId at %currentTime secs} to the console.

(0:300) when timer 2 goes off,
(0:300) when timer %timer goes off,
    (5:302) get current timer and put the id into variable %timerId.
    (5:304) get the current uptime and put it into variable %currentTime.
    (5:102) print {timerId = %timerId at %currentTime secs} to the console.
    (5:150) take variable %i2 and add 1 to it.
    (5:102) print {elapsed count = %i2} to the console.
";
            var engine             = new MonkeyspeakEngine();

            engine.Options.Debug = true;
            var page = engine.LoadFromString(timerLibTestScript);

            page.Error += DebugAllErrors;

            page.LoadAllLibraries();
            page.RemoveLibrary <Monkeyspeak.Libraries.Debug>();

            page.AddTriggerHandler(TriggerCategory.Cause, 0, HandleScriptStartCause);

            page.Execute(0);
            System.Threading.Thread.Sleep(10000);
            page.Dispose();
        }
コード例 #11
0
        public void IOLibraryTest()
        {
            var ioTestString = @"
(0:0) when the script starts,
	(5:100) set variable %file to {test.txt}.
	(5:102) print {%file} to the console.

(0:0) when the script starts,
	(1:200) and the file {%file} exists,
		(5:202) delete file {%file}.
		(5:203) create file {%file}.

(0:0) when the script starts,
	(1:200) and the file {%file} exists,
	(1:203) and the file {%file} can be written to,
		(5:200) append {Hello World from Monkeyspeak %VERSION!} to file {%file}.

(0:0) when the script starts,
	(5:150) take variable %test and add 2 to it.
	(5:102) print {%test} to the console.
";
            var engine       = new MonkeyspeakEngine();
            var page         = engine.LoadFromString(ioTestString);

            page.Error += DebugAllErrors;

            page.LoadAllLibraries();
            page.RemoveLibrary <Monkeyspeak.Libraries.Debug>();

            page.AddTriggerHandler(TriggerCategory.Cause, 0, HandleScriptStartCause);

            page.Execute(0);
            foreach (var v in page.Scope)
            {
                Logger.Debug(v);
            }
        }
コード例 #12
0
 public TriggerIntegrityUpdater(MonkeyspeakEngine engine)
 {
     this.engine = engine;
 }
コード例 #13
0
 public Compiler(MonkeyspeakEngine engine)
 {
     version = engine.Options.Version;
 }
コード例 #14
0
        private static int Main(string[] args)
        {
            StringBuilder help = new StringBuilder();

            {
                help.AppendLine("Monkeyspeak Help ================")
                .AppendLine("Usage mxsc.exe \"script.ms\" \"script.exe\" [-d]")
                .AppendLine("\tParameters:")
                .AppendLine("\t\t1) Monkeyspeak script file uncompiled. (eg. \"in.ms\")")
                .AppendLine("\t\t2) Monkeyspeak compiled script file. (eg. \"out.exe\")")
                .AppendLine("\tOptional Parameters:")
                .AppendLine("\t\t1) -d Enable compiling with exe debug information for debugging in visual studio (default: disabled)")
                .AppendLine("\t\t2) -e Write error output to error.log file (default: console/terminal)");
            }

            if (args.Length < 2)
            {
                Console.WriteLine(help.ToString());
            }
            else
            {
                for (int i = 0; i <= args.Length - 1; i++)
                {
                    Console.WriteLine("Arg{0}: {1}", i, args[i]);
                }
                Console.WriteLine();

                string filePath = args[0];
                var    engine   = new MonkeyspeakEngine();
                try
                {
                    Page page;
                    using (Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                    {
                        FileInfo fInfo = new FileInfo(filePath);
                        if (fInfo.Extension != "msx")
                        {
                            page = engine.LoadFromStream(stream);
                        }
                        else
                        {
                            page = engine.LoadCompiledStream(stream);
                        }
                    }
                    if (page != null)
                    {
                        bool debugInformation = false;
                        for (int i = 0; i <= args.Length - 1; i++)
                        {
                            if (args[i].Equals("-d"))
                            {
                                debugInformation = true;
                            }
                            if (args[i].Equals("-e"))
                            {
                                Console.SetError(new StreamWriter(new FileStream("error.log", FileMode.Create)));
                            }
                        }

                        var exeBuilder = new ExeBuilder(page, args[1], debugInformation);
                        exeBuilder.Build();
                    }
                }
                catch (Exception ex)
                {
                    Console.Error.WriteLine(ex);
                    if (ex.InnerException != null)
                    {
                        Console.Error.WriteLine("InnerException: ");
                        Console.Error.WriteLine(ex.InnerException);
                    }
                    Console.Error.WriteLine();
                    Console.WriteLine(help.ToString());
                    return(-404);
                }
            }
            return(0);
        }
コード例 #15
0
 protected AbstractParser(MonkeyspeakEngine engine)
 {
     Engine = engine;
 }