3

Pythonを再帰的に使用してCヘッダーファイル(構造体と変数宣言のみ)を解析することに興味があります。

これが私が探しているものの例です。次のように仮定します。

typedef struct
{
   double value[3];
} vector3;

typedef struct
{
       unsigned int variable_a[4][2];
       vector3 variable_b[5];
} my_example;

また、次のような初期化値を含むファイルがあるとします。

ANCHOR_STRUCT(my_example) = 
{
    // variable_a
    { {1,2}, {3, 4}, {5,6} ,{7,8}   },

    // variable_b
    { {1.0,2.0,3.0}, {4.0,5.0,6.0}, {7.0,8.0,9.0}, {10.0,11.0,12.0}, {13.0,14.0,15.0}  }
}

これらのファイルの両方を解析して、次のようなレポートを生成できるようにしたいと思います。

OUTPUT:
my_example.variable_a[0][0]   = 1
my_example.variable_a[0][1]   = 2
my_example.variable_a[1][0]   = 3
my_example.variable_a[1][1]   = 4
my_example.variable_a[2][0]   = 5
my_example.variable_a[2][1]   = 6
my_example.variable_a[3][0]   = 7
my_example.variable_a[3][1]   = 8

my_example.variable_b[0].value[0] = 1
my_example.variable_b[0].value[1] = 2
my_example.variable_b[0].value[2] = 3
my_example.variable_b[1].value[0] = 4
my_example.variable_b[1].value[1] = 5
my_example.variable_b[1].value[2] = 6
my_example.variable_b[2].value[0] = 7
my_example.variable_b[2].value[1] = 8
my_example.variable_b[2].value[2] = 9
my_example.variable_b[3].value[0] = 10
my_example.variable_b[3].value[1] = 11
my_example.variable_b[3].value[2] = 12
my_example.variable_b[4].value[0] = 13
my_example.variable_b[4].value[1] = 14
my_example.variable_b[4].value[2] = 15

コードを実行せずに(解析によってのみ)これを報告できるようにしたいと思います。この情報を解析して出力するPythonツールはありますか。データ型も印刷したいのですが。

初期化ファイルの「{」と「、」と「}」を解析し、これを構造体の変数と子と照合できるようにするのは少し複雑なようです。順序が非常に重要であるため、値を正しいコード名と一致させるのは難しいようです。また、親/子/孫の変数には再帰が必要だと思います。

ありがとう、ネッド

4

1 に答える 1

0

単純なデータ型に制限しない限り、これは非常に複雑になります。たとえば、ネストされたクラスなどの任意のデータ型を処理しますか?

あなたはc-sourcesを実行したくないと言いますが、ここでやろうとしているのは、独自のc-interpreterを構築することです!車輪の再発明をしてよろしいですか?そうであれば...

最初にできる必要があるのは、ファイルを解析することです。PLYなどのパーサー+辞書式アナライザーを使用できます。解析ツリーができたら、変数とその意図された値を分析できます。

于 2012-06-14T18:34:43.457 に答える