Ste*_* Lu 5 c++ clang abstract-syntax-tree libtooling
在网络上找到的 clang 工具示例总是在玩具示例上运行,这些示例通常都是非常简单的 C 程序。
我正在构建一个对 C++ 代码执行源到源转换的工具,这显然是一项非常非常具有挑战性的任务,但 clang 可以胜任这项任务。
我现在面临的问题是,clang 为任何使用 STL 的 C++ 代码生成的 AST 是巨大的。例如,我有一些 C++ 代码,其中clang++ -ast-dump ... | wc -l67,018 行令人毛骨悚然的 AST gobbledygook!
其中 99% 是标准库的东西,我的目标是在我的源到源元编程任务中忽略它们。所以,为了实现这一点,我想简单地过滤掉文件。假设我只想查看我正在分析的项目标头中的类定义(并忽略所有标准库标头的内容),我只需要弄清楚我CXXRecordDecl的每个标头来自哪个标头!
这能做到吗?
编辑:希望这是一种解决方法。现在试试这个......重要的是它必须告诉我decls来自的标题,而不是对应于翻译单元的cpp文件。
我正在寻找的一种方法是缩小与诸如hasName()( 如此处找到的 ) 之类的匹配范围。例如:
recordDecl(hasName("MyBaseClass")) // etc.
Run Code Online (Sandbox Code Playgroud)
不过,我也尝试过使用您上面的评论-ast-dump来了解我自己的 CLang 工具。我发现这篇文章非常有帮助。根据他们的建议,我过去常常clang-check过滤到特定的类名,并将其提供给我的顶级 CPP 文件。输出是更易于管理的几百行,代表感兴趣的类声明和定义。
| 归档时间: |
|
| 查看次数: |
1473 次 |
| 最近记录: |