ANTLRは、バイナリデータ形式をデシリアライズ/シリアライズするための適切なツールですか?
質問
私は、スマート電気メーターと通信するために、様々なネットワークを介して送信するためのオクテットストリームを読み書きする必要があります。バイナリデータ形式を記述するANSI規格ANSI C12.19が、あります。データ形式が過度に複雑ではありませんが、それは多くの異なるタイプを説明している標準は、(500+ページ)非常に大きいです。標準は完全にEBNF文法で記述されています。私はEBNF文法またはそれの修正版を読んで、オクテットストリームを読み書きすることができますC#クラスを作成するために、ANTLRを利用し検討しています。
これはANTLRの良い使用ですか?
もしそうなら、どのような私はANTLR 3.1を利用できるように行う必要があるのですか?私は文字のかわりにバイトを読み取ることができる新しいストリームを実装する必要がありますようにニュースグループアーカイブの検索から、それがそうです。すべてのことですか私もレクサー誘導体を実装しなければならないでしょう?
ANTLRは私が読むことができます/ストリームを解析し、それはまた、私は、ストリームを書き込むことができますか?
感謝します。
ダンfinucane
解決
この主題はANTLRメーリングリストで随時アップします。バイナリファイル形式は非常に規則的であり、それだけでオーバーヘッド価値はないので答えは、通常はありませんです。
他のヒント
あなたは Ragel のを見てかかることがあります。これは、オン・ワイヤープロトコルを実装するために有用であるステートマシンコンパイラ/レクサーです。私はそれが非常に高速なコードを生成するレポートを読みました。あなたはパーサとテンプレートエンジンを必要としない場合、ragelはANTLRよりもオーバーヘッドが少ないです。あなたが本格パーサ、AST、と素敵なテンプレートエンジンのサポートが必要な場合は、ANTLRは、より良い選択かもしれません。
文法を持つことは、あなたに多大な脚アップを与えるように私には思えます。
ANTLR 3.1は、あなたが問題をそのように分解することができるので、解析/字句から分離されStringTemplateとコード生成機能を備えています。
私に勝者、試してみる価値ます。
のように思えます