clang libTooling:如何找到AST项目的标题?

时间:2014-09-22 01:27:27

标签: c++ clang abstract-syntax-tree libtooling

网上为clang工具找到的示例总是在玩具示例上运行,这些示例通常都是非常简单的C程序。

我正在构建一个在C ++代码上执行源到源转换的工具,这显然是一项非常非常具有挑战性的任务,但是clang完成了这项任务。

我现在面临的问题是clang为任何使用STL的C ++代码生成的AST是巨大的。例如,我有一些C ++代码,clang++ -ast-dump ... | wc -l是67,018行可怕的AST gobbledygook!

其中99%是标准库的东西,我的目标是在我的源到源元编程任务中忽略它。所以,要实现这一点,我想简单地过滤掉文件。假设我只想查看我正在分析的项目标题中的类定义(并忽略所有标准库标题的内容),我需要弄清楚每个标题库的标题{ {1}}来自!

可以这样做吗?

编辑:希望this是一种解决方法。现在尝试一下......重要的是它必须告诉我decls出来的标题,而不是与翻译单元对应的cpp文件。

2 个答案:

答案 0 :(得分:1)

根据我迄今为止的经验,"来源"使用Locations可以最好地检索某些给定AST节点。例如,每个节点至少都有一个起始位置,当你打印出来时,它将包含头文件路径。

然后,可以使用此路径来确定它是您仍然有兴趣检查的系统库还是应用程序代码的一部分。

答案 1 :(得分:0)

我正在研究的一条路线是缩小与hasName()之类的匹配(找到here。例如:

recordDecl(hasName("MyBaseClass")) // etc.

然而,上面使用-ast-dump的评论是我尝试在我自己的CLang工具上获得一块土地的东西。我发现this post非常有帮助。有了他们的建议,我使用clang-check过滤到一个特定的类名,并将其作为我的顶级CPP文件。输出是一个更容易管理的几百行,代表了类声明和感兴趣的定义。