c++ parsing stream boost-spirit

c++ - ¿Puede Boost Spirit usarse para analizar datos de transmisión de bytes?



parsing stream (2)

Spirit2, recién lanzado, tiene instalaciones para analizar binarios. Mira esto .

¿Puede Spirit (parte de la biblioteca Boost C ++) usarse para analizar datos binarios provenientes de una secuencia? Por ejemplo, ¿se puede usar para analizar datos procedentes de un socket en estructuras, bytes y banderas de bits individuales? ¡Gracias!


Boost Spirit permite definir un analizador sintáctico utilizando la sintaxis Extended Backus-Naur Form (EBNF) con meta-programación de plantillas . Es muy flexible y utiliza clases abstractas en todas las fases del proceso de análisis que pueden personalizarse. Para procesar una secuencia de datos binarios, necesitaría implementar clases de escáner personalizadas, ya que los tipos predeterminados están diseñados para la entrada de texto. Puede leer más en la sección El escáner y el análisis de la Guía del usuario de Spirit .

En mi humilde opinión, las secuencias de datos binarios se manejan mejor con código de serialización enrollado a mano. Spirit se orienta más hacia gramáticas bien formadas, como lenguaje de marcado o scripting. Por ejemplo, la sintaxis completa de Lua se proporciona en EBNF. Entonces, podría tener sentido usar Spirit para construir un analizador personalizado. Por otro lado, un enlace de datos en serie patentado con bytes de sincronización y mensajes de horquillado CRC requeriría mucho más trabajo solo para definir el EBNF si existe una gramática libre de contexto para él.

Apéndice

La última versión de Boost Spirit incluye funcionalidad para manejar datos binarios.