2011-04-25 85 views
2

我有Java的前端有一個DSL,我想序列化的AST,我在一些容易解析的格式前端部分得到,使其更易於編寫後端一部分用不同的編程語言生成代碼。爲此目的有什麼比XML更好的嗎?序列化AST在解析的格式

回答

4

XML產生大量的文字和AST的可能是驚人的大。 (我構建解析器並且)我們的解析器將生成XML,因爲我們的客戶要求它......但它們都沒有實際使用它。恕我直言,最好設計一種自定義格式來密集編碼你的樹,以避免讀取和寫入AST所花費的時間。例如,你可能會滿足於:

(nodetype =value childnodes) 

其中()是括號,用(開樹節點,將NODETYPE是代表甚至在高基數的格式,以儘量減少字符數節點類型的整數。 ],=如果節點攜帶一個值[如果你考慮它,你並不真的需要=符號],並且提供了該值,則在結束之前內聯子節點。如果他們在場的話,他們顯然是以左撇子開始的。不需要空間!如果您實際上需要請參閱,有時您可以構建一個簡單的啞工具來在需要查看時縮進括號。

[老式計時器將此識別爲LISP S表達式,並且自20世紀50年代後期以來一直以樹編碼形式出現]。

(我們完全避免這種情況,因爲無論您如何操作,閱讀和編​​寫樹木都很昂貴,而且它往往更簡單,更高效地處理記憶中的樹,只是吐出最終答案) 。

+1

我幾乎總是使用類似於上面描述的S表達式。這樣,後端生成可以使用函數綁定和評估來完成。 (例如,1 + 2變成(+ 1 2),並且「+」的計算結果爲知道自己產生什麼的函數,即「1」和「2」)。還可以使用後綴表達式,這些表達式可以更快地序列化,但是它們更難以閱讀,並且難以用於堆疊機以外的其他東西。 – TechNeilogy 2011-04-26 23:46:29