コード例 #1
0
def automatoSimples(simbolo, tag):
    automato = Automato(tag)  #Cria um novo automato
    eInicial = Estado(True, False)  #Cria um estado inicial
    eFinal = Estado(False, True)  #Cria um estado final
    #Adiciona os estados no automato
    automato.addEstado(eInicial)
    automato.addEstado(eFinal)
    automato.addEstadoInicial(eInicial)
    automato.addEstadoFinal(eFinal)
    transicao = Transicao(
        eInicial, eFinal,
        simbolo)  #Cria uma transicao entre o estado final e inicial
    eInicial.addTransicao(
        transicao
    )  #Adiciona a transicao na lista de transicoes do estado inicial
    automato.atualizaIds()
    return automato
コード例 #2
0
def uniaoE(a1, a2, tag):
    novoAutomato = Automato(tag)  #Cria um novo automato
    #Adicionando todos os estados dos automatos antigos no novo
    estados1 = a1.getEstados()
    estados2 = a2.getEstados()
    for estado in estados1:
        novoAutomato.addEstado(estado)
    for estado in estados2:
        novoAutomato.addEstado(estado)
    #Adicionando todos os estados iniciais de a1 como estados iniciais do novo automato
    for estado in a1.getEstadosIniciais():
        novoAutomato.addEstadoInicial(estado)
    #Fazendo todos os estados finais de a1 apontarem para os estados iniciais de a2
    for estadoFinal in a1.getEstadosFinais():
        estadoFinal.setFinal(False)
        for estadoInicial in a2.getEstadosIniciais():
            estadoInicial.setInicial(False)
            t = Transicao(estadoFinal, estadoInicial, '')
            estadoFinal.addTransicao(t)
    #Adicionando todos os estados finais de a2 na lista de estados finais do novo automato
    for estadoFinal in a2.getEstadosFinais():
        novoAutomato.addEstadoFinal(estadoFinal)
    novoAutomato.atualizaIds()
    return novoAutomato
コード例 #3
0
def uniaoOu(a1, a2, tag):
    novoAutomato = Automato(tag)  #Cria um novo automato
    #Adicionando todos os estados dos automatos antigos no novo
    estados1 = a1.getEstados()
    estados2 = a2.getEstados()
    for estado in estados1:
        novoAutomato.addEstado(estado)
    for estado in estados2:
        novoAutomato.addEstado(estado)
    #Criando novos estados
    novoInicial = Estado(True, False)
    novoFinal = Estado(False, True)
    novoAutomato.addEstado(novoInicial)
    novoAutomato.addEstado(novoFinal)
    novoAutomato.addEstadoInicial(novoInicial)
    novoAutomato.addEstadoFinal(novoFinal)
    #Criando novas transicoes para os estados iniciais
    iniciais1 = a1.getEstadosIniciais()
    iniciais2 = a2.getEstadosIniciais()
    for estado in iniciais1:
        t = Transicao(novoInicial, estado, '')
        novoInicial.addTransicao(t)
        estado.setInicial(False)
    for estado in iniciais2:
        t = Transicao(novoInicial, estado, '')
        novoInicial.addTransicao(t)
        estado.setInicial(False)
    #Criando novas transicoes para os estados finais
    finais1 = a1.getEstadosFinais()
    finais2 = a2.getEstadosFinais()
    for estado in finais1:
        t = Transicao(estado, novoFinal, '')
        estado.addTransicao(t)
        estado.setFinal(False)
    for estado in finais2:
        t = Transicao(estado, novoFinal, '')
        estado.addTransicao(t)
        estado.setFinal(False)
    novoAutomato.atualizaIds()
    return novoAutomato