gpt4 book ai didi

c++ - 铛 libTooling : How to find which header an AST item came out of?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:17:17 25 4
gpt4 key购买 nike

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

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

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

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

这能做到吗?

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

最佳答案

根据我目前的经验,某些给定 AST 节点的“源”最好通过使用 Locations 来检索。例如,每个节点至少有一个起始位置,当您打印出来时,它将包含头文件路径。

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

关于c++ - 铛 libTooling : How to find which header an AST item came out of?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25965559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com