我刚刚开始使用 antlr3 并试图序列化 .g 语法的 AST 输出。
谢谢,
乐赞
2 回答
2
Parser 生成的 CommonTree 节点不可序列化。
我建议您序列化令牌并使用辅助语法稍后解析令牌的(反序列化)流。在本书(The Definitive ANTLR Reference)中,在“不耐烦的快速浏览”一章中,Terence Parr 准确地给出了这种情况——虽然没有序列化,但序列化对于标记来说是微不足道的,因为它们只是文本。
我的理解也是,您可以用自己的替换 Tree 类:
options {
ASTLabelType = MyOwnTreeClass;
}
但我还没有尝试过。
于 2009-11-19T14:48:43.863 回答
2
正如 Vladimir 指出的那样,您可以使用内置序列化功能的自定义 AST 节点类。您还可以使用树适配器来创建所需的节点类型。
如果您只需要序列化,而不需要反序列化,您可能只需要这样做:
ast.toStringTree()
以上将为您提供类似树形结构的 LISP。进行序列化的一种简单方法是将其与具有覆盖的自定义 AST 节点类结合使用toString()
。由于toStringTree()
使用节点的toStringTree
方法,它本质上会序列化你放入的任何内容toString
。使其输出充分且有用,您应该做好准备。
于 2009-12-03T17:15:44.600 回答