def buildDFA(self, nfa): allstates = dict() eclose = dict() count = 1 state1 = nfa.getEClose(nfa.startstate) eclose[nfa.startstate] = state1 dfa = automata(nfa.language) dfa.setstartstate(count) states = [[state1, count]] allstates[count] = state1 count += 1 while len(states) != 0: [state, fromindex] = states.pop() for char in dfa.language: trstates = nfa.gettransitions(state, char) for s in list(trstates)[:]: if s not in eclose: eclose[s] = nfa.getEClose(s) trstates = trstates.union(eclose[s]) if len(trstates) != 0: if trstates not in allstates.values(): states.append([trstates, count]) allstates[count] = trstates toindex = count count += 1 else: toindex = [k for k, v in allstates.iteritems() if v == trstates][0] dfa.addtransition(fromindex, toindex, char) for value, state in allstates.iteritems(): if nfa.finalstates[0] in state: dfa.addfinalstates(value) self.dfa = dfa
def create_new_dfa(self): #print self.states new_automata = automata("Min Dfa") for group in self.states: if 0 in self.states[group] and group!=0: temp = set() temp = self.states[group] self.states[group] = self.states[0] self.states[0] = temp # print(self.states) for group in self.states: for state in self.states[group]: self.stateToGroup[state] = group for group in self.states: if(len(self.states[group])!=0 and (0 not in self.states[group])): new_automata.add_state() for group in self.states: for state in self.states[group]: # print("group: "group) new_automata.add_transition(group,'x',self.stateToGroup[self.automata.get_transition(state,'x')[0]]) new_automata.add_transition(group,'y',self.stateToGroup[self.automata.get_transition(state,'y')[0]]) break for group in self.states: for state in self.states[group]: if (state in self.f) and (group not in new_automata.e_states): new_automata.add_final_state(group) return new_automata
def basicstruct(inp): state1 = 1 state2 = 2 basic = automata() basic.setstartstate(state1) basic.addfinalstates(state2) basic.addtransition(1, 2, inp) return basic
def dotstruct(a, b): [a, m1] = a.newBuildFromNumber(1) [b, m2] = b.newBuildFromNumber(m1) state1 = 1 state2 = m2-1 dot = automata() dot.setstartstate(state1) dot.addfinalstates(state2) dot.addtransition(a.finalstates[0], b.startstate, automata.epsilon()) dot.addtransition_dict(a.transitions) dot.addtransition_dict(b.transitions) return dot
def starstruct(a): [a, m1] = a.newBuildFromNumber(2) state1 = 1 state2 = m1 star = automata() star.setstartstate(state1) star.addfinalstates(state2) star.addtransition(star.startstate, a.startstate, automata.epsilon()) star.addtransition(star.startstate, star.finalstates[0], automata.epsilon()) star.addtransition(a.finalstates[0], star.finalstates[0], automata.epsilon()) star.addtransition(a.finalstates[0], a.startstate, automata.epsilon()) star.addtransition_dict(a.transitions) return star
def plusstruct(a, b): [a, m1] = a.newBuildFromNumber(2) [b, m2] = b.newBuildFromNumber(m1) state1 = 1 state2 = m2 plus = automata() plus.setstartstate(state1) plus.addfinalstates(state2) plus.addtransition(plus.startstate, a.startstate, automata.epsilon()) plus.addtransition(plus.startstate, b.startstate, automata.epsilon()) plus.addtransition(a.finalstates[0], plus.finalstates[0], automata.epsilon()) plus.addtransition(b.finalstates[0], plus.finalstates[0], automata.epsilon()) plus.addtransition_dict(a.transitions) plus.addtransition_dict(b.transitions) return plus
def __init__(self,arg): self.states = dict() self.numberOfdisSet = 2 self.automata = automata("Copying Data") self.automata = arg for i in range(0,self.automata.get_new_state()): self.states[i] = set() self.f = self.automata.get_final_states() self.stateToGroup = dict() for i in range(0,self.automata.get_new_state()): if i in self.f: self.states[1].add(i) self.stateToGroup[i] = 1 else: self.states[0].add(i) self.stateToGroup[i] = 0
def __init__(self,regex): super(QtCore.QObject,self).__init__() self.operators=["+","(",")","*","&","?","|"] self.alphabets=['x','y'] self.regex=regex self.nfa=automata("nfa")
from automata import * from nfa2dfa import * from regex2nfa import * from dfa2mindfa import * ########## # Part 1 # ########## regex2nfa_obj=regex2nfa("g") regex2nfa_obj.convert_to_nfa() aut_nfa = automata('nfa') aut_nfa.add_char("x") aut_nfa.add_char("y") aut_nfa.add_state() aut_nfa.add_state() aut_nfa.add_state() aut_nfa.add_state() aut_nfa.add_transition(1,'x',3) aut_nfa.add_transition(1,'#',2) aut_nfa.add_transition(3,'#',4) aut_nfa.add_transition(4,'y',1) #### aut_nfa.add_transition(0,'x',1) aut_nfa.add_transition(0,'y',2) aut_nfa.add_transition(1,'x',0) aut_nfa.add_transition(1,'y',3) aut_nfa.add_transition(2,'x',0) aut_nfa.add_transition(2,'y',3) aut_nfa.add_transition(3,'x',3)
def __init__(self, arg): self.arg = arg self.dfa = automata('dfa') self.marked_states = dict() self.num_marked_states = 0 self.dfa_states_set = []