Analizar múltiples formatos / protocolos de archivos

7

Estamos comenzando un proyecto en el que tendremos que escribir analizadores para un montón de formatos de archivos binarios, cada uno de los cuales representa datos muy similares (series de valores de tiempo de diferentes dispositivos de medición).

Ya que estamos empezando desde cero, me gustaría hacerlo bien, y veo dos posibles enfoques:

  1. escriba analizadores binarios dedicados y de cosecha propia para cada formato por separado, o

  2. representa formatos binarios utilizando una gramática y luego usa algunos algoritmos estándar para el análisis / tokenización léxica.

Cuando busco consejos sobre cómo crear un analizador, encuentro que la mayoría de los hombres abogan por este último enfoque. Sin embargo, no tengo mucha experiencia con las gramáticas y los idiomas formales, y me temo que podría haber una curva de aprendizaje antes de obtener resultados.

Entonces, básicamente tengo estas preguntas:

  • ¿Cuál es el problema con la codificación de analizadores "a mano"?
  • ¿Existe un "límite de tamaño" práctico de un problema cuando vale la pena invertir en aprender el "enfoque formal"?
  • La mayoría de los ejemplos de análisis se centran en archivos textuales. ¿Cuál es la buena manera de especificar la gramática para un analizador binario?
pregunta Lou 11.07.2012 - 18:19

2 respuestas

4
  

No tengo mucha experiencia con gramáticas formales e idiomas, y   Temo que pueda haber una curva de aprendizaje antes de que obtengamos resultados.

Pasa un par de tardes construyendo un proyecto simple para probarlo. Dado que debe admitir "un montón" de formatos, es una buena apuesta que su inversión en aprender a usar herramientas que hacen exactamente lo que necesita se pagará rápidamente.

  

¿Cuál es el problema con la codificación de analizadores "a mano"?

Los problemas son principalmente:

  • escribir y mantener analizadores a mano requiere mucho tiempo, es difícil y es propenso a errores

  • escribir el código por ti mismo significa que hay otra capa de direccionamiento indirecto entre las dos cosas que te interesan: el formato y el analizador. Si el analizador no funciona bien, hay que mirar el código para descubrir por qué. Si puede especificar el formato como gramática, debería ser más fácil ver dónde está el problema (o evitar los problemas en primer lugar).

  

¿Existe un "límite de tamaño" práctico de un problema cuando vale la pena   invertir en aprender el "enfoque formal"?

Sospecho que la ubicación de la línea depende de tu situación. Codificar los analizadores a mano siempre se sentirá más fácil si no conoces ninguna otra forma. A medida que se sienta más cómodo con herramientas como flex y bison (o lo que elija), la línea se moverá.

  

La mayoría de los ejemplos de análisis se centran en archivos de texto. ¿Cuál es la buena manera de   ¿Especificar gramática para un analizador binario?

No creo que ese sea el caso. Por ejemplo, flex le permite especificar caracteres de entrada en términos de valores octales o hexadecimales .

    
respondido por el Caleb 11.07.2012 - 20:12
3

Dependiendo de la complejidad de sus formatos de archivo, sospecho que sería mejor que escribiera una biblioteca de análisis de utilidades y escribiera sus lexers / parsers a mano. He hecho esto antes para analizar los registros de BAF de los interruptores del teléfono y puede hacer funcionar el marco básico con bastante rapidez (un par de días). Si ya estuviera familiarizado con herramientas de análisis como flex y bison, entonces apoyaría la sugerencia de Caleb, pero como no lo está, le sugiero que se limite a lo que sabe. Supongo que nadie en su equipo está familiarizado con las herramientas de análisis, por lo que todos deberían poder mantener el código en el futuro (no hay un 'punto único de falla' cuando surge un error de análisis / error).

    
respondido por el TMN 11.07.2012 - 20:44

Lea otras preguntas en las etiquetas