2010-03-31 2 views
1

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

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

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

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

EDIT:

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

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

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

+0

Err, поэтому вы хотите создать переводчика (грамматику + правила), который преобразует, скажем, с английского на испанский. И с тем же переводчиком (и с той же грамматикой!) Переводите испанцев обратно на английский? –

ответ

1

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

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

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

+1

Спасибо, что согласен с вашим подходом, но я решил, что ANTLR будет излишним для этого, учитывая, что ЭДИФАКТ разумно структурирован. –

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^