コード例 #1
0
 def test_to_regex3(self):
     """ Tests the transformation to regex """
     enfa = EpsilonNFA()
     state0 = State(0)
     state1 = State(1)
     symb_a = Symbol("0")
     symb_b = Symbol("1")
     enfa.add_start_state(state0)
     enfa.add_final_state(state1)
     enfa.add_transition(state0, symb_a, state0)
     enfa.add_transition(state1, symb_b, state0)
     enfa.add_transition(state1, symb_b, state1)
     regex = enfa.to_regex()
     enfa2 = regex.to_epsilon_nfa()
     self.assertFalse(enfa2.accepts([symb_a]))
     self.assertFalse(enfa2.accepts([symb_a, symb_a]))
     self.assertFalse(enfa2.accepts([symb_a, symb_a, symb_b]))
     self.assertFalse(
         enfa2.accepts([symb_a, symb_a, symb_b, symb_b, symb_a]))
     self.assertFalse(
         enfa2.accepts([symb_a, symb_a, symb_b, symb_b, symb_a, symb_b]))
     self.assertFalse(enfa2.accepts([symb_b]))
     epsilon = Epsilon()
     enfa.add_transition(state0, epsilon, state1)
     regex = enfa.to_regex()
     enfa2 = regex.to_epsilon_nfa()
     self.assertTrue(enfa.accepts([]))
     self.assertTrue(enfa.accepts([symb_a]))
     self.assertTrue(enfa2.accepts([symb_a]))
     self.assertTrue(enfa2.accepts([symb_a, symb_a]))
     self.assertTrue(enfa2.accepts([symb_a, symb_a, symb_b, symb_b]))
     self.assertTrue(
         enfa2.accepts([symb_a, symb_a, symb_b, symb_b, symb_a, symb_b]))
     self.assertTrue(enfa2.accepts([symb_b]))
     self.assertTrue(enfa2.accepts([]))
     enfa.remove_transition(state0, symb_a, state0)
     regex = enfa.to_regex()
     enfa2 = regex.to_epsilon_nfa()
     self.assertFalse(enfa2.accepts([symb_a]))
     self.assertFalse(enfa2.accepts([symb_a, symb_a]))
     self.assertFalse(enfa2.accepts([symb_a, symb_a, symb_b]))
     self.assertFalse(
         enfa2.accepts([symb_a, symb_a, symb_b, symb_b, symb_a]))
     self.assertFalse(
         enfa2.accepts([symb_a, symb_a, symb_b, symb_b, symb_a, symb_b]))
     self.assertTrue(enfa2.accepts([symb_b]))
     self.assertTrue(enfa2.accepts([]))
     enfa.remove_transition(state1, symb_b, state1)
     regex = enfa.to_regex()
     enfa2 = regex.to_epsilon_nfa()
     self.assertTrue(enfa2.accepts([symb_b, symb_b]))
     enfa.add_transition(state0, symb_a, state0)
     regex = enfa.to_regex()
     enfa2 = regex.to_epsilon_nfa()
     self.assertTrue(enfa2.accepts([symb_a, symb_b]))
コード例 #2
0
 def test_to_regex(self):
     """ Tests the transformation to regex """
     enfa = EpsilonNFA()
     state0 = State(0)
     state1 = State(1)
     state2 = State(2)
     symb_e = Symbol("e")
     symb_f = Symbol("f")
     symb_g = Symbol("g")
     enfa.add_start_state(state0)
     enfa.add_final_state(state2)
     enfa.add_transition(state0, symb_e, state1)
     enfa.add_transition(state1, symb_f, state2)
     enfa.add_transition(state0, symb_g, state2)
     regex = enfa.to_regex()
     enfa2 = regex.to_epsilon_nfa()
     self.assertTrue(enfa2.accepts([symb_e, symb_f]))
     self.assertTrue(enfa2.accepts([symb_g]))
     self.assertFalse(enfa2.accepts([]))
     self.assertFalse(enfa2.accepts([symb_e]))
     self.assertFalse(enfa2.accepts([symb_f]))
     enfa.add_final_state(state0)
     with self.assertRaises(ValueError) as _:
         enfa.get_regex_simple()
     regex = enfa.to_regex()
     enfa3 = regex.to_epsilon_nfa()
     self.assertTrue(enfa3.accepts([symb_e, symb_f]))
     self.assertTrue(enfa3.accepts([symb_g]))
     self.assertTrue(enfa3.accepts([]))
     self.assertFalse(enfa3.accepts([symb_e]))
     self.assertFalse(enfa3.accepts([symb_f]))
     enfa.remove_start_state(state0)
     regex = enfa.to_regex()
     enfa3 = regex.to_epsilon_nfa()
     self.assertFalse(enfa3.accepts([symb_e, symb_f]))
     self.assertFalse(enfa3.accepts([symb_g]))
     self.assertFalse(enfa3.accepts([]))
     self.assertFalse(enfa3.accepts([symb_e]))
     self.assertFalse(enfa3.accepts([symb_f]))
     enfa.add_start_state(state0)
     enfa.add_transition(state0, symb_f, state0)
     regex = enfa.to_regex()
     enfa3 = regex.to_epsilon_nfa()
     self.assertTrue(enfa3.accepts([symb_e, symb_f]))
     self.assertTrue(enfa3.accepts([symb_f, symb_e, symb_f]))
     self.assertTrue(enfa3.accepts([symb_g]))
     self.assertTrue(enfa3.accepts([symb_f, symb_f, symb_g]))
     self.assertTrue(enfa3.accepts([]))
     self.assertFalse(enfa3.accepts([symb_e]))
     self.assertTrue(enfa3.accepts([symb_f]))
コード例 #3
0
    def test_example_doc(self):
        enfa = EpsilonNFA()
        state0 = State(0)
        state1 = State(1)
        symb_a = Symbol("0")
        symb_b = Symbol("1")
        enfa.add_start_state(state0)
        enfa.add_final_state(state1)
        enfa.add_transition(state0, symb_a, state0)
        enfa.add_transition(state1, symb_b, state0)
        enfa.add_transition(state1, symb_b, state1)

        # Turn a finite automaton into a regex...
        regex = enfa.to_regex()
        # And turn it back into an epsilon non deterministic automaton
        enfa2 = regex.to_epsilon_nfa()