Est-ANTLR un outil approprié pour linéariser / désérialiser un format de données binaires?

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

Question

Je dois lire et écrire des flux d'octets à envoyer sur différents réseaux pour communiquer avec les compteurs électriques intelligents. Il existe une norme ANSI, ANSI C12.19, qui décrit le format de données binaires. Bien que le format de données ne sont pas la norme trop complexe est très grand (plus de 500 pages) en ce qu'elle décrit de nombreux types distincts. La norme est entièrement décrit par une grammaire EBNF. Je songe à faire appel ANTLR pour lire la grammaire EBNF ou une version modifiée de celui-ci et créer des classes C # qui peut lire et écrire le flux d'octets.

Est-ce un bon usage de ANTLR?

Si oui, que dois-je faire pour être en mesure d'utiliser ANTLR 3.1? A partir de la recherche dans les archives de newsgroup il semble que je dois mettre en œuvre un nouveau flux qui peut lire des octets au lieu de caractères. Est-ce que tout ou devrais-je mettre en œuvre un dérivé Lexer ainsi?

Si ANTLR peut me aider à lire / analyser le flux peut-il me aider aussi écrire le flux?

Merci.

dan Finucane

Était-ce utile?

La solution

Ce sujet vient de temps en temps sur la liste de diffusion de ANTLR. La réponse est généralement non, parce que les formats de fichiers binaires sont très réguliers et il est tout simplement pas la peine les frais généraux.

Autres conseils

Vous pouvez jeter un oeil à Ragel . Il est une machine d'état compilateur / lexer qui est utile pour la mise en œuvre des protocoles sur le fil. J'ai lu des rapports qu'il génère un code très rapide. Si vous n'avez pas besoin d'un moteur d'analyse syntaxique et modèle, ragel a moins de frais généraux que ANTLR. Si vous avez besoin d'un analyseur complet, AST et agréable support moteur modèle, ANTLR pourrait être un meilleur choix.

Il me semble que d'avoir une grammaire vous donne une jambe énorme vers le haut.

ANTLR 3.1 a StringTemplate et fonctionnalités de génération de code qui sont séparés de l'analyse syntaxique / lexing, de sorte que vous pouvez décomposer le problème de cette façon.

On dirait un gagnant pour moi, la peine d'essayer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top