首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何序列化antlr3 AST

如何序列化antlr3 AST
EN

Stack Overflow用户
提问于 2009-11-19 22:11:24
回答 2查看 709关注 0票数 3

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

谢谢,

勒赞

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-04 01:15:45

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

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

代码语言:javascript
复制
ast.toStringTree()

上面的代码会给你一个类似于LISP的树形结构。进行序列化的一种简单方法是将其与带有被覆盖的toString()的自定义AST节点类结合使用。由于toStringTree()使用节点的toStringTree方法,因此它基本上会序列化您放入toString中的任何内容。让它的输出足够和有用,你就应该准备好了。

票数 2
EN

Stack Overflow用户

发布于 2009-11-19 22:48:44

解析器生成的CommonTree节点不可序列化。

我建议您序列化令牌,并在以后解析(反序列化的)令牌流时使用辅助语法。在这本书(权威的ANTLR参考)的Quick Tour for Impatient一章中,Terence Parr正是给出了这个场景--虽然没有序列化,但是序列化对于令牌来说是微不足道的,因为它们只是文本。

我的理解是,您可以用自己的类替换Tree类:

代码语言:javascript
复制
options {
  ASTLabelType = MyOwnTreeClass;
}

但我还没试过。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1763540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档