Kann Boost-Geist verwendet werden Byte-Stream-Daten zu analysieren?
-
08-07-2019 - |
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!
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 .