2009-11-19 50 views

回答

2

正如弗拉基米爾指出的那樣,您可以使用自定義的AST節點類,該類具有序列化內置功能。您也可以使用樹適配器來創建您需要的節點類型。

如果您只需要序列化,而不是反序列化,你很可能只是做:

ast.toStringTree() 

上述會給你像樹結構的LISP。一個簡單的序列化方法是將它與一個自定義的AST節點類一起使用,並覆蓋toString()。由於toStringTree()使用節點的toStringTree方法,因此它將基本上序列化您在toString中輸入的內容。使其輸出足夠和有用,你應該設置。

2

CommonTree節點不可串行化。

我建議你序列化令牌,並使用次語法來解析(反序列化)令牌流。在本書(The Antinitive ANTLR Reference)中,Terence Parr在這個劇本章節中給出了這個場景 - 儘管沒有序列化,但是序列化對於令牌來說是微不足道的,因爲它們只是文本。

我的理解也可以換成你自己的樹類:

options { 
    ASTLabelType = MyOwnTreeClass; 
} 

但我還沒有嘗試過。