Пример #1
0
def get_digits_enfa():
    """ An epsilon NFA to recognize digits """
    epsilon = Epsilon()
    plus = Symbol("+")
    minus = Symbol("-")
    point = Symbol(".")
    digits = [Symbol(x) for x in range(10)]
    states = [State("q" + str(x)) for x in range(6)]
    enfa = EpsilonNFA()
    enfa.add_start_state(states[0])
    enfa.add_final_state(states[5])
    enfa.add_transition(states[0], epsilon, states[1])
    enfa.add_transition(states[0], plus, states[1])
    enfa.add_transition(states[0], minus, states[1])
    for digit in digits:
        enfa.add_transitions([(states[1], digit, states[1]),
                              (states[1], digit, states[4]),
                              (states[2], digit, states[3]),
                              (states[3], digit, states[3])])
    enfa.add_transitions([(states[1], point, states[2]),
                          (states[4], point, states[3]),
                          (states[3], epsilon, states[5])])
    return enfa, digits, epsilon, plus, minus, point
Пример #2
0
def test_automata_intersection():
    states = [State(str(i)) for i in range(4)]
    symb_a = Symbol('a')
    symb_b = Symbol('b')
    symb_c = Symbol('c')

    enfa_1 = EpsilonNFA()
    enfa_1.add_start_state(states[0])
    enfa_1.add_transitions([
        (states[0], symb_a, states[1]),
        (states[1], symb_b, states[2]),
        (states[2], symb_c, states[0])
    ])
    enfa_1.add_final_state(states[0])

    enfa_2 = EpsilonNFA()
    enfa_2.add_start_state(states[0])
    enfa_2.add_transitions([
        (states[0], symb_a, states[1]),
        (states[1], symb_b, states[1]),
        (states[1], symb_c, states[2])
    ])
    enfa_2.add_final_state(states[2])

    result = enfa_1 & enfa_2

    expected = EpsilonNFA()
    expected.add_start_state(states[0])
    expected.add_transitions([
        (states[0], symb_a, states[1]),
        (states[1], symb_b, states[2]),
        (states[2], symb_c, states[3])
    ])
    expected.add_final_state(states[3])

    assert result.is_equivalent_to(expected)