Exemplo n.º 1
0
def union(param_1, param_2):
    # Coletando informações sobre os dois automatos.
    states_1, initial_1, final_1, transitions_1 = prog.fileParser(param_1, 1)
    states_2, initial_2, final_2, transitions_2 = prog.fileParser(param_2, 2)

    # novo estado para unir os automatos.
    new_state = 'q0'

    # As seguintes operacoes sao para o novo automato gerado pela UNIAO

    # estados
    states_u = [new_state] + states_1 + states_2

    # estado inicial
    initial_u = new_state

    # Estados finais
    final_u = final_1 + final_2

    # transicao do estado novo para os antigos estados iniciais
    transition_initial = {new_state: {'e': [initial_1, initial_2]}}
    # Concatenando as transicoes dos automatos
    # Esta forma de concatenar dicionarios eh mais eficiente
    transitions_u = dict(transition_initial, **transitions_1)
    # Unindo as transicoes
    transitions_u.update(transitions_2)

    print("Novo automato gerado pela Uniao:")
    util.infoAutomata(states_u, initial_u, final_u, transitions_u)
Exemplo n.º 2
0
def intersection(param_1, param_2):
    # Automato 1
    states_1, initial_1, final_1, transitions_1 = prog.fileParser(param_1, 1)
    # Automato 2
    states_2, initial_2, final_2, transitions_2 = prog.fileParser(param_2, 2)

    # A união dos automatos resulta na uniao de seus estados
    new_states = states_1 + states_2
    # O estado inicial do resultado da uniao eh o estado inicial do primeiro
    new_initial = initial_1
    # O estado de aceitacao do resultado da uniao eh o estado final do segunda
    new_final = final_2
    # As transicoes do novo automato gerado pela uniao eh constituida das transicoes de ambos,
    # com algumas alteracoes
    transitions_1.update(transitions_2)

    # Para esta operacao, eh adicionada uma transicao epslon partido do estado
    # de aceitacao do primeiro automato para o estado inicial do segundo automato,
    # este fato decorre de que por ser uma interseccao, ambos os automatos devem
    # aceitar a palavra inserida, logo, ambos os estados de aceitacao deverao ser
    # alcancados, um apos o outro.
    for qF in final_1:
        if not qF in transitions_1:
            transitions_1[qF] = {}
        if not "e" in transitions_1[qF]:
            transitions_1[qF]['e'] = []
        transitions_1[qF]['e'].append(initial_2)

    print("Novo automato pos operacao de Interseccao: ")
    util.infoAutomata(new_states, new_initial, new_final, transitions_1)
Exemplo n.º 3
0
def transform(param_1):
    states, initial, final, transitions = prog.fileParser(param_1)
    print("Novo automato pos operacao de Conversao: ")
    if not prog.afn_checker(transitions):
        util.infoAutomata(states, initial, final, transitions)
    else:
        prog.automataConverter(states, initial, final, transitions)
Exemplo n.º 4
0
def star(param_1):
    states, initial, final, transitions = prog.fileParser(param_1)

    new_state = 'q0'
    states_e = [new_state] + states
    initial_e = new_state
    final_e = [new_state] + final
    transitions_e = util.operationTransition(new_state, initial, transitions,
                                             final)
    print("Novo automato pos operacao estrela: ")
    util.infoAutomata(states_e, initial_e, final_e, transitions_e)
Exemplo n.º 5
0
def complemento(param_1):
    states, initial, final, transitions = prog.fileParser(param_1)

    if prog.afn_checker(transitions):
        states, initial, final, transitions = prog.automataConverter(
            states, initial, final, transitions, False)

    # print(states, initial, final, transitions)

    states_c = states
    initial_c = initial
    final_c = util.myFilter(states, final)
    transitions_c = transitions
    print("O complemento do automato é: ")
    util.infoAutomata(states_c, initial_c, final_c, transitions_c, True)
Exemplo n.º 6
0
def simulator(param_1, param_2):
    word = param_2
    states, initial, final, transitions = prog.fileParser(param_1)
    util.infoAutomata(states, initial, final, transitions)
    print(prog.wordParser(states, initial, final, transitions, word))