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