Является ли ANTLR подходящим инструментом для сериализации/десериализации формата двоичных данных?

StackOverflow https://stackoverflow.com/questions/517004

Вопрос

Мне нужно читать и записывать потоки октетов для отправки по различным сетям для связи с интеллектуальными электросчетчиками.Существует стандарт ANSI, ANSI C12.19, который описывает формат двоичных данных.Хотя формат данных не слишком сложен, стандарт очень велик (более 500 страниц), поскольку описывает множество различных типов.Стандарт полностью описан грамматикой EBNF.Я рассматриваю возможность использования ANTLR для чтения грамматики EBNF или ее модифицированной версии и создания классов C#, которые могут читать и записывать поток октетов.

Это хорошее использование ANTLR?

Если да, то что мне нужно сделать, чтобы использовать ANTLR 3.1?Из поиска в архивах телеконференций выяснилось, что мне нужно реализовать новый поток, который может читать байты вместо символов.Это все, или мне придется также реализовать производную от Lexer?

Если ANTLR может помочь мне прочитать/проанализировать поток, может ли он также помочь мне написать поток?

Спасибо.

Дэн Финукейн

Это было полезно?

Решение

Эта тема время от времени возникает в списке рассылки ANTLR.Обычно ответ отрицательный, поскольку двоичные форматы файлов очень распространены, и на них не стоит тратить деньги.

Другие советы

Вы можете взглянуть на Рагель.Это компилятор/лексер конечного автомата, который полезен для реализации сетевых протоколов.Я читал отчеты о том, что он генерирует очень быстрый код.Если вам не нужен синтаксический анализатор и механизм шаблонов, у ragel меньше накладных расходов, чем у ANTLR.Если вам нужен полноценный парсер, AST и хорошая поддержка шаблонизатора, ANTLR может быть лучшим выбором.

Мне кажется, что знание грамматики дает огромное преимущество.

В ANTLR 3.1 есть StringTemplate и функции генерации кода, которые отделены от синтаксического анализа/лексирования, поэтому вы можете разложить проблему таким образом.

Мне кажется, это победитель, стоит попробовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top