Beispiel #1
0
    def build_basic_struct(value):
        state1 = 1
        state2 = 2
        basic = Automata()
        basic.set_start_state(state1)
        basic.add_final_states(state2)
        basic.add_transitions(state1, state2, value)

        return basic
Beispiel #2
0
 def dot_construct(automata_1, automata_2):
     [automata_1, m1] = automata_1.copy(1)
     [automata_2, m2] = automata_2.copy(m1)
     state1 = 1
     state2 = m2 - 1
     dot = Automata()
     dot.set_start_state(state1)
     dot.add_final_states(state2)
     dot.add_transition(automata_1.final_states[0], automata_2.start_state,
                        Automata.empty())
     dot.add_transitions(automata_1.transitions)
     dot.add_transitions(automata_2.transitions)
     return dot
Beispiel #3
0
    def build_plus_struct(a: Automata, b: Automata):
        a, m1 = a.new_build_from_number(2)
        b, m2 = b.new_build_from_number(m1)

        plus = Automata()
        plus.set_start_state(1)
        plus.add_final_states(m2)
        plus.add_transitions(plus.start_state, a.start_state, Automata.EPSILON)
        plus.add_transitions(plus.start_state, b.start_state, Automata.EPSILON)
        plus.add_transitions(a.final_states[0], plus.final_states[0], Automata.EPSILON)
        plus.add_transitions(b.final_states[0], plus.final_states[0], Automata.EPSILON)
        plus.add_transition_dict(a.transitions)
        plus.add_transition_dict(b.transitions)

        return plus
Beispiel #4
0
 def star_construct(automata_1):
     [automata_1, m1] = automata_1.copy(2)
     state1 = 1
     state2 = m1
     star = Automata()
     star.set_start_state(state1)
     star.add_final_states(state2)
     star.add_transition(star.start_state, automata_1.start_state,
                         Automata.empty())
     star.add_transition(star.start_state, star.final_states[0],
                         Automata.empty())
     star.add_transition(automata_1.final_states[0], star.final_states[0],
                         Automata.empty())
     star.add_transition(automata_1.final_states[0], automata_1.start_state,
                         Automata.empty())
     star.add_transitions(automata_1.transitions)
     return star
Beispiel #5
0
    def build_dot_struct(a: Automata, b: Automata):
        a, m1 = a.new_build_from_number(1)
        b, m2 = b.new_build_from_number(m1)

        dot = Automata()
        dot.set_start_state(1)
        dot.add_final_states(m2 - 1)

        # to remove eps-transitions
        trans = b.transitions.pop(b.start_state)
        for key, value in trans.items():
            b.add_transitions(a.final_states[0], key, value)

        # with eps-transitions
        # #dot.add_transitions(a.final_states[0], b.start_state, Automata.EPSILON)
        dot.add_transition_dict(a.transitions)
        dot.add_transition_dict(b.transitions)

        return dot
Beispiel #6
0
 def plus_construct(automata_1, automata_2):
     [automata_1, m1] = automata_1.copy(2)
     [automata_2, m2] = automata_2.copy(m1)
     state1 = 1
     state2 = m2
     plus = Automata()
     plus.set_start_state(state1)
     plus.add_final_states(state2)
     plus.add_transition(plus.start_state, automata_1.start_state,
                         Automata.empty())
     plus.add_transition(plus.start_state, automata_2.start_state,
                         Automata.empty())
     plus.add_transition(automata_1.final_states[0], plus.final_states[0],
                         Automata.empty())
     plus.add_transition(automata_2.final_states[0], plus.final_states[0],
                         Automata.empty())
     plus.add_transitions(automata_1.transitions)
     plus.add_transitions(automata_2.transitions)
     return plus
Beispiel #7
0
    def build_star_struct(a: Automata):
        a, m1 = a.new_build_from_number(2)

        star = Automata()
        star.set_start_state(1)
        star.add_final_states(m1)
        star.add_transitions(star.start_state, a.start_state, Automata.EPSILON)
        star.add_transitions(star.start_state, star.final_states[0], Automata.EPSILON)
        star.add_transitions(a.final_states[0], star.final_states[0], Automata.EPSILON)
        star.add_transitions(a.final_states[0], a.start_state, Automata.EPSILON)
        star.add_transition_dict(a.transitions)

        return star
Beispiel #8
0
    def _build_DFA(self, nfa: Automata):
        all_states = {}
        e_closure = {}
        count = 1

        state1 = nfa.get_e_closure(nfa.start_state)
        e_closure[nfa.start_state] = state1
        dfa = Automata(nfa.language)
        dfa.set_start_state(count)
        states = [[state1, count]]
        all_states[count] = state1
        count += 1

        while len(states):
            [state, from_index] = states.pop()
            for char in dfa.language:
                tr_states = nfa.get_transitions(state, char)
                for s in list(tr_states)[:]:
                    if s not in e_closure:
                        e_closure[s] = nfa.get_e_closure(s)
                    tr_states = tr_states.union(e_closure[s])
                if len(tr_states):
                    if tr_states not in all_states.values():
                        states.append([tr_states, count])
                        all_states[count] = tr_states
                        to_index = count
                        count += 1
                    else:
                        to_index = [k for k, v in all_states.items() if v == tr_states][0]
                    dfa.add_transitions(from_index, to_index, char)

        for value, state in all_states.items():
            if nfa.final_states[0] in state:
                dfa.add_final_states(value)

        return dfa