【问题标题】:How to serialise an antlr3 AST如何序列化 antlr3 AST
【发布时间】:2009-11-19 14:11:24
【问题描述】:

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

【问题讨论】:

    标签: java antlr antlr3


    【解决方案1】:

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

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

    ast.toStringTree()
    

    以上将为您提供类似树形结构的 LISP。进行序列化的一种简单方法是将其与具有覆盖 toString() 的自定义 AST 节点类结合使用。由于toStringTree() 使用节点的toStringTree 方法,它本质上会序列化您放入toString 的任何内容。使其输出充分且有用,您应该做好准备。

    【讨论】:

      【解决方案2】:

      Parser 生成的 CommonTree 节点不可序列化。

      我建议您序列化 Tokens 并使用辅助语法稍后解析(反序列化的)Tokens 流。在这本书(The Definitive ANTLR Reference)的 Quick Tour for Impatient 一章中,Terence Parr 给出了这个场景——虽然没有序列化,但是序列化对于标记来说是微不足道的,因为它们只是文本。

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

      options {
        ASTLabelType = MyOwnTreeClass;
      }
      

      但我没试过。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-24
        • 2011-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多