【问题标题】:Using LLVM to traverse AST使用 LLVM 遍历 AST
【发布时间】:2012-08-11 11:33:28
【问题描述】:

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

【问题讨论】:

  • 如果您询问 llvm-c 接口,请查看 LLVMGetBasicBlocks、LLVMGetFirstInstruction、LLVMGetBasicBlockTerminator 等。如果您使用 C++ - 请参阅众多 LLVM 通行证中的任何一个以获得灵感。

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


【解决方案1】:

如果你试图加载一个模块(从一个由clang -emit-llvm从.c文件编译的.bc文件)并遍历它的函数、基本块等,那么你可能想从@987654321开始@。它具有遍历全局变量和函数的函数。然后llvm::Function class 具有遍历基本块的功能。然后llvm::BasicBlock class 具有迭代指令的功能。

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

【讨论】:

    【解决方案2】:

    基本上,不可能对 LLVM 中的 AST 进行完整的操作。因为 LLVM 通行证在位码级别上工作,而不是在 AST 上。我认为你想要的是一个 AST 迭代器。

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

    Clang 现在有一个page 供检查程序开发人员使用。您可以通过以下链接找到更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多