Boost Spiritを使用してバイトストリームデータを解析できますか?
-
08-07-2019 - |
質問
Spirit(Boost C ++ライブラリの一部)を使用して、ストリームからのバイナリデータを解析できますか?たとえば、ソケットからのデータを構造、バイト、および個々のビットフラグに解析するために使用できますか?ありがとう!
解決
Boost Spiritでは、 Extended Backus–を使用してパーサーを定義できます。 テンプレートメタプログラミングを使用したNaur Form(EBNF)構文。非常に柔軟で、カスタマイズ可能な解析プロセスのすべてのフェーズで抽象クラスを使用します。バイナリデータストリームを処理するには、デフォルトのタイプがテキスト入力用に調整されているため、カスタムスキャナークラスを実装する必要があります。 スキャナーと解析セクションでさらに読むことができます。 Spiritユーザーガイドの
私の謙虚な意見では、バイナリデータストリームは手巻きのシリアル化コードで処理するのが最適です。 Spiritは、マークアップ言語やスクリプト言語のような整形式の文法を対象としています。たとえば、 Luaの完全な構文はEBNFで提供されています。そのため、Spiritを使用してカスタムパーサーを構築することは理にかなっています。一方、文脈自由文法も存在します。
補遺
他のヒント
Spirit2がリリースされたばかりで、バイナリを解析する機能があります。 こちらをご覧ください。
所属していません StackOverflow