コード例 #1
0
        public void SimulationRunnerComparisonTest()
        {
            var pda = new PDA <char, char>(new AcceptanceCondition.EmptyStack(), false, 'Z', false, "Z");

            pda.AddState(1, false);
            pda.AddTransition().From(0).To(0).Read().Pop('Z').Push("ZZZZZZZZZZZZZZZZZZ");
            pda.AddTransition().From(0).To(1).Read().Pop('Z').Push();
            pda.AddTransition().From(1).To(1).Read('a').Pop('Z').Push();

            var word = "aaaaaaaaaaaaaaaaa".ToCharArray();

            var s = new Stopwatch();

            s.Start();
            var path1 = CFGSimulationRunner <char> .RunSimulation(pda, word);

            s.Stop();

            Console.WriteLine(s.ElapsedMilliseconds);

            s.Restart();
            pda.CreateRunner();
            var path2 = DirectSimulationRunner <char, char> .RunSimulation(pda, word);

            s.Stop();

            Console.WriteLine(s.ElapsedMilliseconds);
        }
コード例 #2
0
        public void RunSimulationCFGTest3()
        {
            var pda = new PDA <char, char>(new AcceptanceCondition.FinalState(), false, 'Z', false, "ZXY", 'V');

            pda.AddState(1, false);
            pda.AddState(2, true);
            pda.AddTransition().From(0).To(0).Read('a').Pop('Z').Push("XZ");
            pda.AddTransition().From(0).To(0).Read('a').Pop('X').Push("XX");
            pda.AddTransition().From(0).To(0).Read('a').Pop('Y').Push("XY");
            pda.AddTransition().From(0).To(0).Read('b').Pop('Z').Push("YZ");
            pda.AddTransition().From(0).To(0).Read('b').Pop('Y').Push("YY");
            pda.AddTransition().From(0).To(0).Read('b').Pop('X').Push("YX");
            pda.AddTransition().From(0).To(1).Read().Pop('X').Push("X");
            pda.AddTransition().From(0).To(1).Read().Pop('Y').Push("Y");
            pda.AddTransition().From(0).To(1).Read().Pop('Z').Push("Z");
            pda.AddTransition().From(1).To(1).Read('a').Pop('X').Push();
            pda.AddTransition().From(1).To(1).Read('b').Pop('Y').Push();
            pda.AddTransition().From(1).To(2).Read().Pop('Z').Push("ZZ");

            pda.CreateRunner();

            var path = CFGSimulationRunner <char> .RunSimulation(pda, "abaabbaaba".ToCharArray());

            var act = path.ToXml();

            var         reader    = new StreamReader(@"..\..\..\TestPDL\PDATest\XmlPathCFG3.xml");
            XmlDocument expXmlDoc = new XmlDocument();

            expXmlDoc.Load(reader);
            XDocument xDoc = XDocument.Load(new XmlNodeReader(expXmlDoc));
            var       exp  = xDoc.Root;

            Assert.IsTrue(XNode.DeepEquals(exp, act));
        }
コード例 #3
0
        public void DPDASimulationRunnerTest()
        {
            var dpda = new PDA <char, char>(new AcceptanceCondition.FinalStateAndEmptyStack(), true, 'Z', false, "ZXY");

            dpda.AddState(1, false);
            dpda.AddState(2, true);

            dpda.AddTransition().From(0).To(0).Read('a').Pop('Z').Push("XZ");
            dpda.AddTransition().From(0).To(0).Read('a').Pop('X').Push("XX");
            dpda.AddTransition().From(0).To(0).Read('a').Pop('Y').Push("XY");
            dpda.AddTransition().From(0).To(0).Read('b').Pop('Z').Push("YZ");
            dpda.AddTransition().From(0).To(0).Read('b').Pop('X').Push("YX");
            dpda.AddTransition().From(0).To(0).Read('b').Pop('Y').Push("YY");

            dpda.AddTransition().From(0).To(1).Read('v').Pop('Z').Push("Z");
            dpda.AddTransition().From(0).To(1).Read('v').Pop('X').Push("X");
            dpda.AddTransition().From(0).To(1).Read('v').Pop('Y').Push("Y");

            dpda.AddTransition().From(1).To(1).Read('a').Pop('X').Push();
            dpda.AddTransition().From(1).To(1).Read('b').Pop('Y').Push();
            dpda.AddTransition().From(1).To(2).Read().Pop('Z').Push("");

            var word = "aababbbavabbbabaa".ToCharArray();

            var watch = new Stopwatch();

            watch.Start();
            var path = DPDASimulationRunner <char, char> .RunSimulation(dpda, word, dpda.AcceptanceCondition);

            watch.Stop();

            Console.WriteLine(string.Format("For DPDA runner: {0}", watch.Elapsed));

            var act = path.ToXml();

            var         reader    = new StreamReader(@"..\..\..\TestPDL\PDATest\XmlPathCFG4.xml");
            XmlDocument expXmlDoc = new XmlDocument();

            expXmlDoc.Load(reader);
            XDocument xDoc = XDocument.Load(new XmlNodeReader(expXmlDoc));
            var       exp  = xDoc.Root;

            Assert.IsTrue(XNode.DeepEquals(exp, act));

            watch.Restart();
            path = CFGSimulationRunner <char> .RunSimulation(dpda, word);

            watch.Stop();

            Console.WriteLine(string.Format("For CFG runner: {0}", watch.Elapsed));

            Assert.IsTrue(XNode.DeepEquals(exp, act));

            path = DPDASimulationRunner <char, char> .RunSimulation(dpda, word.Concat("a").ToArray(), dpda.AcceptanceCondition);

            act = path.ToXml();

            reader    = new StreamReader(@"..\..\..\TestPDL\PDATest\XmlPathCFG5.xml");
            expXmlDoc = new XmlDocument();
            expXmlDoc.Load(reader);
            xDoc = XDocument.Load(new XmlNodeReader(expXmlDoc));
            exp  = xDoc.Root;

            Assert.IsTrue(XNode.DeepEquals(exp, act));
        }