Example #1
0
	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")
Example #9
0
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)
Example #10
0
	def __init__(self, arg):
		self.arg = arg
		self.dfa = automata('dfa')
		self.marked_states = dict()
		self.num_marked_states = 0
		self.dfa_states_set = []