c++ - 如何使用 clang::TreeTransform?

标签 c++ clang llvm transformation abstract-syntax-tree

我正在尝试找出 clang::TreeTransform 的集成点。

目标是在代码生成之前转换 AST。

提前致谢。

最佳答案

一种方法是使用 ASTFrontEndAction ,然后重新定义方法 CreateASTConsumer 以创建 SemaConsumer(而不是 ASTConsumer)。

然后在 handleTopLevelDecl 方法中通过将 Sema 传递给 RecursiveASTVisitor 创建一个 RecursiveASTVisitor,这对于 TreeTransform 是必需的。

然后 RecursiveASTVisitor 的 Visit 方法可以创建 TreeTransform 的实例,然后调用适当的转换方法。

PS:有时在转换 compund 语句时,函数作用域可能为空。你可以做

SemaRef.PushFunctionScope();
SemaRef.PushCompoundScope();

在调用转换函数之前。

关于c++ - 如何使用 clang::TreeTransform?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38146529/

相关文章:

c++ - "Explicit specialization of std::iterator_traits<char *> after instantiation"(CLang)

c++ - 在 llvm 的 IR 代码中添加函数调用

llvm - 从另一个 llvm::Module 获取函数声明

linker - 带有积极内联的 "relocation truncated to fit"链接失败

c - 重新加载共享库时,带有__attribute __(constructor)标记的函数是否再次运行?

c++ - 二元运算符的最佳命名空间是什么?

c++列出(LINUX)中的所有目录和子目录

类外部函数定义的 C++ 链接器错误

c++ - 关于仅 header C++ 库使用的可量化指标(基准)

c++ - Clang Tools Extras 中有什么?