Можно ли использовать Boost Spirit для анализа данных потока байтов? - PullRequest
8 голосов
/ 12 ноября 2008

Можно ли использовать Spirit (часть библиотеки Boost C ++) для анализа двоичных данных, поступающих из потока? Например, может ли он использоваться для анализа данных, поступающих из сокета, в структуры, байты и отдельные битовые флаги? Спасибо!

Ответы [ 2 ]

12 голосов
/ 13 ноября 2008

Boost Spirit позволяет определять анализатор с использованием расширенной формы Бэкуса-Наура (EBNF) с синтаксисом шаблона метапрограммирования . Он очень гибкий и использует абстрактные классы на всех этапах процесса синтаксического анализа, которые можно настраивать. Чтобы обработать поток двоичных данных, вам необходимо реализовать пользовательские классы сканера, так как типы по умолчанию адаптированы для ввода текста. Вы можете прочитать далее в разделе Сканер и анализ Руководства пользователя Spirit .

По моему скромному мнению, потоки двоичных данных лучше всего обрабатывать с помощью свернутого вручную кода сериализации. Spirit больше ориентирован на правильную грамматику, такую ​​как языки разметки или написания сценариев. Например, Полный синтаксис Lua предоставляется в EBNF. Поэтому, возможно, имеет смысл использовать Spirit для создания собственного парсера. С другой стороны, проприетарный последовательный канал передачи данных с байтами синхронизации и сообщениями о брекетинге CRC потребовал бы гораздо больше работы, чтобы определить EBNF, если бы для него даже существовала контекстно-свободная грамматика .

Добавление

Последняя версия Boost Spirit включает функции для работы с двоичными данными.

9 голосов
/ 19 ноября 2009

Spirit2, только что выпущенный, имеет средства для анализа двоичного файла. Проверьте это .

...