una serializar recorrer que objeto leer deserializar como cadena parsing antlr generator ebnf ragel

parsing - recorrer - serializar objeto c# xml



¿Es ANTLR una herramienta adecuada para serializar/deserializar un formato de datos binarios? (3)

Necesito leer y escribir secuencias de octetos para enviar a través de varias redes para comunicarse con medidores eléctricos inteligentes. Existe un estándar ANSI, ANSI C12.19, que describe el formato de datos binarios. Si bien el formato de datos no es excesivamente complejo, el estándar es muy grande (más de 500 páginas) ya que describe muchos tipos distintos. El estándar está completamente descrito por una gramática EBNF. Estoy considerando utilizar ANTLR para leer la gramática EBNF o una versión modificada de la misma y crear clases C # que puedan leer y escribir la secuencia de octetos.

¿Es este un buen uso de ANTLR?

Si es así, ¿qué debo hacer para poder utilizar ANTLR 3.1? Al buscar en los archivos del grupo de noticias, parece que necesito implementar una nueva secuencia que pueda leer bytes en lugar de caracteres. ¿Eso es todo o tendré que implementar un derivado de Lexer también?

Si ANTLR puede ayudarme a leer / analizar la transmisión, ¿también me puede ayudar a escribir la transmisión?

Gracias.

dan finucane


Este tema aparece de vez en cuando en la lista de correo de ANTLR. La respuesta suele ser no, porque los formatos de archivo binarios son muy regulares y no vale la pena la sobrecarga.


Me parece que tener una gramática te da una tremenda ventaja.

ANTLR 3.1 tiene StringTemplate y características de generación de código que son independientes del análisis sintáctico / lexing, por lo que puede descomponer el problema de esa manera.

Me parece un ganador, vale la pena intentarlo.


Puede echarle un vistazo a Ragel . Es un compilador / lexer de máquina de estado que es útil para implementar protocolos en línea. He leído informes de que genera un código muy rápido. Si no necesita un analizador y un motor de plantillas, Ragel tiene menos sobrecarga que ANTLR. Si necesita un analizador en toda regla, AST y un buen soporte para el motor de plantillas, ANTLR podría ser una mejor opción.