我现在工作中要写个fuzz引擎,语法分析部分用到了clang的接口,打算写一些博客记录绍下,ast(抽象语法树),libtooling接口的使用等等
llvm clang AST 介绍
Clang的AST与其他一些编译器生成的AST不同,它与书写的C++代码和C++标准非常相似。例如,括号表达式和编译时常量在AST中以未简化的形式存在。这使得Clang的AST非常适合重构工具。
所有Clang AST节点的文档可以通过生成的Doxygen访问。Doxygen在线文档也被您喜欢的搜索引擎索引,因此通常搜索clang和AST节点的类名就可以找到您要查找的类的doxygen文档(例如,搜索:clang ParenExpr)
检查AST (抽象语法树)
了解AST结构,对于调试、性能优化、代码分析和重构等方面都非常有帮助
生成AST结构命令
命令1(常用)
clang -Xclang -ast-dump -fsyntax-only test.cc
命令2(ast结构更精确)
conmmand_json.cc里的编译命令 + -Xclang -ast-dump -fsyntax-only
以上2种方式生成ast语法树都可以 下面是生成ast的结构
$ cat test.cc
int f(int x) {
int result