Exemple #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]))
Exemple #2
0
 def test_minimization(self):
     """ Tests the minimization algorithm """
     enfa = get_enfa_example0_bis()
     symb_a = Symbol("a")
     symb_b = Symbol("b")
     enfa = enfa.minimize()
     self.assertTrue(enfa.is_deterministic())
     self.assertEqual(len(enfa.states), 2)
     self.assertTrue(enfa.accepts([symb_a, symb_b]))
     self.assertTrue(enfa.accepts([symb_a, symb_a, symb_b]))
     self.assertTrue(enfa.accepts([symb_b]))
     self.assertFalse(enfa.accepts([symb_a]))
     enfa = get_example_non_minimal()
     enfa = enfa.minimize()
     self.assertTrue(enfa.is_deterministic())
     self.assertEqual(len(enfa.states), 3)
     self.assertTrue(enfa.accepts([symb_a, symb_b]))
     self.assertTrue(enfa.accepts([symb_a, symb_a, symb_b]))
     self.assertFalse(enfa.accepts([symb_b]))
     self.assertFalse(enfa.accepts([symb_a]))
     enfa = EpsilonNFA()
     enfa = enfa.minimize()
     self.assertTrue(enfa.is_deterministic())
     self.assertEqual(len(enfa.states), 0)
     self.assertFalse(enfa.accepts([]))
Exemple #3
0
def check_correctness(res: EpsilonNFA):
    assert res.accepts("ac"), "Word ac should be accepted"
    assert not res.accepts("ab"), "Word ab shouldn't be accepted"
    assert not res.accepts("abc"), "Word abc shouldn't be accepted"