我刚刚开始使用antlr3,并且正在尝试序列化.g语法的AST输出。
谢谢,
勒赞
发布于 2009-12-04 01:15:45
正如Vladimir所指出的,您可以使用具有内置序列化功能的自定义AST节点类。您还可以使用树适配器来创建所需的节点类型。
如果你只需要序列化,而不是反序列化,你可能只需要这样做:
ast.toStringTree()上面的代码会给你一个类似于LISP的树形结构。进行序列化的一种简单方法是将其与带有被覆盖的toString()的自定义AST节点类结合使用。由于toStringTree()使用节点的toStringTree方法,因此它基本上会序列化您放入toString中的任何内容。让它的输出足够和有用,你就应该准备好了。
发布于 2009-11-19 22:48:44
解析器生成的CommonTree节点不可序列化。
我建议您序列化令牌,并在以后解析(反序列化的)令牌流时使用辅助语法。在这本书(权威的ANTLR参考)的Quick Tour for Impatient一章中,Terence Parr正是给出了这个场景--虽然没有序列化,但是序列化对于令牌来说是微不足道的,因为它们只是文本。
我的理解是,您可以用自己的类替换Tree类:
options {
ASTLabelType = MyOwnTreeClass;
}但我还没试过。
https://stackoverflow.com/questions/1763540
复制相似问题