Beispiel #1
0
        public void CYK_Test3()
        {
            String             sg1 = "S -> A B C   A->   B->   C->"; // = {""}       Testing epsilon
            ContextFreeGrammar g   = GrammarParser <char> .Parse(f1, sg1);

            g = GrammarUtilities.getEquivalentCNF(g);

            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, ""));

            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "ba"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "ca"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "d"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "abcc"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "cba"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "ababababababababababababababababababab"));
        }
Beispiel #2
0
        public void CYK_Test1()
        {
            String             sg1 = "S->aX X->bS|b"; // =  (ab)*       Aufg 1.1a
            ContextFreeGrammar g   = GrammarParser <char> .Parse(f1, sg1);

            g = GrammarUtilities.getEquivalentCNF(g);

            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "ab"));
            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "abab"));
            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "ababab"));
            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "ababababababababababababababababababababab"));

            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "a"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "b"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "c"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "aab"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "ba"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "aabaabbabb"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "ababababababababababababababababababa"));
        }
Beispiel #3
0
        public void CYK_Test2()
        {
            String             sg1 = "S->aSb|S X| X->cX"; // = a^n b^n            Aufg 1.1b
            ContextFreeGrammar g   = GrammarParser <char> .Parse(f1, sg1);

            g = GrammarUtilities.getEquivalentCNF(g);

            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, ""));
            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "ab"));
            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "aabb"));
            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "aaabbb"));
            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "aaaabbbb"));

            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "a"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "b"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "c"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "aab"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "ba"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "aabaabbabb"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "ababababababababababababababababababab"));
        }
Beispiel #4
0
        public void CYK_Test4()
        {
            String             sg1 = "S->A B C    A->|a    B->b|    C->|c"; // = {"", a, b, c, ab, ac, bc, abc}
            ContextFreeGrammar g   = GrammarParser <char> .Parse(f1, sg1);

            g = GrammarUtilities.getEquivalentCNF(g);

            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, ""));
            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "a"));
            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "b"));
            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "c"));
            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "ab"));
            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "ac"));
            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "bc"));
            Assert.IsTrue(GrammarUtilities.isWordInGrammar(g, "abc"));

            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "ba"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "ca"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "d"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "abcc"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "cba"));
            Assert.IsFalse(GrammarUtilities.isWordInGrammar(g, "ababababababababababababababababababab"));
        }
        public AcceptanceResult <S> IsWordAccepted(IEnumerable <A> word)
        {
            var wordAsString = string.Join("", word.Select(w => w.ToString()));

            if (noWordIsAccepted)
            {
                return(AcceptanceResult <S> .NoAcceptance());
            }
            var res = contextFreeGrammarsInCNF.Select(cfg => new KeyValuePair <string, bool>(cfg.Key, cfg.Value != null && GrammarUtilities.isWordInGrammar(cfg.Value, wordAsString))).ToList();

            return(new AcceptanceResult <S>(res.ToDictionary(k => k.Key, k => k.Value)));
        }