Ignore包含#pycparser并在#pydot中定义多个子图

时间:2013-02-13 08:54:46

标签: pydot pycparser

我是stackoverflow的新手,但到目前为止我得到了很多帮助,感谢社区。

我正在尝试创建一个软件,向我显示调用者depandencys for legacycode。

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

两个问题:

  1. 解析c文件时,解析器从包含的文件中引用#includes,我的AST中也有函数。我怎么知道,如果包含该功能,或者原始来自这个实际文件/或忽略#includes ??

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

  3. 我有一组文件,其中每个文件都是具有此文件功能的冻结集 这样的事情是不可能的?

        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)          
    

1 个答案:

答案 0 :(得分:0)

我可以解决pycparser部分问题。预处理器留下#line指令,指定哪个文件&行代码来了,pycparser消耗了这些代码。您可以从它创建的AST中获取该信息(请参阅测试示例)。