コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
#-*- 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'))