Beispiel #1
0
def test_pda_intersection():
    q0 = State("q0")
    q1 = State("q1")
    q2 = State("q2")
    q3 = State("q3")

    a = Symbol("a")
    b = Symbol("b")
    c = Symbol("c")

    epsilon_nfa_1 = EpsilonNFA(states={q0, q1, q2},
                               input_symbols={a, b},
                               start_state={q0},
                               final_states={q1, q2})
    epsilon_nfa_1.add_transition(q0, a, q1)
    epsilon_nfa_1.add_transition(q1, b, q2)

    epsilon_nfa_2 = EpsilonNFA(states={q0, q1, q3},
                               input_symbols={a, c},
                               start_state={q0},
                               final_states={q1, q3})
    epsilon_nfa_2.add_transition(q0, a, q1)
    epsilon_nfa_2.add_transition(q1, c, q3)

    expected_epsilon_nfa = EpsilonNFA(states={q0, q1},
                                      input_symbols={a},
                                      start_state={q0},
                                      final_states={q1})
    expected_epsilon_nfa.add_transition(q0, a, q1)

    actual_intersection = epsilon_nfa_1.get_intersection(epsilon_nfa_2)
    assert expected_epsilon_nfa.is_equivalent_to(actual_intersection)
Beispiel #2
0
 def test_non_equivalent(self):
     enfa0 = EpsilonNFA()
     state0 = State("0")
     state1 = State(1)
     symb_a = Symbol('a')
     enfa0.add_start_state(state0)
     enfa0.add_final_state(state1)
     enfa0.add_transition(state0, symb_a, state1)
     enfa0.add_transition(state1, Epsilon(), state0)
     enfa1 = EpsilonNFA()
     enfa1.add_start_state(state0)
     enfa1.add_final_state(state1)
     enfa1.add_transition(state0, symb_a, state1)
     enfa1.add_transition(state1, symb_a, state0)
     self.assertFalse(enfa0.is_equivalent_to(enfa1))