使用LLVM遍历AST

时间:2012-08-11 11:33:28

标签: c++ c compiler-construction clang llvm

是否有任何辅助方法可以遍历由LLVM编译器为C代码生成的AST,基本块等?

2 个答案:

答案 0 :(得分:1)

如果您正在尝试加载模块(来自.c文件,由clang -emit-llvm编译的.bc文件)并遍历其功能,基本块等,那么您可能想要从llvm::Module class。它具有迭代全局变量和函数的功能。然后llvm::Function class具有迭代基本块的功能。然后llvm::BasicBlock class具有迭代指令的功能。

或者如果您愿意,可以遍历Clang创建的AST结构。以下是一些示例代码:http://eli.thegreenplace.net/2012/06/08/basic-source-to-source-transformation-with-clang/

答案 1 :(得分:0)

基本上,不可能在LLVM中对AST进行完整的操作。因为LLVM传递在位码级别上起作用,而不在AST上起作用。我认为您想要的是AST迭代器。

您可以参考Artem Degrachev: Clang Static Analyzer: A Checker Developer's Guide中的第3章。

Clang现在为Checker开发人员提供了page。您可以在该链接中找到更多信息。