繁体   English   中英

如何序列化antlr3 AST

[英]How to serialise an antlr3 AST

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

Parser生成的CommonTree节点不是Serializable。

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

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

options {
  ASTLabelType = MyOwnTreeClass;
}

但我没试过。

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

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

ast.toStringTree()

以上将为您提供类似树状结构的LISP。 一个简单的序列化方法是将它与自定义AST节点类结合使用,并重写toString() 由于toStringTree()使用节点的toStringTree方法,它基本上会序列化你放入toString任何东西。 使其输出充足且有用,您应该进行设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM