代码之家  ›  专栏  ›  技术社区  ›  Mike Q

我可以使用antlr进行双向解析/生成吗?

  •  1
  • Mike Q  · 技术社区  · 14 年前

    我需要解析传入消息并以EDIFACT格式(基本上是结构化分隔格式)生成传出消息。

    我希望有一个Java模型,它将通过解析消息生成。然后我想使用相同的模型来创建一个实例并生成一条消息。

    前半部分是好的,我以前使用ANTLR从原始和GT;Java对象。但我从来没有做过相反的事情,或者如果我做过,这是惯例。

    Antlr是否支持使用语法生成,或者它真的只是一个只分析的工具?

    编辑:

    扩展-我想在理想情况下定义两件事。描述原始消息的语法(在本例中是EDIFACT,但如果您愿意,可以假装它是CSV)。以及Java对象模型。

    我知道我可以写一个ANTLR语法来从原始和GT;Java模型中获得。例如解析我以前做过的SQL Strand & GT;Java模型。但我也需要换一种方式,理想情况下不改变语法。

    如果把它比作JAXB(XML世界),我真的希望JAXB用于EDIFACT(而不是XML)。

    2 回复  |  直到 7 年前
        1
  •  1
  •   WayneH    14 年前

    安特尔能按你的要求做吗,是的。尽管可能需要多个克。

    对我来说,这听起来像是您想要从您的解析器创建一个AST。让一个树行者做所有需要的Java对象创建(可能的第二个语法)。然后是第二个树遍历器来创建输出消息(第三个语法),如果需要,甚至可以使用StringTemplate。也许你可以带两克的。

    但是在这一点上,必须给出实际的细节以获得更多的帮助,AST对于特定的输入和输出消息应该是什么样子。

        2
  •  0
  •   Omry Yadan    14 年前

    我自己从来没有这样做过(我也只使用antlr进行解析),但我确信anrlr也可以用作生成器。

    实际上,它使用的是一个名为 stringtemplates 因为它自己的代码生成(由同一作者)。

    推荐文章