2011-07-19 8 views
2

私は、構文解析が完了した直後にAST(GENERIC表現)の分析を行うgcc 4.5用のプラグインを作成しようとしています。私のソース言語はCで、プラグインもC言語で書かれています。いくつかの記事hereは、C++のためにそのようにする方法を説明しています。 GENERICのドキュメントと以前のリンクの両方で、変数global_namespaceにC++ GENERIC ASTのルートノードが格納されていることが示されています。 C GENERIC ASTのルートノードを格納する変数はどれですか?GCCにC GENERIC ASTのルートノードを格納する変数はどれですか?

ありがとうございます!

答えて

0

明らかにCの名前空間などはありませんが、のスコープという概念は存在しますが、 c-tree.hで定義された関数pop_scope()によって、あなたがいる場所の範囲(プラグインがGCCによって呼び出されるイベントによって異なります)にアクセスできます。これは、blockで構成されるtreeを返します。このブロックのすべての宣言、つまりBLOCK_VARSマクロを介してこのスコープで宣言されたシンボル(変数、関数など)にアクセスできます。このブロックには、treeのdecl-nodesがあります。

関数本体にアクセスする必要がない場合は、FUNCTION_DECLノードのマクロDECL_SAVED_TREE(node)nodeを使用して、関数定義からいつでもアクセスできます。これは、定義が同じファイル内にあり、すでにビルドされている場合にのみ有効です。プラグインをフックする場所によって異なります。

免責事項:これはGCC 4.8で有効です。インターフェイスは頻繁に変更されることがあります。 GCC 4.9では、プラグインインタフェースの一部はC++で記述されています。

関連する問題