是否有任何辅助方法可以遍历由LLVM编译器为C代码生成的AST,基本块等?
答案 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。您可以在该链接中找到更多信息。