2011-07-19 38 views
0

我有詞法分析器(從ANTLR語法文件生成)哪些(出於性能原因)我編譯爲C代碼,這些代碼將使用Adobe Alchemly包含到我的actionscript項目中。Adob​​e Alchemy返回C數據結構

解析器將從輸入字符串(從Actionscript傳遞)生成抽象語法樹(In C) - 我希望將C AST返回到actionscript中以進行進一步處理。我如何將AST的樹結構轉換爲我可以返回到actionscript的格式?

謝謝,

+0

你想如何讓你的樹看起來像在ActionScript中?只有字符串或字符串_and_和保存節點類型的數字值?如果它是第一個,你可以將'toStringTree()'產生的字符串傳遞給Actionscript。 –

+0

不幸的是我需要每個節點中的大部分數據(text:String,類型:int,startIndex:int,endIndex:int)。 –

回答

1

不幸的是,你不能只發送一個C數據結構。你有三個選擇,按照瘋狂的順序排列:

  1. 在C端序列化數據並在AS3端重構它。
  2. 將數據打包到對象中並返回它們。
  3. 將指針和大小傳遞迴AS3,並從Alchemy的ram ByteArray中提取數據。

我只包括#3的完整性 - 我認爲這將是瘋狂的嘗試任何一種複雜的數據結構。代碼會很脆弱。以下指針會很笨重。 Bleah。

對於#2,您可以使用動態對象(通過AS3_Object)或具體的對象(通過AS3_Get,AS3_New)。這是相當複雜的代碼,並不是很快。可能難以維護。

對於#1,序列化的類型是重要的。您可以讓您的C代碼將結構渲染爲二進制「文件」,然後返回該文件,並讓AS3通過ByteArray解析文件格式。或者您可以將其呈現給XML,並讓AS3的XML類解析它。這具有相當快的優點(因爲XML本身實現),至少在反序列化結束時是如此。如果你在C端(或者ahem,sprintfs)有一個快速的XML渲染器,那麼它並不是那麼糟糕。

+0

序列化好主意:)謝謝 –