Ist ANTLR ein geeignetes Instrument zur Serialisierung / Deserialisierung ein binäres Datenformat?

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

Frage

Ich brauche zu lesen und Oktett-Streams schreibt über verschiedene Netzwerke senden mit intelligenten Stromzählern zu kommunizieren. Es ist ein ANSI-Standard, ANSI C12.19, die das binäre Datenformat beschreibt. Während das Datenformat nicht übermäßig komplex ist in dem Standard ist sehr groß (500+ Seiten), dass es viele verschiedene Arten beschrieben. Der Standard wird durch eine Grammatik EBNF vollständig beschrieben. Ich erwäge ANTLR Verwendung die EBNF Grammatik oder eine modifizierte Version davon zu lesen und C # Klassen erstellen, die den Oktett-Stream lesen und schreiben können.

Ist das eine gute Verwendung von ANTLR?

Wenn ja, was muss ich tun, um zu sein ANTLR 3.1 nutzen? Von der Suche scheint die Newsgroup-Archiven es, wie ich einen neuen Stream implementieren müssen, die Bytes anstelle von Zeichen lesen kann. Ist das alles, oder hätte ich auch einen Lexer-Derivat implementieren?

Wenn ANTLR kann mir helfen, lesen / analysieren den Stream kann es mir auch helfen, den Stream zu schreiben?

Danke.

dan finucane

War es hilfreich?

Lösung

Dieses Thema kommt von Zeit zu Zeit auf der ANTLR Mailingliste. Die Antwort ist in der Regel nicht, weil Binärdateiformate sehr regelmäßig und es ist einfach nicht der Aufwand lohnt sich.

Andere Tipps

Sie können einen Blick auf Ragel . Es ist eine Zustandsmaschine Compiler / Lexer, der zur Implementierung on-the-Wire-Protokolle geeignet ist. Ich habe Berichte gelesen, dass es sehr schnell Code generiert. Wenn Sie nicht über einen Parser und Template-Engine, hat ragel weniger Overhead als ANTLR. Wenn Sie einen ausgewachsenen Parser benötigen, AST, und schöne Template-Engine-Unterstützung, ANTLR könnte eine bessere Wahl sein.

Es scheint mir, dass eine Grammatik, die gibt Ihnen ein enormes Bein.

ANTLR 3.1 verfügt über Funktionen String und Codegenerierung, die aus der Analyse / lexing getrennt sind, so dass Sie das Problem auf diese Weise zersetzen können.

Es scheint wie ein Gewinner zu mir, ein Versuch wert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top