1

私はプロジェクトで作業しています。C++でリフレクションを行いたいので、リサーチの後、ヘッダーファイルを解析してXML形式の抽象構文ツリーを取得し、リフレクションで使用するのが最善の方法です。私は多くのツールを試しましたが、どれもcoco、cint、gccxmlのようなVisual C++ 2008またはVisual C++ 2010と互換性がありません。すぐに再生してくださいC++ヘッダーファイルのコレクションを解析する方法は?

答えて

2

Visual Studioは既にプロジェクト(IntelliSense機能)のすべてのコードを解析しています。アクセスにはVisual C++ Code Modelを使用できます。

2

私たちのC++ front endは、GNUやMSを含むC++の多くの方言を解析することができます。これは、ASTとシンボルテーブル用のコンパイラデータ構造を、C++の "反映"に必要な種類の情報で構築します。解析ツリーをXMLドキュメントとしてエクスポートすることは、むしろ自明です。シンボルテーブルの情報は、シンボル構造を歩いてXMLとしてエクスポートすることができます。

人はいつもASTとシンボルテーブルのデータをXML形式にしたいと思っています。私はそれらをDOM構造に読み込んだり、XSLTで操作できると仮定して推測します。このアイデアには2つの深刻な欠点があります:1)膨大な量のXMLデータが膨大であり、生成/再読み込みするだけで時間がかかります。2)これらの構造を使用すると簡単に行うことができます。 ....

人々が本当にやりたいことは、コードを分析したり、コードを変換すること(通常は分析に基づいている)だと思います。そのためには、どんなツールでも、プログラム構造へのアクセスが提供され、解析や変換が「容易」になります。たとえば、ASTを変更する場合、ソーステキストをどのように再生成しますか?

私たちはDMS Software Reengineering Toolkitを構築して、解析、解析、変換、プリティプリント(「再生元」)のような汎用サポートを提供しています。 DMSは多種多様な言語(C++、C、Java、COBOL、Pythonなど)のフロントエンドを持ち、カスタムアナライザー/変換をコードに組み込むのに役立つ一連の標準サービスを提供します。大胆になる危険があるので、私たちは、MSがWindowsに何が含まれるべきかを決定するのに長い時間を費やしたのと同じように、この一連の作業をカバーするために有用なメカニズムを実装することについて長い時間を費やしました。このメカニズムを再現しようとすることはできますが、巨大なコスト(15年間DMSで作業しています)、あるいはあなたの目を閉じて、あなたがする必要があると思うように十分にハックすることができますほとんどあなたが発見するものは、実際には十分ではないということです)。

"プログラム操作サービス"の一般的な必要性のために、私たちのC++フロントエンドはDMSの上にホストされています。

C++フロントエンドのDMSは、さまざまな標準のソフトウェアエンジニアリングツール(テストカバレッジ、プロファイラ)を構築するだけでなく、コードの大幅な変更を実行するために使用されています(DMSの使い方についてはWebiste大規模な再構築航空機ミッションソフトウェア)。

EDIT 2011年7月8日:フロントエンドでは、関数/プロシージャ/メソッドの制御とデータフローを含む、C++ 11の完全な部分とC++ 14の部分を処理するようになりました。

関連する問題