我有詞法分析器(從ANTLR語法文件生成)哪些(出於性能原因)我編譯爲C代碼,這些代碼將使用Adobe Alchemly包含到我的actionscript項目中。Adobe Alchemy返回C數據結構
解析器將從輸入字符串(從Actionscript傳遞)生成抽象語法樹(In C) - 我希望將C AST返回到actionscript中以進行進一步處理。我如何將AST的樹結構轉換爲我可以返回到actionscript的格式?
謝謝,
我有詞法分析器(從ANTLR語法文件生成)哪些(出於性能原因)我編譯爲C代碼,這些代碼將使用Adobe Alchemly包含到我的actionscript項目中。Adobe Alchemy返回C數據結構
解析器將從輸入字符串(從Actionscript傳遞)生成抽象語法樹(In C) - 我希望將C AST返回到actionscript中以進行進一步處理。我如何將AST的樹結構轉換爲我可以返回到actionscript的格式?
謝謝,
不幸的是,你不能只發送一個C數據結構。你有三個選擇,按照瘋狂的順序排列:
我只包括#3的完整性 - 我認爲這將是瘋狂的嘗試任何一種複雜的數據結構。代碼會很脆弱。以下指針會很笨重。 Bleah。
對於#2,您可以使用動態對象(通過AS3_Object)或具體的對象(通過AS3_Get,AS3_New)。這是相當複雜的代碼,並不是很快。可能難以維護。
對於#1,序列化的類型是重要的。您可以讓您的C代碼將結構渲染爲二進制「文件」,然後返回該文件,並讓AS3通過ByteArray解析文件格式。或者您可以將其呈現給XML,並讓AS3的XML類解析它。這具有相當快的優點(因爲XML本身實現),至少在反序列化結束時是如此。如果你在C端(或者ahem,sprintfs)有一個快速的XML渲染器,那麼它並不是那麼糟糕。
序列化好主意:)謝謝 –
你想如何讓你的樹看起來像在ActionScript中?只有字符串或字符串_and_和保存節點類型的數字值?如果它是第一個,你可以將'toStringTree()'產生的字符串傳遞給Actionscript。 –
不幸的是我需要每個節點中的大部分數據(text:String,類型:int,startIndex:int,endIndex:int)。 –