我正在使用 clang 进行过程间数据流分析。目前我正在使用 libtooling 来解析源文件并调用 AST 访问者。问题是如何为多个 .c 文件创建一个 AST?
我尝试使用 ASTImport 类,但它不支持某些 AST 节点的导入。此外,当我创建和操作 CompilerIstance 并且它在析构函数中崩溃时,我做错了。
一个非常相似的选项是 ATImportAction,但我不太清楚在这种情况下应该将哪些命令行参数传递给 ClangTool。
第三个选项是为每个 .c 文件创建 ASTUnits 并在每个文件中查找定义,目前尚不清楚如何找到用户定义类型(例如记录)之间的对应关系。在 ASTImport 他们使用 IsStructurallyEquivalent() 函数,但它是在匿名命名空间中声明的,所以我只能将所有这些代码复制到我的程序中。而且它再次支持并非所有的 AST 节点。
从互联网这个链接http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-August/023865.html似乎是最合适的,但对我来说,解决方案的技术细节尚不清楚。
欢迎任何建议。非常感谢。