解析二进制文件格式中使用 attoparsec 的示例?

7

之前有人向我建议使用attoparsec来解析复杂的二进制文件格式。虽然我可以找到attoparsec解析HTTP的例子,但这基本上是基于文本的,我找不到一个实际解析二进制文件的例子,例如TCP数据包、图像文件或mp3。能否有人发布一些代码或指向一些使用attoparsec进行此操作的代码?

1个回答

8

目前很少或没有 attoparsec 用于解析二进制格式的示例,因为 parsec 风格的组合器解析主要是针对文本格式,而不是二进制格式(尽管这没有什么好的理由)。

对于直接的二进制解析,请参阅 Data.Binary,例如:

以及《Real World Haskell》中的示例。

目前 attoparsec 的主要示例是 RFC2616 解析器(HTTP)。


感谢“没有好的理由”的评论,因为我不明白为什么解析器更适合文本而不适合二进制。在我看来,同样有道理的是,二进制文件可以有多条路径并需要回溯等操作。 - me2
当然,问题是 attoparsec 太新了,你将不得不独自摸索。像其他人一样使用 Data.Binary 就行了,这样你现在就完成了 :) - Don Stewart
那个链接是针对Parsec版本的,Attoparsec版本在这里:http://bitbucket.org/bos/attoparsec/src/tip/examples/RFC2616.hs。 - Dan Dyer
1
Combinatorrent拥有一个attoparsec比特流解析器:http://github.com/jlouis/combinatorrent/blob/master/src/Protocol/Wire.hs#L171并且旁边还有一个cereal-parser,供您娱乐。 - I GIVE CRAP ANSWERS
@donStewart 链接已经失效了,您能修复一下吗?这篇文章真的很有用。 - mariop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接