如何使用clang :: TreeTransform?

Gae*_*ano 5 c++ transformation llvm clang abstract-syntax-tree

我试图找出clang :: TreeTransform的集成点.

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

提前致谢.

小智 6

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

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

然后 RecursiveASTVisitor 的 Visit 方法可以创建一个 TreeTransform 的实例,然后调用相应的转换方法。

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

SemaRef.PushFunctionScope();
SemaRef.PushCompoundScope();
Run Code Online (Sandbox Code Playgroud)

在调用转换函数之前。