如何在gcc中获取c程序的抽象语法树?
我正在尝试自动将OpenMP pragma插入到输入c程序中
我需要分析嵌套的for
循环以查找依赖关系,以便我可以插入适当的OpenMP编译指示
所以我基本上想要做的是遍历和分析输入c程序的抽象语法树
我该如何实现这一目标?
答案 0 :(得分:1)
您需要完整的数据流来查找“依赖项”。然后,您需要实际插入 OpenMP调用。
你想要的是一个程序转换系统。 GCC可能具有依赖性信息,但是很难与自定义项目一起使用。其他人提到了Clang和Rose。 Clang可能是一个不错的选择,但自定义分析/转换不是它的主要目的。 Rose旨在支持自定义工具,但恕我直言是一个相当复杂的方案,在实践中使用,因为它使用EDG前端,它不是为支持转换而设计的。
[以下文字被一位主持人删除了。我已经把它推回去了,因为它是这个任务的有效转换系统。事实上,我对此负有责任,并且不会对OP有任何有用的回答。]
我们的DMS软件再造工具包及其C前端明确设计为程序转换系统。它以合理的方式对AST进行全面的数据流分析(包括点到分析,调用图构建和范围分析)。它提供了源到源重写规则,允许更改以表面语法形式表示的AST;你可以阅读转换而不是检查一堆程序代码。通过修改的AST,DMS可以以可编译的形式重新生成包括注释的源代码。
答案 1 :(得分:0)
不完全是AST,但GCCXML可能有助于http://linux.die.net/man/1/gccxml
编辑:如Ira Baxter所述,gccxml不输出有关函数/方法体的信息。这是一个似乎解决了缺乏http://sourceforge.net/projects/gccxml-bodies/
的分支