Ejemplo n.º 1
0
def basicMachine(char):
    state1 = 1
    state2 = 2
    auto = Automata()
    auto.setInitialState(state1)
    auto.addFinalStates(state2)
    auto.addTransition(state1, state2, char)
    return auto
Ejemplo n.º 2
0
def dotMachine(a, b):
    a, n1 = a.rebuild(1)
    b, n2 = b.rebuild(n1)
    state1 = 1
    state2 = n2 - 1
    auto = Automata()
    auto.setInitialState(state1)
    auto.addFinalStates(state2)
    auto.addTransition(
        a.final[0], b.initial,
        ":e:")  # e-transition from a's final state to b's initial state
    auto.addTransitionTable(a.transitions)
    auto.addTransitionTable(b.transitions)
    return auto
Ejemplo n.º 3
0
def starMachine(a):
    a, n1 = a.rebuild(2)
    state1 = 1
    state2 = n1
    auto = Automata()
    auto.setInitialState(state1)
    auto.addFinalStates(state2)
    auto.addTransition(auto.initial, a.initial, ":e:")
    auto.addTransition(
        auto.initial, auto.final[0], ":e:"
    )  # e-transition from initial state to final state for empty string
    auto.addTransition(a.final[0], auto.final[0], ":e:")
    auto.addTransition(
        a.final[0], a.initial, ":e:"
    )  # e-transition from old final state to old initial state for loop
    auto.addTransitionTable(a.transitions)
    return auto
Ejemplo n.º 4
0
def unionMachine(a, b):
    a, n1 = a.rebuild(
        2)  # rename the states to accomodate the new start and final states
    b, n2 = b.rebuild(
        n1
    )  # 'b' is an automata and 'n2' is the last state name(number) of 'b'
    state1 = 1
    state2 = n2
    auto = Automata()
    auto.setInitialState(state1)  # new initial state
    auto.addFinalStates(state2)  # new final state
    auto.addTransition(
        auto.initial, a.initial, ":e:"
    )  # :e: = epsilon, e-transition from new starting state to original starting states
    auto.addTransition(auto.initial, b.initial, ":e:")
    auto.addTransition(
        a.final[0], auto.final[0],
        ":e:")  # e-transition from original final states to new final state
    auto.addTransition(b.final[0], auto.final[0], ":e:")
    auto.addTransitionTable(a.transitions)  # add original transitions
    auto.addTransitionTable(b.transitions)
    return auto