gpt4 book ai didi

c++ - 如何在 clang 中从 AST 中排除 header ?

转载 作者:IT老高 更新时间:2023-10-28 22:20:25 26 4
gpt4 key购买 nike

我正在使用 clang 生成 AST。我有以下文件(lambda.cpp)要解析:

#include <iostream>

void my_lambda()
{
auto lambda = [](auto x, auto y) {return x + y;};
std::cout << "fabricati diem";
}

我正在使用以下命令解析它:

clang -Xclang -ast-dump -fsyntax-only lambda.cpp

问题在于,clang 也解析了标题内容。结果,我得到了相当大的(约 3000 行)文件,其中包含无用的(对我而言)内容。

生成 AST 时如何排除 header ?

最佳答案

clang-check可能对此事有用,clang-check有选项-ast-dump-filter=<string>记录如下

-ast-dump-filter=<string> - Use with -ast-dump or -ast-print to dump/print only AST declaration nodes having a certain substring in a qualified name. Use -ast-list to list all filterable declaration node names.

clang-check使用 -ast-dump-filter=my_lambda 运行关于示例代码(lambda.cpp)

#include <iostream>

void my_lambda()
{
auto lambda = [](auto x, auto y) {return x + y;};
std::cout << "fabricati diem";
}

它只转储匹配的声明节点FunctionDecl my_lambda 'void (void)'

这是命令行参数和输出中的几行。

$ clang-check -extra-arg=-std=c++1y -ast-dump -ast-dump-filter=my_lambda lambda.cpp --

FunctionDecl 0x2ddf630 <lambda.cpp:3:1, line:7:1> line:3:6 my_lambda 'void (void)'
`-CompoundStmt 0x2de1558 <line:4:1, line:7:1>
|-DeclStmt 0x2de0960 <line:5:9, col:57>

关于c++ - 如何在 clang 中从 AST 中排除 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28048486/

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