3

任意の型宣言 (たとえば、 のような宣言)を解析するのに役立つオープン ソース ライブラリ ( または で記述)Cを見つけようとしています。C++C/C++void *(*(*foo[])( int, void * [] ))[123]

C/C++オープンソースのType Declaration 解析ライブラリを推奨できる人はいますか?

注: GPL ライセンス コード (cdeclツールなど) は使用できません。これはクローズド ソース アプリケーション用であり、自分で記述できるものに対するより堅牢なソリューションを望んでいるからです。

4

1 に答える 1

1

C の構文解析は難しいことで有名であり、やりたいことを行うには、おそらく名前と型の解決が必要です。これを正しく行うには、完全なコンパイラ フロント エンドに相当するものが必要です。実際には、読み取るコードにはプリプロセッサ ディレクティブが含まれているため、プリプロセッサも必要です。これらのデバイスを組み立てるには膨大な作業が必要です。十分な時間がない限り、自分で書きたくないというのは正しいことです。

あなたの現実的な選択は、GCC (あなたの仕事のためにねじるのが難しい)、GCCXML (整形式のプログラムから宣言を生成したい)、または Clang (同様に) などのオープン ソース パッケージです。Eclipse CDT には (同様に) C パーサーがあります。これらがあなたを満足させる API やライセンスを持っているかどうかはわかりません。クローズド ソース パッケージは、ニーズにより適している場合があります。EDG は C および C++ のフロント エンドを提供し (依然として完全に整形式のプログラムのみを処理したい)、私の会社 (Semantic Designs) も DMS ソフトウェア リエンジニアリング ツールキットを介して提供しています。

このセットのうち、DMS だけが、型宣言を分離して簡単に解析できる可能性があります。文法の任意の非終端記号を解析できます (あいまいなものも含む)。さらに重要なことに、本当に「メタ モデルに移動」したい場合は、宣言を解析し、サブタイプ/参照型を決定する必要がある可能性が高いため (たとえば、typedef を使用する場合)、完全な解析を組み合わせる必要があります。バックグラウンド定義を提供するための名前/型の解決、次に関心のある特定の宣言の解析、バックグラウンド定義によって提供されるシンボル テーブル コンテキストを使用した特定の宣言の名前と型の解決が続きます。DMS 機械は、そのすべての機能を提供します。

于 2013-02-01T17:59:27.637 に答える