Exemple #1
0
        public void NfaToDfaExample() // http://web.cecs.pdx.edu/~harry/compilers/slides/LexicalPart3.pdf
        {
            NFA nfa = new NFA();

            NFA.State[] states = new NFA.State[11];
            for (int i = 0; i < states.Length; i++)
            {
                states[i] = new NFA.State();
            }

            states[0].AddEmptyTransition(states[1]);
            states[0].AddEmptyTransition(states[7]);
            states[1].AddEmptyTransition(states[2]);
            states[1].AddEmptyTransition(states[4]);
            states[2].AddTransition('a', states[3]);
            states[3].AddEmptyTransition(states[6]);
            states[4].AddTransition('b', states[5]);
            states[5].AddEmptyTransition(states[6]);
            states[6].AddEmptyTransition(states[1]);
            states[6].AddEmptyTransition(states[7]);
            states[7].AddTransition('a', states[8]);
            states[8].AddTransition('b', states[9]);
            states[9].AddTransition('b', states[10]);
            states[10].IsFinal = true;

            nfa.Start = states[0];
            nfa.Exit  = states[10];

            DFA dfa = nfa.ToDfa();

            Assert.IsFalse(dfa.IsMatch(""));
            Assert.IsFalse(dfa.IsMatch("a"));
            Assert.IsFalse(dfa.IsMatch("b"));
            Assert.IsFalse(dfa.IsMatch("ab"));

            Assert.IsTrue(dfa.IsMatch("abb"));
            Assert.IsTrue(dfa.IsMatch("aabb"));
            Assert.IsTrue(dfa.IsMatch("babb"));
            Assert.IsTrue(dfa.IsMatch("ababb"));
            Assert.IsTrue(dfa.IsMatch("aaabb"));
            Assert.IsTrue(dfa.IsMatch("bbabb"));
            Assert.IsTrue(dfa.IsMatch("abababb"));
        }
Exemple #2
0
        public void NfaToDfaExample()
        {
            NFA nfa = new NFA();

            NFA.State[] states = new NFA.State[11];
            for (int i = 0; i < states.Length; i++)
                states[i] = new NFA.State();

            states[0].AddEmptyTransition(states[1]);
            states[0].AddEmptyTransition(states[7]);
            states[1].AddEmptyTransition(states[2]);
            states[1].AddEmptyTransition(states[4]);
            states[2].AddTransition('a', states[3]);
            states[3].AddEmptyTransition(states[6]);
            states[4].AddTransition('b', states[5]);
            states[5].AddEmptyTransition(states[6]);
            states[6].AddEmptyTransition(states[1]);
            states[6].AddEmptyTransition(states[7]);
            states[7].AddTransition('a', states[8]);
            states[8].AddTransition('b', states[9]);
            states[9].AddTransition('b', states[10]);
            states[10].IsFinal = true;

            nfa.Start = states[0];
            nfa.Exit = states[10];

            DFA dfa = nfa.ToDfa();

            Assert.IsFalse(dfa.IsMatch(""));
            Assert.IsFalse(dfa.IsMatch("a"));
            Assert.IsFalse(dfa.IsMatch("b"));
            Assert.IsFalse(dfa.IsMatch("ab"));

            Assert.IsTrue(dfa.IsMatch("abb"));
            Assert.IsTrue(dfa.IsMatch("aabb"));
            Assert.IsTrue(dfa.IsMatch("babb"));
            Assert.IsTrue(dfa.IsMatch("ababb"));
            Assert.IsTrue(dfa.IsMatch("aaabb"));
            Assert.IsTrue(dfa.IsMatch("bbabb"));
            Assert.IsTrue(dfa.IsMatch("abababb"));
        }