我剛開始使用antlr3,並試圖序列化.g語法的AST輸出。
謝謝,由分析器產生
Lezan如何序列化antlr3 AST
3
A
回答
2
正如弗拉基米爾指出的那樣,您可以使用自定義的AST節點類,該類具有序列化內置功能。您也可以使用樹適配器來創建您需要的節點類型。
如果您只需要序列化,而不是反序列化,你很可能只是做:
ast.toStringTree()
上述會給你像樹結構的LISP。一個簡單的序列化方法是將它與一個自定義的AST節點類一起使用,並覆蓋toString()
。由於toStringTree()
使用節點的toStringTree
方法,因此它將基本上序列化您在toString
中輸入的內容。使其輸出足夠和有用,你應該設置。
2
CommonTree節點不可串行化。
我建議你序列化令牌,並使用次語法來解析(反序列化)令牌流。在本書(The Antinitive ANTLR Reference)中,Terence Parr在這個劇本章節中給出了這個場景 - 儘管沒有序列化,但是序列化對於令牌來說是微不足道的,因爲它們只是文本。
我的理解也可以換成你自己的樹類:
options {
ASTLabelType = MyOwnTreeClass;
}
但我還沒有嘗試過。
相關問題
- 1. Antlr3 AST創建:如何測試可選的子規則?
- 2. 序列化AST在解析的格式
- 3. 如何避免使用ANTLR3構建中間體和無用的AST節點?
- 4. 如何在ANTLR3中製作TreeParser?
- 5. 如何禁用錯誤antlr3
- 6. 如何使用Antlr與antlr3
- 7. 如何ANTLR2改變ANTLR3
- 8. 如何序列化
- 9. YACC(野牛)AST簡化
- 10. 如何在java中序列化/反序列化對象列表?
- 11. 如何序列化/反序列化屬性的通用列表?
- 12. 如何使用JSON序列化器序列化和反序列化MyClass?
- 13. 如何在標準序列化中序列化不可序列化的基類?
- 14. 對象序列化爲JSON,如何序列化屬性(如XML)
- 15. 如何序列化該程序並將其反序列化
- 16. 如何序列化和反序列化郵件程序?
- 17. TinyXml如何序列化
- 18. 如何序列化點
- 19. 如何反序列化
- 20. 如何反序列化CommandResult?
- 21. 如何序列化System.Configuration.SettingsProperty
- 22. 如何序列化字體
- 23. 如何序列化HttpServletRequest/HttpServletResponse?
- 24. 如何序列化fusion :: vector?
- 25. 對象序列化如何
- 26. 如何序列化類
- 27. 如何序列化QJSonObject?
- 28. 如何序列化IDictionary
- 29. 如何從JSON序列化
- 30. 如何序列化集合