我正在使用 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 时如何排除标头?
clang-check
可能对这个问题有用,clang-check
有选择-ast-dump-filter=<string>
记录如下
-ast-dump-filter= - 与 -ast-dump 或 -ast-print 一起使用,仅转储/打印具有特定子字符串的 AST 声明节点
合格名称。使用 -ast-list 列出所有可过滤的声明节点
名称。
when 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)