5

私は Haskell でプロトコル パーサーを実装しようとしてきましたが、特にモナドに関しては、この言語にかなり慣れていません。私は binary-0.5.0.2 を使用しており、プロトコルのヘッダーとすべてのペイロードについて説明しました。解析したいメッセージは、次のようなものです: ヘッダー + (ペイロード A、ペイロード B、..) ヘッダーのフィールドは、メッセージのペイロードのタイプを指定します。

バイト文字列の最初のメッセージの解析に成功しましたが、最初のメッセージの処理で読み取られたバイトを破棄して、次のメッセージを読み取る方法に途方に暮れています。

これはかなりあいまいかもしれませんが、このように機能するように醜いコードを変更するよりも、一般化されたパーサーで入力を取得したいと考えています。

助けてくれてありがとう

4

2 に答える 2

6

一連の解析操作を使用するだけで、進行中に入力が消費されます。

parseAll = do
    hdr <- parseHeader
    pa <- parsePayloadA
    pb <- parsePayloadB
    ...
于 2011-04-01T19:27:47.157 に答える
2

runGetStatefromによって返されるタプルの 2 番目の要素Data.Binary.Getは、残りのByteString. エラーが発生するか、バイトがなくなるまで、パーサーを適用し続けることができます。

于 2011-04-01T19:28:43.440 に答える