我做了很多研究来弄清楚如何从源代码为应用程序创建 DFG。 DFG 可在线用于某些应用程序,例如 MP3 解码器、JPEG 压缩和 H.263 解码器。
我一直无法弄清楚如何从源代码为 HEVC 等应用程序创建 DFG?是否有任何工具可以立即为如此复杂的应用程序生成数据流图,还是必须手动完成?
请就此事向我提出建议。
编辑:
我使用 Doxygen 进行 HEVC,我可以看到不同的功能如何相互作用。然而,每个函数都有许多入口点和出口点,一段时间后 Doxygen 的输出就变得太混乱而难以理解。
我还看了 StreamIt:http://camlunity.ru/swap/Library/Conflux/Stream%20Programming/streamit-cc_stream_graph_programming_language.pdf
它看起来很方便,但它为更简单的应用程序(如 MP3 解码器)生成的图表太复杂了。
为了生成连贯的 DFG,我是否必须重新编写整个源代码?
您想要从任意语言中提取数据流图。您暗示您想要一种单一的方法来做到这一点。手动操作不太实用...你需要一个工具。
这样的工具非常难以构建。
为此,对于每种语言,您必须能够:
- 以您在实践中找到的形式(不仅仅是语言参考手册版本)定义工具的语言。与标准相比,C++ 在野外有很多有趣的地方。
- 用现场发现的语言解析程序,可能是一个文件,也可能是数万个文件;有些程序并不小。
- 构建表示语言元素及其相互关系的结构(这通常作为抽象语法树来完成)
- 确定每个文字的实际值是什么; “a\xbc” 具有非常不同的值,具体取决于语言是否认为它是带有转义序列的 ascii 文本或 unicode 文本
- 查找代码中的所有标识符,并根据语言范围规则确定每个标识符与其关联的定义/类型信息
- 确定数据源(文字值、外部世界的输入、表达式的结果)并跟踪这些数据值在程序的其他部分跨各种控制流构造的使用位置
- 大概画出结果数据流的一些图。
这些任务本身都很困难,因为语言往往很复杂。大多数可以执行此操作的语言工具(主要是编译器)仅针对该语言的一种方言执行此操作。
要针对多种语言/方言执行此操作,您需要一个可以针对每种语言的所有详细信息进行配置的工具,并且您必须针对所有感兴趣的语言进行配置。 [实际上你不可能“全部做完”;现在有数千种计算机语言在使用]。
即使将自己限制在“日常”通用编程语言中,这也是一种enormous工作量;对于单一主流语言来说,可能需要几年的时间才能做好这一切。你自己做这件事是不会成功的。
我的公司构建了一个单一的、统一的工具,旨在能够执行此操作:DMS 软件再造工具包。简单的“秘密”就是要意识到完成上述任务所需的机械实际上,跨语言非常相似,并且可以设计为以相对适度(并不意味着“小”)努力为特定语言进行配置。
After 20线性年工程经验拥有博士级工程师团队,解析器(即使这很难) for a 令人惊讶的语言多样性,满了数据流分析器您正在谈论的类型C++(查看此链接以获取示例)、C、COBOL 和几乎 Java 8。
我不知道有任何其他统一工具比您的理想之路更遥远。在你决定我对此一无所知之前,先检查一下我的简历。 (流氓/MPL有一些野心,但目前只是一个研究工具;他们根本不做 C 或 C++)我们只是完成了一半,还有许多语言和规模的战斗需要进行。
[DMS的目标不是数据流分析;而是数据流分析。这只是一个垫脚石。就是做自动化的代码转换,这就需要数据流分析才能安全正确的做]。
当然,您可能只是希望为每种语言找到一个单独的工具。如果您确实可以获得一整套此类工具,那么您将无法从不同作者的单独工具中获得一致的质量或一致的样式/粒度的数据流图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)