2011-04-01 254 views
5

我一直在嘗試在haskell中實現一個協議解析器,而且我對這門語言很陌生,特別是涉及單子時。我一直在使用binary-0.5.0.2,並描述了協議的頭部和所有有效載荷。我想要解析的消息如下所示:header +(payload A,payload B,..)其中頭中的字段指定消息具有的有效負載類型。Haskell二進制解析

我已經成功地解析了字節串中的第一條消息,但是在如何閱讀下一條消息時丟失了在處理第一條消息時讀取的字節。

這可能相當含糊,但我寧願在廣義解析器上輸入,而不是讓我的醜陋代碼改變以這種方式工作。

感謝您的幫助

回答

6

只需使用解析操作的順序和他們走,他們將消耗輸入。

parseAll = do 
    hdr <- parseHeader 
    pa <- parsePayloadA 
    pb <- parsePayloadB 
    ... 
2

Data.Binary.GetrunGetState返回的元組的第二個要素是剩餘ByteString。您可以簡單地繼續應用分析器,直到出現錯誤或者耗盡字節。