我试图找出两个程序是否是伽玛同构的,而不是我正在借助Jgrapht库。现在,我必须生成程序的程序依赖图并将其捕获为图形对象。使用frama-c我们可以生成pdgs。我使用frama-c -pdg -pdg-dot graph -pdg-print program.c
生成程序的pdg,输出是点格式。我必须解析点格式才能获得图表。取而代之的是,我能够像图形对象而不是点文件那样掌握图形数据结构。
答案 0 :(得分:2)
从技术上讲,您应该能够使用Frama-C的Db.Pdg
模块中导出的功能提取所需的信息。特别是,
Db.Pdg.iter_nodes
允许您通过Pdg生成的所有节点(用于所有函数),而Db.Pdg.direct_*dpds
系列函数将使您获得给定节点的直接子节点列表,可以是全部节点,也可以是给定节点的直接子节点。有关详细信息,请参阅Frama-C来源的db.mli
文件。
那就是说,我必须问你为什么要这样做。至于我的搜索引擎可以告诉我,JGraphT
是一个Java库,上次我检查过,如果可能的话,OCaml / Java绑定并不是很容易实现的。此外,在我看来,DOTImporter
的类JGraphT
应该允许您或多或少地直接使用pdg的输出。