def complemento(old): automato = Automato() ## percorre a lista e altera estados finais em normais for e in old.estados: if e.final: e.final = False automato.add_estado(e) else: e.final = True automato.add_estado(e) ## coloca as transições no novo automato automato.transicoes = old.transicoes return automato
def multiplicar(a1,a2): # novo automato new = Automato() # Alfabeto é a combinação dos simbolos dos dois new.alfabeto = set(a1.alfabeto+a2.alfabeto) ## concatenando os nomes for e1 in a1.estados: for e2 in a2.estados: ## novo estados new_id = str(e1.id) + str(e2.id) new_name = e1.name + e2.name ## se for estado inicial if e1.initial and e2.initial: new.add_estado(Estado(name=new_name,id=new_id,initial=True)) ## se forem estados finais #elif e1.final or e2.final: # new.add_estado(Estado(name=new_name,id=new_id,final=True)) ## se não é normal else: new.add_estado(Estado(name=new_name,id=new_id)) ## fim for ## Outro for para fazer as transições, irá combinar leituras com os estados for a in new.alfabeto: for e1 in a1.estados: for e2 in a2.estados: estado_de = new.get_estado(name=str(e1.name)+str(e2.name)) estado_para = None p1 = a1.mover_name(e1.name,a) p2 = a2.mover_name(e2.name,a) ## se encontrar busca o estado if p1 and p2: estado_para = new.get_estado(name=p1+p2) ## cria tansicao new.add_transicao( Transicao(de=estado_de,para=estado_para,ler=a) ) return new
#-*- coding: utf-8 -*- from modulo import Estado, Transicao import modulo from automato import Automato if __name__ == '__main__': ## criando um novo automato a1 = Automato() ## Adicionando estados a1.add_estado(Estado(id=0, name='q0', initial=True)) a1.add_estado(Estado(id=1, name='q1')) a1.add_estado(Estado(id=2, name='q2', final=True)) ## Exibindo estados a1.print_estados() ## Adicionando transicoes a1.add_transicao( Transicao(de=a1.get_estado(name='q0'), para=a1.get_estado(name='q1'), ler='a')) a1.add_transicao( Transicao(de=a1.get_estado(name='q0'), para=a1.get_estado(name='q0'), ler='b')) a1.add_transicao( Transicao(de=a1.get_estado(name='q1'), para=a1.get_estado(name='q2'), ler='a'))