def basicMachine(char): state1 = 1 state2 = 2 auto = Automata() auto.setInitialState(state1) auto.addFinalStates(state2) auto.addTransition(state1, state2, char) return auto
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
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
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