Frage

Kann Geist (Teil der Boost C ++ Bibliothek) verwendet werden, um binäre Daten aus einem Stream kommen zu parsen? Zum Beispiel kann es verwendet werden, um Daten zu analysieren, von einem Socket in Strukturen, Bytes kommen, und einzelne Bitflags? Dank!

War es hilfreich?

Lösung

Boost-Geist ermöglicht einen Parser Erweiterte Backus-Naur-Form unter Verwendung definiert werden (EBNF) Syntax mit Vorlage Meta-Programmierung . Es ist sehr flexibel und verwendet abstrakte Klassen in allen Phasen des Analyseprozesses, die angepasst werden können. Um einen binären Datenstrom zu verarbeiten, würden Sie benutzerdefinierte Scanner Klassen implementieren, da die Standardtypen für die Texteingabe abgestimmt sind. Sie können noreferrer"> den Scanner und Parsing Abschnitt weiter in Führer Geist Benutzer.

In meiner bescheidenen Meinung nach, binären Datenströme werden am besten mit der Hand gerollt Serialisierungscode behandelt. Geist wird mehr in Richtung gut ausgebildete Grammatiken wie Aufschlag oder Skriptsprachen ausgerichtet. Zum Beispiel Die vollständige Syntax von Lua in EBNF vorgesehen ist. So könnte es Sinn macht Geist zu verwenden, um einen benutzerdefinierten Parser zu bauen. Auf der anderen Seite, eine proprietäre serielle Datenverbindung mit Synchronisationsbytes und CRC-Bracketing-Meldungen würde viel mehr Arbeit erfordert nur die EBNF, wenn ein kontextfreie Grammatik besteht auch für sie.

Nachtrag

Die neueste Version von Boost-Geist enthält Funktionalität mit binären Daten für den Umgang.

Andere Tipps

Spirit2, nur freigegeben, es ist für binäre Parsen. Check this out .

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