2015-10-17 56 views
0

我想解析一个具有特定结构的二进制文件。我目前正在研究“attoparsec”软件包,但我觉得这个应用程序的级别太低。是否有比attoparsec更高级别的二进制解析包?

例如,为了在Int32读书,我必须这样做:

return 
    . (fromIntegral :: Word32 -> Int32) 
    . runGet getWord32le 
    . BS.fromStrict 
    =<< A.take 4 

我觉得这办法只是一个Int32太复杂了!但是,我真的很喜欢parsec式解析提供的框架,以便我可以用类似于语法本身的样式来定义语法。

是否有更高级别的二进制文件解析解决方案?理想情况下它是是基于attoparsec一个包,并具有辅助功能的各类值的阅读,像CharIntFloat

回答

1

你是否看了binary包?

+0

是的,我有。实际上'runGet'和'getWord32be'来自该包。我的意思是使用“binary”解析文件总是可能的,但是我错过了“attoparsec”中的'many','choice','*>'和'<|>'等,这使得构建复杂的解析逻辑变得更愉快。 – trVoldemort

+0

现在我想到了,也许我要求太多了。 – trVoldemort

+1

你真的需要回溯吗?通常二进制格式的设计,所以你不必。 – ErikR