2009-02-05 4 views
10

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

Является ли это хорошим использованием ANTLR?

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

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

Спасибо.

дан Финукейн

ответ

10

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

+2

Тема стандартов с 500 страницами (?!) Очень часто встречается в списке рассылки ANTLR? Накладные расходы машины должны быть большими, чтобы перевесить преимущество использования мощного генератора парсера для правильного внедрения стандарта. –

4

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

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

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

16

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

+0

Я раньше не слышал о Рагеле. Это звучит интересно и может работать для моей проблемы. Благодарю. –

+1

Если вам нужны рекурсивные правила, вы можете столкнуться с некоторой болью с Ragel. Если нет, это может быть отличным инструментом для вашей работы. –

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

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