Пример #1
0
    position_values = [POSITION_ABOVE, POSITION_BELOW, POSITION_SAME_LEFT, POSITION_SAME_RIGHT]
    direction_values = [EDGE_DIRECTION_CW, EDGE_DIRECTION_COUNTER_CW, EDGE_DIRECTION_DIRECT]

    if not os.path.isdir("./output"):
        os.mkdir("./output")

    for i, c in enumerate(generate_arguments_combinations(position_values, position_values, direction_values, direction_values)):
        try:
            node1 = {
                "name": "True",
                "position": c[0],
                "direction": c[2]
            }

            node2 = {
                "name": "True",
                "position": c[1],
                "direction": c[3]
            }
            commands = if_commands("if something", node1, node2)

            fp = open("./output/if{}.dot".format(i), "w")
            fp.write("digraph {\n splines=line; rank=TB;\n")
            fp.write("node[fillcolor=\"#006699\"; fontcolor=\"white\"; style=filled; shape=rect];\n")
            fp.write("\n".join(commands))
            fp.write("\nlabel = \"" + c[0] + ", " + c[2] + ", secondo " + c[1] + ", " + c[3] + "\"")
            fp.write("}")
            fp.close()
        except ValueError as e:
            print("Arguments not valid: {}".format(c))
Пример #2
0
    testContent = open("input/function.py").read()

    tree = ast.parse(testContent)
    commands = Flowchart()
    last_nodes = visit("start", tree.body, commands, [], {"print": print_format})
    for node in last_nodes:
        commands.append("\"{}\" -> end;".format(node))
    commands.add_node_attributes(fillcolor="#006699")
    commands.add_node_attributes(style="filled")
    commands.add_node_attributes(fontcolor="white")
    commands.add_node_attributes(shape="rect")
    if not os.path.isdir("./output"):
        os.mkdir("./output")

    fp = open("./output/algorithm.dot", "w")
    fp.write(commands.to_string())
    fp.close()

    exit()

    commands1 = if_commands("if a", "clean a", "ask for b", edge_path1=EDGE_DIRECTION_CW, edge_path2=EDGE_DIRECTION_COUNTER_CW);
    commands2 = if_commands("if b", "clean b", "ask for c", edge_path1=EDGE_DIRECTION_CW, edge_path2=EDGE_DIRECTION_COUNTER_CW);

    fp = open("algorithm.dot", "w")
    fp.write("digraph {\n splines=line; rank=TB;\n")
    fp.write("node[fillcolor=\"#006699\"; fontcolor=\"white\"; style=filled; shape=rect];\n")
    fp.write("\n".join(commands1))
    fp.write("\n".join(commands2))
    fp.write("\"ask for b\" -> \"if b\"\n")
    fp.write("}")
    fp.close()
Пример #3
0
def visit_stmt(stmt, commands, filters, node_format):
    if isinstance(stmt, ast.If):
        expression = expr_to_string(stmt.test)

        if stmt.body and stmt.orelse:
            node1 = {
                "name": stmt_to_string(stmt.body[0]),
            }

            node2 = {
                "name": stmt_to_string(stmt.orelse[0]),
            }

            commands += if_commands(stmt_to_string(stmt), node1, node2)
            last_if_1 = visit(None, stmt.body, commands, filters, node_format)
            last_if_2 = visit(None, stmt.orelse, commands, filters, node_format)

            commands.append("\"{}\"[ label=\"{}\" ];".format(stmt_to_string(stmt), expression))
        elif stmt.body:
            node1 = {
                "name": stmt_to_string(stmt.body[0]),
            }

            commands += if_commands(stmt_to_string(stmt), node1)
            commands.append("\"{}\"[ label=\"{}\" ];".format(stmt_to_string(stmt), expression))

            last_if_1 = visit(None, stmt.body, commands, filters, node_format)
            last_if_2 = [stmt_to_string(stmt)]
        else:
            assert False

        return last_if_1 + last_if_2
    elif isinstance(stmt, ast.Assign):
        name = "{} = {}".format(",".join(map(expr_to_string, stmt.targets)), expr_to_string(stmt.value))
        commands.append("\"{}\"[ label=\"{}\" ];".format(stmt_to_string(stmt), name))
        return [stmt_to_string(stmt)]
    elif isinstance(stmt, ast.Print):
        # stmt.dest
        # stmt.nl

        if "print" in node_format:
            label = node_format["print"](map(expr_to_string, stmt.values))
            commands.append("\"{}\"[ label=\"{}\" ];".format(stmt_to_string(stmt), label))
        else:
            label = ", ".join(map(expr_to_string, stmt.values))
            commands.append("\"{}\"[ label=\"print({})\" ];".format(stmt_to_string(stmt), label))
        return [stmt_to_string(stmt)]
    elif isinstance(stmt, ast.Import):
        commands.append("\"{}\"[ label=\"{}\" ];".format(
            stmt_to_string(stmt),
            "import {}".format(map(alias_to_string, stmt.names))))
        return [stmt_to_string(stmt)]
    elif isinstance(stmt, ast.ImportFrom):
        # stmt.level
        commands.append("\"{}\"[ label=\"{}\" ];".format(
            stmt_to_string(stmt),
            "from {} import {}".format(stmt.module, map(alias_to_string, stmt.names))))
        return [stmt_to_string(stmt)]
    elif isinstance(stmt, ast.Expr):
        commands.append("\"{}\" [ label=\"{}\" ];".format(stmt_to_string(stmt),
                                                          expr_to_string(stmt.value).replace('"','\\"')
))
        return [stmt_to_string(stmt)]
    elif isinstance(stmt, ast.FunctionDef):

        print(stmt.name)

        if stmt.args.defaults:
            _args= stmt.args.args
            _defaults = stmt.args.defaults
            args_names = map(expr_to_string, _args)
            args_defaults = map(expr_to_string, _defaults)

            _args_without_defaults = ", ".join(args_names[0:len(args_defaults)])
            _args_with_defaults = ", ".join("{} = {}".format(*k) for k in zip(args_names[-len(args_defaults):], args_defaults))
        else:
            _args_without_defaults = ",".join(map(expr_to_string, stmt.args.args))
            _args_with_defaults = None

        label = "{}({}, {}, *{}, **{})".format(
            stmt.name,
            _args_without_defaults,
            _args_with_defaults,
            stmt.args.vararg,
            stmt.args.kwarg)

        commands.append("\"{}\" [label=\"{}\"];".format(stmt_to_string(stmt), label))

        print(stmt.body)
        print(stmt.decorator_list)
        return [stmt_to_string(stmt)]
    else:
        raise NotImplementedError()
        return [stmt_to_string(stmt)]