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")); }
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")); }
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")); }
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))); }