Clang.pm で C/C++/Objective-C をパースする!!
https://github.com/AlexBio/p5-Clang
https://metacpan.org/release/Clang
Clang.pmという謎のライブラリをALEXBIO氏が CPAN にだしていたので、つかってみた。
まずは、ライブラリを
sudo aptitude install libclang-dev
cpanm Clang -nv
としてインストールします。
int main() {
puts("Hello, world!");
return 0;
}
というソースを hello.c という名前で用意。
use v5.16;
use Clang;
my $index = Clang::Index->new(1);
my $tunit = $index->parse('hello.c');
my $nodes = $tunit->cursor->children;
foreach my $node (@$nodes) {
printf("%s %s\n", $node->spelling, $node->kind->spelling);
}
というように Clang::Index をたたくようにすると
以下のような出力をえる。
hello.c
__va_list_tag StructDecl
__va_list_tag TypedefDecl
__builtin_va_list TypedefDecl
main FunctionDecl
ドキュメントをよんだかんじでは、どうやら現状ではfunction/typedef/structの一覧がとれるところまでしか実装されてない様子。本来は FunctionDecl の中のパーズツリーもとれるとおもうのだが、そのメソッドが現在実装されていない。今後に期待といったところ。
もうちょっと整備されれば、gonzui のインデックスや、メトリックスなどの用途につかえそうですね。
Published: 2012-07-17(Tue) 01:36