1

我是 stackoverflow 的新手,但到现在为止我得到了很多帮助,这要感谢社区。

我正在尝试创建一个软件,向我展示遗留代码的调用者依赖关系。

我用 pycparcer 用 c 代码解析一个目录,并且对于每个文件我想用 pydot 创建一个子图。

两个问题:

  1. 解析 ac 文件时,解析器会从包含的文件中引用 #includes,这是我的 AST 中的一个函数。我怎么知道该函数是否包含在内,或者来自这个实际文件/或忽略#includes?

  2. 对于我要创建一个子图的每个文件,然后将此文件中的所有函数添加到此子图中。我不知道我必须创建多少个子图......

我有一组文件,其中每个文件都是一个具有该文件功能的冻结集,像这样可能吗?

    for files in SetOfFiles:
        #how to create subgraph with name of files?

        for function in files:
            self.graph.add_node(pydot.Node(funktion))  #--> add node to subgraph "files"

我希望你能接受我的挑战……有什么想法吗?

谢谢!

编辑:

我解决了关于 pydot 的问题,这很容易......所以我坚持我的 pycparser 问题:(

    for files in ListOfFuncs:
        cluster_x = pydot.Cluster(files, label=files)

        for functions in files:
            cluster_x.add_node(pydot.Node(functions))

        graph.add_subgraph(cluster_x)          
4

1 回答 1

0

我可以解决 pycparser 部分。预处理器留下#line指定文件和行代码的指令,pycparser 使用这些指令。您可以从它创建的 AST 中获取该信息(参见测试示例)。

于 2013-11-16T23:06:22.633 回答