代码之家  ›  专栏  ›  技术社区  ›  krammer

使用LLVM遍历AST

  •  2
  • krammer  · 技术社区  · 12 年前

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

    2 回复  |  直到 9 年前
        1
  •  1
  •   jlstrecker    12 年前

    如果您试图加载模块(从由 clang -emit-llvm )并遍历它的函数、基本块等,然后您可能需要从 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/

        2
  •  0
  •   Yushan ZHANG    5 年前

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

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

    Clang现在有一个 page 适用于检查器开发人员。您可以在链接下找到更多信息。