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

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

Вопрос

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

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

Решение

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

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

Добавление

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

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

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

scroll top