1

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

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

前半部分很好,我之前使用过 ANTLR 来从原始 -> Java 对象开始。但我从来没有做过相反的事情,或者如果我有它是习惯的。

ANTLR 支持使用语法生成还是真的只是一个仅解析工具?

编辑:

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

我知道我可以编写一个 ANTLR 语法来从 raw -> Java 模型中获取。例如,解析一个 SQL 字符串 -> 我之前做过的 Java 模型。但在不改变语法的情况下,我也需要另辟蹊径。

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

4

2 回答 2

1

ANTLR 可以按您的要求做吗,是的。尽管它可能需要多个语法。

对我来说,这听起来像是你想从你的解析器创建一个 AST。让一个 tree walker 完成所有所需的 java 对象创建(可能是第二个语法)。然后是第二个 tree walker 来创建输出消息(第三语法),如果你愿意,你甚至可以使用 StringTemplate。也许你可以逃脱两个语法。

但此时必须提供实际细节以获得更多帮助,具体输入的 AST 是什么样的以及输出消息应该是什么。

于 2010-03-31T20:34:11.190 回答
0

我自己从未做过(我也只使用 ANTLR 进行解析),但我确信 ANRLR 也可以用作生成器。

事实上,它使用了一个名为stringtemplates的库来生成自己的代码(由同一作者编写)。

于 2010-03-31T11:11:16.467 回答