Esempio n. 1
0
        public void SMG_05_04_SyntaxCases()
        {
            TraceFlags.ShowDepencencyAnalysis = true;

            var cc = new StateMachineCompiler();
            cc.CompileString(ReadEmbeddedScript("SyntaxCases.smg"));

            cc.Parameters.Language = "pseudo";

            cc.GenerateCode();

            Trace("output:\n{0}", cc.Output);
        }
Esempio n. 2
0
        public void SMG_01_03_ConditionTransitions()
        {
            TraceFlags.ShowDepencencyAnalysis = true;
            var cc = new StateMachineCompiler();
            var sm = cc.CompileString(ReadEmbeddedScript("TransitionCondition.smg"));
            cc.GenerateCode();

            PrintEventEffectConditions(sm);

            Trace("{0}", cc.Output);
        }
Esempio n. 3
0
        public void SMG_05_03_PseudoCode()
        {
            var cc = new StateMachineCompiler();
            cc.CompileString(ReadEmbeddedScript("StandardConditions.smg"));

            cc.Parameters.Language = "pseudo";

            cc.GenerateCode();

            Trace("output:\n{0}", cc.Output);
        }
Esempio n. 4
0
        public void SMG_05_02_CodeGeneration()
        {
            // TraceFlags.ShowLabel = true;

            var cc = new StateMachineCompiler();
            cc.CompileString(ReadEmbeddedScript("CodeGenerationOptions.smg"));

            Assert.AreEqual(true, cc.Parameters.IsPartial);
            Assert.AreEqual("Test.Code", cc.Parameters.Namespace);

            cc.GenerateCode();

            Trace("output:\n{0}", cc.Output);

            /*using(var writer = new StreamWriter(@"c:\users\tc\repositories\igra3\prototype\html\smg.js"))
            {
                writer.Write(cc.Output);
            }*/
        }
Esempio n. 5
0
        public void SMG_05_01_CodeGeneration()
        {
            var cc = new StateMachineCompiler();
            cc.CompileString(ReadEmbeddedScript("CodeGeneration.smg"));

            cc.GenerateCode();
            Assert.AreEqual(2, cc.SM.Events.Count());

            var u = cc.SM.AddEvent("u");
            var trigger = new Trigger(u, cc.EvaluateCondition("s(b => a)"));
            trigger.AddEffects(new[] { new CallEffect(cc.SM, "m") });
            cc.SM.AddTrigger(trigger);

            Assert.IsFalse(cc.SM.IsPrepared);

            cc.Parameters.IsProcessEventPublic = true;

            cc.GenerateCode();

            Assert.IsTrue(cc.SM.IsPrepared);
            Assert.AreEqual(3, cc.SM.Events.Count());

            Trace("output:\n{0}", cc.Output);

            var csharp = new CSharpCodeProvider();
            var options = new CompilerParameters();

            var result = csharp.CompileAssemblyFromSource(options, cc.Output);

            if (result.Errors.Count > 0)
            {
                foreach (var e in result.Errors)
                {
                    Trace("{0}", e);
                }

                Assert.Fail("generated code failed to compile.");
            }

            var dll = result.CompiledAssembly;
            var type = dll.GetType("CodeGeneration");
            var eventtype = dll.GetType("EventCode");
            var events = Enum.GetValues(eventtype);

            var x = Activator.CreateInstance(type);

            var tostatestring = type.GetMethod("ToStateString");
            Trace("initial state [{0}].", tostatestring.Invoke(x, new object[0]));

            var processevent = type.GetMethod("ProcessEvent");
            var sendevent = events.GetValue(0);
            Trace("sending event '{0}' ...", sendevent);
            processevent.Invoke(x, new object[] { sendevent });

            var statestring = tostatestring.Invoke(x, new object[0]).ToString();
            Trace("state after [{0}].", statestring);

            Assert.AreEqual("s(b) t(b) f(0)", statestring);

            sendevent = events.GetValue(1);
            Trace("sending event '{0}' ...", sendevent);
            processevent.Invoke(x, new object[] { sendevent });

            statestring = tostatestring.Invoke(x, new object[0]).ToString();
            Trace("state after [{0}].", statestring);

            Assert.AreEqual("s(b) t(a) f(1)", statestring);
        }
Esempio n. 6
0
        public void SMG_04_Program()
        {
            TraceFlags.ShowDepencencyAnalysis = true;
            var cc = new StateMachineCompiler();

            var sm = cc.CompileString(ReadEmbeddedScript("script3.smg"));

            cc.GenerateCode();

            PrintEventEffectConditions(cc.SM);

            Trace("{0}", cc.Output);

            // Trace("gatecache: \n{0}", GateCache.Instance.ToDebugString());
        }
Esempio n. 7
0
        public void SMG_04_06_SumGuard()
        {
            var cc = new StateMachineCompiler();
            var smgtext = ReadEmbeddedScript("SumGuard.smg");
            var sm = cc.CompileString(smgtext);

            sm.Calculate();

            PrintEventEffectConditions(sm);

            cc.GenerateCode();
            Trace("{0}", cc.Output);
        }