大家好,欢迎来到IT知识分享网。
参加大创时,需要首先了解PDG,网上针对这个有很多知识点,我又只是一个小菜鸡,只能写一篇文章来整理一下我能够理解的PDG的知识点:
(仅供自己学习,有错误之处欢迎大家的指正,同时文章借鉴到其他地方的知识点我都有相应的引用,也很感谢这些大佬的分享)
部分知识点转自程序依赖相关知识点(PDG,SDG) – 知乎 (zhihu.com),非常感谢
PDG是什么:
PDF,程序依赖图
程序依赖图的结点代表语句,边代表依赖关系,这里的依赖关系包括数据依赖和控制依赖
数据依赖:
s1: A = B * C; s2: D = A * E + 1 //由于s1语句变量A在s2语句中被读,因此称s2数据依赖于s1
控制依赖:
s1: if (A) then s2: B = C * D endif //由于s1语句变量A的值决定了s2语句是否被执行,因此称s2控制依赖于s1
其中控制依赖用实箭头表示,数据依赖用虚箭头表示。构建PDG图的整体流程如下。
膜拜:
【程序分析】数据依赖、控制依赖、程序依赖图PDG、系统依赖图SDG-CSDN博客
上面这个图的意思是,首先我们得到一份代码,然后我们根据这份代码的逻辑关系(如果你有顺序逻辑的话,那就挨个画,如果你有循环逻辑的话,那就是循环出口需要有一个连回去的线等等)来画出我们的控制流图(Control Flow Graph),根据控制流图画得前向支配树 (Forward Dominance Tree),由此产生CDG,也就是控制流程图,至于说怎么产生的CDG,这个我还在学习中。 至于数据依赖呢,就是看下面的语句是否用上了这条语句的对变量的定义,如果用上了,那就画一条从这条语句出发到下面那条语句的箭头。同时,我们需要注意的是,下面如果对同一个变量进行了不同的赋值的话,以靠后的定义为主。
因为我需要学的就只有PDG,所以简单理解到这里,不过我没懂这个是如何把DDG和CDG联系起来然后就可以构成PDG了。
可能的处理方法:
下面这个转载自pdg的解释是什么-百度经验 (baidu.com)
处理方法是以程序的控制流图为基础,去掉CFG的控制流边,加入数据和控制流边。包括了数据依赖图和程序依赖图。数据依赖图定义了数据之间的约束关系,控制依赖图定义了语句执行情况的约束关系。程序依赖图是一个有向图。
那这样的话,我理解的是,我们只需要知道数据依赖图和控制依赖图是长什么样子就大致OK了
PDG有什么用:
总的来说我认为,如果我们拿到一份代码,那么我们很需要说这份代码有怎样的逻辑关系,因为有了这些我们就可以做到代码优化,代码翻译等工作。那这个PDG就是这样的一个任务,那我认为,接下来如何生成更加准确的,更贴合代码的PDG可能就是研究重点了吧。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/156071.html