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

时间:2010-03-31 11:06:42

标签: java parsing antlr two-way

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

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

上半场很好,我之前使用过ANTLR来自raw - > Java对象。但是我从来没有做过相反的事情,或者我已经习惯了。

ANTLR是否支持使用语法生成,还是仅仅是一个解析工具?

修改

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

我知道我可以编写一个ANTLR语法来从原始语言中获取 - > Java模型。例如解析SQL字符串 - >我以前做过的Java模型。但是我需要在没有改变语法的情况下理想地走另一条路。

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

2 个答案:

答案 0 :(得分:1)

ANTLR可以做你想要的,是的。虽然它可能需要多个语法。

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

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

答案 1 :(得分:0)

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

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