4

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

4

2 回答 2

1

您需要完整的数据流来查找“依赖项”。然后您将需要实际插入OpenMP 调用。

你想要的是一个程序转换系统。GCC 可能有依赖信息,但众所周知,它很难用于自定义项目。其他人提到了 Clang 和 Rose。Clang 可能是一个不错的选择,但自定义分析/转换不是它的主要目的。Rose 旨在支持自定义工具,但恕我直言,在实践中使用的方案相当复杂,因为它使用了 EDG 前端,而该前端并非旨在支持转换。

[以下文字已被版主删除。我已经把它放回去了,因为它是这个任务的有效转换系统之一。我对此负责的事实绝不会降低其作为对 OP 的有用答案的价值。]

我们的 DMS Software Reengineering Toolkit 及其 C 前端被明确设计为程序转换系统。它以合理的方式与 AST 相关联的完整数据流分析(包括点分析、调用图构建和范围分析)。它提供了源到源的重写规则,可以改变以表面语法形式表达的 AST;您可以阅读转换而不是检查一堆程序代码。使用修改后的 AST,DMS 可以重新生成源代码,包括可编译形式的注释。

于 2013-02-28T17:02:39.613 回答
0

不完全是 AST,但 GCCXML 可能会有所帮助http://linux.die.net/man/1/gccxml

编辑:正如 Ira Baxter 所说,gccxml 不输出有关函数/方法主体的信息。这是一个似乎可以解决缺少http://sourceforge.net/projects/gccxml-bodies/的叉子

于 2013-02-28T11:03:32.903 回答