Можно ли использовать Boost Spirit для анализа данных потока байтов?

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

2 ответа

Решение

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

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

добавление

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

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

Другие вопросы по тегам