あなたが示さなかったのは、あなたがやりたかった「分析」の種類です。ほとんどの C++ 分析では、シンボルfooに遭遇したときにそれが何であるかをある程度理解できるように、正確なシンボル テーブル データが必要です。(技術的には、そのようなシンボル テーブルがなければ+が何であるかさえわかりません!) ジェネリック型の情報も必要です。「a*b」という式がある場合、結果の型は何ですか? 「名前と型」の情報を持つことは、分析のために行うほとんどすべてのことの鍵となります。
あなたがclangを主張するなら、ここに他の答えがあります。名前と型の解決を提供するかどうかはわかりません。
名前と型の解決が必要な場合は、別のソリューションとしてDMS Software Reengineering Toolkitがあります。DMS は、解析、分析、変換、および解析解除 (コンパイラ データ構造からソース コードを再生成する) のためのインフラストラクチャのような汎用コンパイラを提供します。DMS の強力な C++ フロント エンド (他の多くの言語のフロント エンドもあります) は、ANSI 標準、GCC および MS VC++ 方言に従って、完全な名前と型の解決を提供します。
コード変換は、DMS によって提供される抽象構文ツリー インターフェイスを介して実装するか、ターゲット言語 (この場合は C++) の表面構文で記述されたパターン指向のプログラム変換規則によって実装できます。ルール言語を使用した簡単な変換を次に示します。
domain Cpp~GCC3; -- says we want patterns for C++ in the GCC3 dialect
rule optimize_to_increment(lhs:left_hand_side):expression -> expression
" \lhs = \lhs + 1 " -> " \lhs++" if no_side_effects(lhs).
これは、DMS によって構築された AST を暗黙的に操作して、AST を変更します。条件を使用すると、パターン変数 (この場合はlhs )の任意のプロパティについて問い合わせることができます。これには、必要に応じて名前と型の制約が含まれます。
DMS は、非常に高度なプログラム分析と C++ コードの変換に何度も使用されてきました。DMS を使用してかなり明白な方法で C++ コードを計測することにより、C++ テスト カバレッジ ツールを構築します。この Web サイトには、DMS を使用して軍用機ミッション ソフトウェアの大規模な製品ラインのアーキテクチャを再構築する方法を説明した論文の参考文献があります。この種の活動は、上記のような多数のパターン指向の変換を適用することにより、文字通り、C++ をあるアーキテクチャーの形に別のアーキテクチャーの形に注ぎ込みます。
インストルメンテーションの実装は非常に簡単です。そして、それが成熟するのを待つ必要はありません。