我需要解析传入消息并以EDIFACT格式(基本上是结构化的分隔格式)生成传出消息。
我想要一个将通过解析消息生成的Java模型。然后,我想使用相同的模型来创建实例并生成消息。
上半部分很好,在使用raw-> Java对象之前,我曾使用过ANTLR。但是我从来没有做过相反的事情,或者如果我习惯的话。
ANTLR是否支持使用语法生成,或者它实际上只是仅解析工具?
编辑:
扩展-我想理想地定义两件事。描述原始消息的语法(在这种情况下为EDIFACT,但如果您愿意,则假装为CSV)。还有一个Java对象模型。
我知道我可以编写ANTLR语法以从原始-> Java模型中获取。例如解析一个SQL字符串->我之前做过的Java模型。但是,我也需要在不改变语法的情况下进行另一种理想的选择。
如果您将它比作JAXB(XML世界),我真的想要JAXB for EDIFACT(而不是XML)。
最佳答案
ANTLR是否可以执行您的要求,是的。尽管可能需要多个语法。
对我来说,这听起来像您想从解析器中创建AST。让一个树漫步者完成所有所需的Java对象创建(可能是第二个语法)。然后是第二个树遍历器以创建输出消息(第三语法),如果需要,甚至可以使用StringTemplate。也许您可以摆脱两种语法。
但是在这一点上,必须提供实际的详细信息以获取更多帮助,特定输入的AST外观以及输出消息应该是什么。