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