Могу ли я использовать ANTLR для двустороннего анализа / генерации? - PullRequest
1 голос
/ 31 марта 2010

Мне нужно как анализировать входящие сообщения, так и генерировать исходящие сообщения в формате EDIFACT (в основном структурированный формат с разделителями).

Я хотел бы иметь модель Java, которая будет сгенерирована путем анализа сообщения. Затем я хотел бы использовать ту же модель для создания экземпляра и создания сообщения.

Первая половина в порядке, я использовал ANTLR, прежде чем переходить от необработанных -> объектов Java. Но я никогда не делал обратное, или, если у меня есть, это было на заказ.

Поддерживает ли ANTLR генерирование с использованием грамматики или это действительно инструмент только для анализа?

EDIT:

Расширение - я хочу определить две вещи в идеале. Грамматика, описывающая необработанное сообщение (в данном случае EDIFACT, но, если хотите, притворяется, что это CSV). И объектная модель Java.

Я знаю, что могу написать грамматику ANTLR для получения из необработанной -> модели Java. например Разбор строки SQL -> модель Java, которую я делал раньше. Но в идеале мне нужно пойти и другим путем, не меняя грамматику.

Если вы сравниваете его с JAXB (мир XML), я действительно хочу JAXB для EDIFACT (а не XML).

Ответы [ 2 ]

1 голос
/ 01 апреля 2010

Может ли ANTLR делать то, что вы просите, ДА. Хотя для этого может потребоваться несколько грамматик.

Для меня это звучит так, как будто вы хотите создать AST из вашего парсера. Пусть один обходчик деревьев сделает все необходимое для создания Java-объекта (возможно, второй грамматик). И затем второй обходчик дерева для создания выходных сообщений (третий грамматик), и вы даже можете использовать StringTemplate, если хотите. Может быть, вы можете уйти с двумя грамматиками.

Но на этом этапе для получения дополнительной помощи необходимо будет предоставить фактические данные, как будет выглядеть AST для конкретного ввода и каким должно быть выходное сообщение.

0 голосов
/ 31 марта 2010

Я никогда не делал этого сам (я также использовал ANTLR только для анализа), но я точно знаю, что ANRLR можно использовать и в качестве генератора.

На самом деле

использует библиотеку stringtemplates для генерации собственного кода (того же автора).

...