コード例 #1
0
        public void TestCFG_Overlaps()
        {
            var input =
                @"S -> \( S \) | [abx] [bxd] [xde] 
";
            ContextFreeGrammar cfg = GrammarParser <BDD> .Parse(MkAutomaton, input);

            Assert.IsNotNull(cfg.BuiltinTerminalAlgebra);
            Assert.AreEqual("S", cfg.StartSymbol.Name);
            Assert.AreEqual(1, cfg.NonterminalCount);
            Assert.AreEqual(2, cfg.ProductionCount);
            Assert.IsFalse(cfg.IsInGNF());

            var aut = MkAutomaton(@"\((xx)+\)");

            BDD[] witness;
            var   no = cfg.Overlaps <BDD>(aut, out witness);

            Assert.IsFalse(no);

            var aut2 = MkAutomaton(@"\(x+\)");

            BDD[] witness2 = null;
            var   yes      = cfg.Overlaps <BDD>(aut2, out witness2);

            Assert.IsTrue(yes);
            string concrete_witness = new string(Array.ConvertAll(witness2, GetChar));

            Assert.AreEqual <string>("(xxx)", concrete_witness);
        }