C++ の正確な分析を含むものは、基本的にどこかに完全な C++ フロント エンドを必要とします (そうしないと、答えが得られないか、間違っている可能性があり、「大規模な」アプリケーションではうまく機能しません)。ここで利用できる実用的な答えはあまりありません。
既に述べたように、GCCXML は GCC から派生したパッケージであるため、必要な C++ フロント エンドが含まれています。XMLを生成するため、別の回答で提案されている「メモリ内データ構造」を形成するために読み返す必要がある大量の出力が生成されます。残念なことに、GCCXML は既にそのメモリ データ構造を構築してから、それを XML としてエクスポートし、再度構築する必要があります。もちろん、メモリ内のデータ構造を構築する GCC を使用することもできますが、GCC をハックして必要なものにする必要があり、実際にはコンパイラになりたいと考えています。つまり、それを自分の意志に曲げるために、自分の手で戦いを繰り広げることになります (そして、GCCXML が存在する理由を説明します。ほとんどの人はその戦いを望んでいません)。
Edison Design Group C++ (EDG) フロント エンドについては言及されていません。これはメモリ データ構造に直接構築されます。これはフロントエンドです。すべての分析作業を自分で行う必要がありますが、タスクは十分に単純であるため、難しくはありません。
私が知っている最後の解決策は私のものです: C++ FrontEnd for DMS。DMS はプログラム分析を構築するための基盤であり、その C++ フロントエンドは C++ の完全なフロント エンドです (たとえば、解析、ツリー構築、名前/型解決など、GCC および Edison フロント エンドが行うすべてのことを行います)。また、DMS によって生成された「メモリ内」のデータ構造を調べて、GCCXML および EDG の場合と同様に特別な分析をコーディングする必要があります。
実際に異なるのは、DMS を使用してメモリ データ構造内のソース コードを更新することで実際にソース コードを変更し、元のコメントを含むメモリ構造からコンパイル可能なコードを再生成できることです。