2008-11-12 2 views
8

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

+1

Можете ли вы дать более подробную информацию о формате данных. Это какой-то сложный формат? –

+0

Я не помню, что я имел в виду, когда я спросил об этом изначально, но, вероятно, это связано с признанием заголовков SSL/TLS. – Brian

ответ

12

Boost Spirit позволяет определять синтаксический анализатор с использованием Extended Backus–Naur Form (EBNF) синтаксиса с template meta-programming. Он очень гибкий и использует абстрактные классы на всех этапах процесса синтаксического анализа, которые можно настроить. Чтобы обрабатывать поток двоичных данных, вам нужно будет реализовать пользовательские классы сканера, поскольку типы по умолчанию предназначены для ввода текста. Вы можете прочитать далее в разделе The Scanner and Parsing раздела Spirit User's Guide.

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

Добавление

The latest version of Boost Spirit includes functionality for dealing with binary data.

9

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

+0

Очень круто, спасибо! – Brian