2011-07-19 9 views
0

Adob​​e Alchemlyを使用して私のactionscriptプロジェクトに含まれるCコードにコンパイルしたlexer/parser(ANTLR文法ファイルから生成)があります。Adob​​e AlchemyがCのデータ構造を返す

パーザは、入力文字列(Actionscriptから渡された)から抽象構文木(In C)を生成します - 私はC ASTをさらに処理するためにactionscriptに戻したいと思います。 ASTのツリー構造をactionscriptに返すことができる形式に変換するにはどうすればよいですか?

ありがとう、

+0

あなたはどのようにあなたのツリーをActionscriptのように見せますか?文字列のみ、または文字列として_and_はノードの型も保持する数値ですか?最初の場合は、 'toStringTree()'によって生成された文字列をActionscriptに渡すことができます。 –

+0

残念ながら、各ノード(text:String、type:int、startIndex:int、endIndex:int)のほとんどのデータが必要です。 –

答えて

1

残念ながら、Cのデータ構造を送信することはできません。あなたは狂気のように3つの選択肢があります:

  1. データをC側でシリアル化し、AS3側で再構成します。
  2. データをオブジェクトにパックして戻します。
  3. ポインタとサイズをAS3に渡し、AlchemyのRAM ByteArrayからデータを引き出します。

私は完全性のために#3しか含んでいません。複雑なデータ構造のどれかを試してみると夢中になると思います。コードは壊れやすいでしょう。次のポインタはぎこちないでしょう。ブリー。

#2では、動的オブジェクト(AS3_Object経由)または具体的なもの(AS3_Get、AS3_New経由)を使用できます。これはかなり複雑なコードであり、それほど高速ではありません。維持するのが難しいかもしれません。

#1では、シリアル化の種類が重要です。あなたのCコードで構造体をバイナリ 'ファイル'にレンダリングして返し、AS3でByteArrayを介してファイル形式を解析させることができます。または、XMLにレンダリングし、AS3のXMLクラスで解析することもできます。これは、少なくともデシリアライゼーション終了時には(XMLがネイティブに実装されているので)かなり高速であるという利点があります。あなたがC側(または、ahem、sprintfs)に高速XMLレンダラを持っているなら、それほど悪くない。

+0

シリアライズの良いアイデア:)ありがとう –