Exemplo n.º 1
0
def main():

    path = 'entrada.txt'

    input_file = open_input(path)
    transitions_raw = get_transitions(input_file)
    intial_or_final = initial_and_final(input_file)
    states_dict = get_states(transitions_raw, intial_or_final)
    word = get_word(input_file)

    states = load_states(states_dict)
    transitions = load_transitions(states, transitions_raw)

    a = Automaton('Automato Finito', word, transitions)

    inicial = a.get_initials_list()

    for i in inicial:
        a.start_reach(word, i)
        word = get_word(input_file)

    #print(a.get_steps())

    gif = 1
    for s in a.get_steps():
        save_dot_and_png(a, s)
        save_gif(gif)
        gif += 1
Exemplo n.º 2
0
def save_dot_and_png(automaton: Automaton, state_walk):

    for file in os.listdir('assets/dot/'):
        try:
            os.remove(f'assets/dot/{file}')
        except FileNotFoundError:
            pass

    ini = 0
    steps = 0
    graph = pydot.Dot(label=automaton.get_name(),
                      graph_type='digraph',
                      bgcolor='gray')

    for i in automaton.get_states():
        if i in automaton.get_initials_list():
            graph.add_node(pydot.Node(ini, shape='point'))
            my_edge = pydot.Edge(ini, i.get_name())
            graph.add_edge(my_edge)
            ini += 1

    for s in automaton.get_states():
        if s in automaton.get_finals_list():
            my_node = pydot.Node(s.get_name(), shape='doublecircle')
            graph.add_node(my_node)
        else:
            my_node = pydot.Node(s.get_name(), shape='circle')
            graph.add_node(my_node)

    for t in automaton.get_transitions():
        my_edge = pydot.Edge(t.get_origin().get_name(),
                             t.get_goal().get_name(),
                             label=t.get_name())
        graph.add_edge(my_edge)

    graph.set_graph_defaults(rankdir='LR')
    steps = save(graph, steps)

    for s in state_walk:
        try:
            if s.get_origin() in automaton.get_finals_list():
                my_node = pydot.Node(s.get_origin().get_name(),
                                     shape='doublecircle',
                                     color='blue')
                graph.add_node(my_node)
                steps = save(graph, steps)
            else:
                my_node = pydot.Node(s.get_origin().get_name(),
                                     shape='circle',
                                     color='blue')
                graph.add_node(my_node)
                steps = save(graph, steps)

            teste = graph.get_edge_list()
            edge = ''
            for t in teste:
                label = t.get_label()
                ori = t.get_source()
                dst = t.get_destination()
                if ori == s.get_origin().get_name() and dst == s.get_goal(
                ).get_name() and label == s.get_name():
                    edge = t

            edge.set_color('blue')
            steps = save(graph, steps)

            my_node.set_color('black')
            steps = save(graph, steps)

            edge.set_color('black')
            steps = save(graph, steps)

            if s.get_goal() in automaton.get_finals_list():
                my_node = pydot.Node(s.get_goal().get_name(),
                                     shape='doublecircle',
                                     color='blue')
                graph.add_node(my_node)
                steps = save(graph, steps)
            else:
                my_node = pydot.Node(s.get_goal().get_name(),
                                     shape='circle',
                                     color='blue')
                graph.add_node(my_node)
                steps = save(graph, steps)

        except AttributeError:
            graph.set_graph_defaults(label='Palavra inválida!')
            my_edge.set_color('black')
            steps = save(graph, steps)
            pass