如何序列化antlr3 AST

时间:2009-11-19 14:11:24

标签: java antlr antlr3

我刚刚开始使用antlr3并尝试序列化.g语法的AST输出 谢谢,
Lezan

2 个答案:

答案 0 :(得分:2)

Parser生成的CommonTree节点不是Serializable。

我建议您序列化令牌并使用辅助语法稍后解析(反序列化)令牌流。在书中(The Definitive ANTLR Reference),在快速浏览不耐烦的章节中,Terence Parr给出了这个场景 - 虽然没有序列化,但序列化对于令牌来说是微不足道的,因为它们只是文本。

我也理解你可以用你自己的Tree类替换它:

options {
  ASTLabelType = MyOwnTreeClass;
}

但我还没试过。

答案 1 :(得分:2)

正如Vladimir所指出的,您可以使用具有内置序列化功能的自定义AST节点类。您还可以使用树适配器来创建所需的节点类型。

如果您只需要序列化而不需要反序列化,那么您可能只需要执行:

ast.toStringTree()

以上将为您提供类似树状结构的LISP。一个简单的序列化方法是将它与自定义的AST节点类结合使用,并覆盖toString()。由于toStringTree()使用节点的toStringTree方法,因此它基本上会序列化您放在toString中的任何内容。使其输出充足且有用,您应该设置。