如何在`GCC`中获得`c`程序的抽象语法树

时间:2013-02-28 10:57:02

标签: c gcc openmp abstract-syntax-tree

如何在gcc中获取c程序的抽象语法树?
我正在尝试自动将OpenMP pragma插入到输入c程序中 我需要分析嵌套的for循环以查找依赖关系,以便我可以插入适当的OpenMP编译指示 所以我基本上想要做的是遍历和分析输入c程序的抽象语法树 我该如何实现这一目标?

2 个答案:

答案 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/

的分支