Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to exclude headers from AST in clang?

Tags:

I'm generating AST using clang. I've got following file (lambda.cpp) to parse:

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

I'm parsing this using following command:

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

The problem is that clang parses also headers content. As a result, I've got quite big (~3000 lines) file with useless (for me) content.

How to exclude headers when generating AST?

like image 628
Kao Avatar asked Jan 20 '15 14:01

Kao


1 Answers

clang-check might be useful on the matter, clang-check has option -ast-dump-filter=<string> documented as follow

-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.

when clang-check run with -ast-dump-filter=my_lambda on the sample code (lambda.cpp)

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

It dumps only matched declaration node FunctionDecl my_lambda 'void (void)'

Here is the command line arguments and few lines from output.

$ 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> 
like image 151
Alper Avatar answered Sep 17 '22 01:09

Alper