私はプロジェクトで作業しています。C++でリフレクションを行いたいので、リサーチの後、ヘッダーファイルを解析してXML形式の抽象構文ツリーを取得し、リフレクションで使用するのが最善の方法です。私は多くのツールを試しましたが、どれもcoco、cint、gccxmlのようなVisual C++ 2008またはVisual C++ 2010と互換性がありません。すぐに再生してくださいC++ヘッダーファイルのコレクションを解析する方法は?
答えて
Visual Studioは既にプロジェクト(IntelliSense機能)のすべてのコードを解析しています。アクセスにはVisual C++ Code Modelを使用できます。
私たちの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の部分を処理するようになりました。
- 1. C++コンパイラがヘッダーファイルの前にソースファイルを誤って解析する
- 2. ヘッダーファイル解析にframa-cを使用できますか?
- 3. C: "|"を解析する方法
- 4. テキストファイルを解析する方法C++?
- 5. C#でテキストファイルを解析する方法
- 6. 次のC++コードで引数を解析する方法は?
- 7. キー以外のJSONをC#クラスに解析する方法は?
- 8. C++での良い解析方法
- 9. cで時間形式を解析する方法は?
- 10. Objective-CでURLを解析する方法は?
- 11. C#でsdmxファイルを解析する方法は?
- 12. TIFFヘッダーファイルの読み取り方法c#?
- 13. ジャクソン - オブジェクトのコレクションに文字列配列を解析する方法
- 14. Objective cの `isKindOfClass([NSString] class)`のデータを解析する方法
- 15. C++でデリミタの後にパーツを解析する方法のトラブルシューティング?
- 16. time.time()を解析する方法は?
- 17. yamlファイルを解析する方法は?
- 18. XAMLファイルを解析する方法は?
- 19. kotlinコードを解析する方法は?
- 20. C#二重にする文字列を解析する方法
- 21. C#クラスのデータを解析して抽出する方法
- 22. C#でこのhttpレスポンスを解析する方法
- 23. C#でオブジェクトのJSON配列を解析する方法
- 24. C#でストアドプロシージャの署名を解析する方法
- 25. C#でXMLファイルの再帰的ヘッダーを解析する方法
- 26. Javascriptの日時をC#DateTimeパラメータで解析する方法
- 27. C++ヘッダーファイルとクラスを理解するのに役立ちます
- 28. WTLヘッダーファイルを実装する方法は?
- 29. JSONをC#で解析する最も効率的な方法
- 30. C#コードをプログラムで解析して変更する方法