def build_singleton_nfa(transition): """The simplest NFA for a single character Returns NFA V: {start, end} E: {(start, end, transition)} """ start = NFAState(start=True) acc = NFAState(accept=True) start.add_transition(acc, transition) return NFA(start)
def test_DFA(self): s1 = NFAState() s2 = NFAState() s3 = NFAState() s4 = NFAState() s1.add_transition(s2) s1.add_transition(s3, "a") t = DFAState(substates={s1,s2,s3}) self.assertEquals(t.get_substates(), {s1,s2,s3}) dfa = DFA(t) self.assertFalse(dfa.get_state_by_substate({s1,s2})) self.assertTrue(dfa.get_state_by_substate({s1,s2,s3}), t)
def test_NFAState(self): s1 = NFAState() s2 = NFAState() s3 = NFAState() s1.add_transition(s2) s1.add_transition(s3, "a") self.assertTrue(s1.get_null_transitions()[0] == s2) self.assertTrue(s1.get_transition("a") == s3) self.assertEquals(set(s1.adj()), {("a",s3),(None,s2)})
def build_nfa(self): # ( a+ | b(a|b) ) s1 = NFAState(start=True, accept=False) s2 = NFAState(start=False, accept=True) s3 = NFAState(start=False, accept=False) s4 = NFAState(start=False, accept=False) s5 = NFAState(start=False, accept=True) s6 = NFAState(start=False, accept=False) s7 = NFAState(start=False, accept=True) s1.add_transition(s2,"a") s1.add_transition(s3) s2.add_transition(s2,"a") s3.add_transition(s4,"b") s4.add_transition(s5,"a") s4.add_transition(s6) s6.add_transition(s7,"b") nfa = NFA(s1) return nfa