Jul*_*ova 11 c static-analysis clang abstract-syntax-tree
我正在用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似乎是最合适的,但对我来说,解决方案的技术细节并不清楚.
欢迎任何建议.非常感谢.
小智 4
我正在尝试做类似的事情。不过,我并没有尝试创建一个 AST。我正在解析多个 AST 并尝试自己映射函数。我使用 AST 匹配器来获取函数调用,然后在其他 AST 中检查它们。
我使用compile_commands.json 文件来提供源文件列表。OptionsParser.getCompilations().getAllFiles()可以获取compile_commands.json中指定的所有源文件。
当我们创建 clangTool 并使用匹配器对该工具运行 frontendAction 时,它会在所有源文件中搜索匹配项。
可能有更优化的方法来做到这一点。如果有人知道请指出。
| 归档时间: |
|
| 查看次数: |
1274 次 |
| 最近记录: |