ANTLR é uma ferramenta adequada para serializar / desserializar um formato de dados binário?

StackOverflow https://stackoverflow.com/questions/517004

Pergunta

Eu preciso ler e escrever octeto córregos para enviar por várias redes para se comunicar com medidores elétricos inteligentes. Não é um padrão ANSI, ANSI C12.19, que descreve o formato de dados binário. Enquanto o formato de dados não é excessivamente complexa do padrão é muito grande (mais de 500 páginas), em que ele descreve muitos tipos distintos. O padrão está completamente descrita por uma gramática EBNF. Estou pensando em utilizar ANTLR para ler a gramática EBNF ou uma versão modificada do mesmo e criar C # classes que podem ler e escrever o fluxo de octeto.

Este é um bom uso de ANTLR?

Se assim for, o que eu preciso fazer para ser capaz de utilizar ANTLR 3.1? De pesquisar os arquivos de grupos de notícias, parece que eu preciso para implementar um novo fluxo que pode ler bytes em vez de caracteres. É que todos ou eu teria que implementar um derivado Lexer bem?

Se ANTLR pode me ajudar a ler / analisar o fluxo pode também me ajudar a escrever o stream?

Graças.

dan finucane

Foi útil?

Solução

Este assunto vem à tona de tempos em tempos na lista ANTLR de discussão. A resposta é normalmente não, porque formatos de arquivos binários são muito regular e é apenas não vale a sobrecarga.

Outras dicas

Você pode dar uma olhada em Ragel . É uma máquina de estado de compilador / léxico que é útil para a implementação de protocolos sobre-o-arame. Eu li relatos de que ele gera um código muito rápido. Se você não precisa de um motor de analisador e modelo, ragel tem menos sobrecarga do que ANTLR. Se você precisa de um parser full-blown, AST, e apoio bom modelo de motor, ANTLR pode ser uma escolha melhor.

Parece-me que ter uma gramática dá-lhe uma perna tremendo para cima.

ANTLR 3.1 tem características StringTemplate e geração de código que são separadas da análise / léxico, para que possa decompor o problema dessa forma.

Parece ser um vencedor para mim, vale a pena tentar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top