5

我一直在尝试在 haskell 中实现协议解析器,而且我对这种语言还很陌生,尤其是在 monad 方面。我一直在使用 binary-0.5.0.2 并描述了我的协议的标头和所有有效负载。我要解析的消息如下所示: header + (payload A, payload B, ..) 其中 header 中的一个字段指定消息的有效负载类型。

我已经成功解析了字节串中的第一条消息,但是对于如何读取下一条消息,丢弃在处理第一条消息时读取的字节感到茫然。

这可能相当模糊,但我宁愿在通用解析器上获得输入,也不愿让我丑陋的代码以这种方式工作。

谢谢您的帮助

4

2 回答 2

6

只需使用一系列解析操作,它们就会在执行过程中消耗输入。

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

runGetStatefrom返回的元组的第二个元素Data.Binary.Get是剩余的ByteString。您可以简单地继续应用您的解析器,直到出现错误或用完字节。

于 2011-04-01T19:28:43.440 回答