Beispiel #1
0
Machine = Automata()

for node in graph.get_nodes():
    node_name = node.get_name()
    if node_name != 'node':
        if node_name == 'S1':
            final = True
        else:
            final = False

        state = State(node_name, final=final)

        if node_name == 'S0':
            Machine.set_initial_state(state)
        else:
            Machine.add_state(state)

for edge in graph.get_edges():
    from_state = Machine.states[edge.get_source()]
    to_state = Machine.states[edge.get_destination()]
    label = edge.to_string()
    print(label)
    label = label.split('=')
    label = label[1]
    label = label[:-2]
    label = label.replace('"', '')

    Machine.add_transition(from_state, to_state, label)

Machine.print_source()
Beispiel #2
0
def Thompson(tokens, countStates):
    for token in tokens:
        if (token == "*"):
            countStates += 1
            A1 = tokens[tokens.index(token) - 1]
            A1.set_final([countStates])
            A1.add_state(countStates - 1)
            A1.add_state(countStates)
            A1.set_symbols(joinList(A1.symbols, ["3"]))
            A1.sub_trans_states(1)
            A1.add_transitions(
                [A1.initial_state[0], A1.initial_state[0] + 1, "3"])
            A1.add_transitions(
                [A1.final_states[0] - 1, A1.final_states[0], "3"])
            A1.add_transitions([A1.initial_state[0], A1.final_states[0], "3"])
            A1.add_transitions(
                [A1.final_states[0] - 1, A1.initial_state[0] + 1, "3"])
            tokens.pop(tokens.index(token) - 1)
            tokens[tokens.index(token)] = A1
            countStates += 1
            #print(A1.initial_state, A1.final_states, A1.states, A1.symbols, A1.transitions)
            return tokens, countStates
        elif (token == "."):
            A1 = tokens[tokens.index(token) - 2]
            A2 = tokens[tokens.index(token) - 1]
            # Cambios en los estados del segundo autómata
            if (A1.final_states != A2.initial_state):
                A2.set_inicial(A1.final_states)
                A2.sub_finaState(-1)
                A2.sub_states(-1)
                A2.sub_trans_states(-1)
                countStates -= 1
            #print(A1.initial_state, A1.final_states, A1.states, A1.symbols, A1.transitions)
            #print(A2.initial_state, A2.final_states, A2.states, A2.symbols, A2.transitions)
            #Creación del nuevo autómata
            Aut = Automata()
            Aut.set_inicial(A1.initial_state)
            Aut.set_final(A2.final_states)
            Aut.set_states(joinList(A1.states, A2.states))
            Aut.set_symbols(joinList(A1.symbols, A2.symbols))
            Aut.set_transitions(joinList(A1.transitions, A2.transitions))
            #print(Aut.initial_state, Aut.final_states, Aut.states, Aut.symbols, Aut.transitions)
            tokens.pop(tokens.index(token) - 1)
            tokens.pop(tokens.index(token) - 1)
            tokens[tokens.index(token)] = Aut
            return tokens, countStates
        elif (token == "|"):
            countStates += 1
            A1 = tokens[tokens.index(token) - 2]
            A2 = tokens[tokens.index(token) - 1]
            Aut = Automata()
            Aut.set_inicial(A1.initial_state)
            Aut.set_final([countStates])
            Aut.set_states(joinList(A1.states, A2.states))
            Aut.add_state(countStates - 1)
            Aut.add_state(countStates)
            Aut.set_symbols(joinList(A1.symbols, A2.symbols))
            Aut.set_symbols(joinList(Aut.symbols, ["3"]))
            A1.sub_trans_states(1)
            A2.sub_trans_states(1)
            Aut.set_transitions(joinList(A1.transitions, A2.transitions))
            Aut.add_transitions(
                [Aut.initial_state[0], A1.initial_state[0] + 1, "3"])
            Aut.add_transitions(
                [Aut.initial_state[0], A2.initial_state[0] + 1, "3"])
            Aut.add_transitions(
                [A1.final_states[0] + 1, Aut.final_states[0], "3"])
            Aut.add_transitions(
                [A2.final_states[0] + 1, Aut.final_states[0], "3"])
            #Actualizar array
            tokens.pop(tokens.index(token) - 1)
            tokens.pop(tokens.index(token) - 1)
            tokens[tokens.index(token)] = Aut
            countStates += 1
            #print("Creacion", Aut.initial_state, Aut.final_states, Aut.states, Aut.symbols, Aut.transitions)
            return tokens, countStates
        elif (isinstance(token, str)):
            Aut = Automata()
            Aut.add_symbol(token)
            Aut.set_inicial([countStates])
            countStates += 1
            Aut.set_final([countStates])
            countStates += 1
            Aut.set_states([Aut.initial_state[0], Aut.final_states[0]])
            Aut.add_transitions(
                [Aut.initial_state[0], Aut.final_states[0], token])
            tokens[tokens.index(token)] = Aut
            #print("Creacion", Aut.initial_state, Aut.final_states, Aut.states, Aut.symbols, Aut.transitions)
            return tokens, countStates
Beispiel #3
0
# Lê a expressão regular do usuário e constrói o autômato referênte à ela
regEx = input('Digite a expressão regular: ')
Machine = Automata()

# Variável auxiliar para contar o número de grafos impressos
graph_counter = 0

# ----- PASSO I: Inicialização do autômato -----

# Inicializa os estados S0 e S1 (sendo S1 um estado final)
S0 = State('S0')
S1 = State('S1', final=True)

# Adiciona os estados à e-NFA
Machine.set_initial_state(S0)
Machine.add_state(S1)

# Adiciona a transição S0 -> S1 à e-NFA utilizando a regEx de entrada
Machine.add_transition(S0, S1, regEx)

# Imprime o resultado do passo I
filename = 'grafos/Q1_grafo_passo_' + str(graph_counter) + '.dot'
Machine.print_graph(filename, view=False)
#imagename = filename + '.png'
#display(Image(filename=#imagename))

# Incrementa o contador de grafos
graph_counter = graph_counter + 1

# Enquanto o autômato não estiver pronto (somente arcos de um símbolo), contrói o autômato
automata_ready = False
Beispiel #4
0
#Entrada 1
teste_1 = Automata()

# Inicializa os estados S0 e S1 (sendo S1 um estado final)
S0 = State('0')
S1 = State('1', final=True)
S2 = State('2')
S3 = State('3')
S4 = State('4')
S5 = State('5')
S6 = State('6')

# Adiciona os estados à e-NFA
teste_1.set_initial_state(S0)
teste_1.add_state(S1)
teste_1.add_state(S2)
teste_1.add_state(S3)
teste_1.add_state(S4)
teste_1.add_state(S5)
teste_1.add_state(S6)

# Adiciona as transições da e-NFA
teste_1.add_transition(S0, S3, '&')
teste_1.add_transition(S3, S3, 'a,b')
teste_1.add_transition(S3, S2, '&')
teste_1.add_transition(S2, S4, 'b')
teste_1.add_transition(S4, S5, 'b')
teste_1.add_transition(S5, S6, '&')
teste_1.add_transition(S6, S6, 'b,a')
teste_1.add_transition(S6, S1, '&')