2011-03-14 17 views
9

Tengo cierta experiencia con la generación de código tipo Pragmatic-Programmer: especificando una estructura de datos en formato neutral de plataforma y escribiendo plantillas para un generador de código que consume estos archivos de estructura de datos y produce código que extrae bytes sin procesar en datos específicos del lenguaje estructuras, escala en los datos numéricos, imprime los datos, etc. Las ideas agradables pragmáticas (TM) son que (a) puedo cambiar estructuras de datos modificando mi archivo de especificación y regenerando la fuente (que es SECO y todo eso) y (b) Puedo agregar funciones adicionales que se pueden generar para todas mis estructuras simplemente modificando mis plantillas.¿Marco para construir analizadores estructurados de datos binarios?

Lo que había usado era una secuencia de comandos Perl llamada Jeeves que funcionó, pero es de propósito general, y las funciones que quería escribir para manipular mis datos las escribía desde cero.

¿Hay marcos que sean adecuados para crear analizadores para datos binarios estructurados? Lo que he leído de Antlr sugiere que eso es excesivo. Mis idiomas de interés actuales son C#, C++ y Java, si es que importa.

Gracias como siempre.

Editar: Pondré una recompensa en esta pregunta. Si hay áreas en las que debería estar buscando (palabras clave para buscar) u otras formas de atacar este problema que ha desarrollado usted mismo, me encantaría saber sobre ellas.

+0

un alimento listo para su utilización marco, pero al menos algunos de pensamiento: http://okmij.org/ftp/Scheme/binary-parse.scm - el mismo enfoque se puede aplicar en C#. –

+3

No sé por qué crees que ANTLR (o cualquier generador de analizadores) es excesivo. Debe tener alguna forma de definir sus datos, y eso requiere un lenguaje de especificación, para lo cual debe haber un analizador en alguna parte; no tiene mucho sentido escribir un analizador completamente ad hoc para este propósito. También necesitará algún tipo de analizador para analizar los datos binarios en bruto; los generadores de analizadores convencionales generalmente se utilizan para procesar texto, pero puede abusarlos fácilmente para procesar datos binarios. Ahora, para analizar datos binarios, un regulador debe ser adecuado; un CFG completo probablemente no sea necesario. –

+0

@Ira: Buen punto sobre el lenguaje de especificación. El funcionamiento de mi Jeeves tenía uno, y acabo de usarlo en lugar de agregarlo o diseñarlo. – John

Respuesta

2

Puede encontrar ASN.1 interesante, ya que proporciona una manera de absract para describir los datos que puede estar procesando. Si usa ASN.1 para describir los datos de manera abstracta, necesita una forma de asignar esos datos abstractos a flujos binarios concretos, para los cuales ECN (Encoding Control Notation) es probablemente la opción correcta.

En realidad, el New Jersey Machine Toolkit está enfocado en flujos de datos binarios correspondientes a conjuntos de instrucciones, pero creo que es un superconjunto de solo flujos binarios. Tiene muy buenas instalaciones para definir campos en términos de cadenas de bits, y generar automáticamente accesos y generadores de tales. Esto podría ser particularmente útil si sus estructuras de datos binarios contienen punteros a otras partes de la secuencia de datos.

+0

Muchas gracias por su ayuda! (+125) – John

3

También puede buscar a un proyecto relativamente nuevo Kaitai Struct, lo que proporciona un lenguaje para ese fin y también tiene un buen IDE: Kaitai.io

No
Cuestiones relacionadas