1

C ++クラスファイル(.h)を解析し、次の情報を抽出する必要があります。

  1. 関数名
  2. 返品タイプ
  3. 各関数のパラメータタイプのリスト

関数を解析する必要があるかどうかを認識できる特別なタグがあると仮定します。

たとえば。

#include <someHeader>  

class Test
{
    public:
    Test();

    void fun1();
    // *Expose* //
    void fun2();  

};

したがって、fun2()のみを解析する必要があります。

ここで基本的な文法を読みましたが、複雑すぎて理解できませんでした。

Q1。このタスクがどれほど複雑かはわかりません。誰かがこの構文解析を実行するための関数宣言のためのより単純な文法を提供できますか?

Q2。私のアプローチは正しいですか、それとも再発明するのではなく、いくつかのライブラリを使用することを検討する必要がありますか?


編集:明確にするために、私は構文解析に問題はありません。問題は、構文解析する必要のある文法をより理解することです。

4

3 に答える 3

1

C++ ヘッダーには、任意の C++ コードを含めることができます。したがって、ヘッダーの解析は、すべての種類の C++ コードの解析と同じくらい難しい場合があります。

ヘッダー ファイルについて特定の仮定を立てることができれば、作業はより簡単になります。たとえば、関数の前に常に EXPOSE タグがあり、関数が常に 1 行にある場合、最初にそれらの行を grep することができます。

grep -A1 EXPOSE <files>

そして、正規表現を適用して、必要な情報を除外できます。

それでも、既存のツールを使用することをお勧めします。これは、clang と Python でそれを行う方法に関するチュートリアルのようです。

于 2012-08-17T11:02:19.790 に答える
0

ドキュメンテーションのためだけにこれを行っている場合は、doxygenを使用することをお勧めします。

いずれにせよ、これを行う方法についての指針が得られるかもしれません。

于 2012-08-17T11:26:05.953 に答える
0

GCC XMLは、AST (Abstract Syntax Tree) を発行するオープン ソース ツールです。私が行った使用法について投稿したこの他の回答を参照してください。

AST を検査するための XML アナライザーに習熟している (または習熟している) 場合にのみ、使用を検討してください。かなり複雑な構造です...

コメントは出力 XML で失われるため、必要なスニペットを識別するコメントを「grep」する必要があります。

于 2012-08-17T11:20:33.137 に答える