Haskell有許多開源的parser implementations。 Parsec似乎是文本解析的標準,而attoparsec似乎是二進制解析的流行選擇,但除此之外我不太瞭解。您選擇解析器實現時是否遵循特定的決策樹?你有沒有對圖書館的長處或弱點有所瞭解?選擇Haskell解析器
31
A
回答
49
你有幾個不錯的選擇。
對於字符串類型的輕質解析:
對於填料字節串解析,例如的HTTP headers。
對於實際的二進制數據,大多數人使用兩種:
主要是問問自己,底層字符串類型是什麼?
- 字符串?
- bytestring(嚴格)?
- bytestring(偷懶)?
- 統一text
這一決定在很大程度上決定了你會使用哪個分析器工具集。
問的第二個問題是:我是否已經有了數據類型的語法?如果是這樣,我就可以用得開心
而且很明顯自定義數據類型有很多種好現有的解析器:
9
只需添加到唐的職務:就個人而言,我很喜歡Text.ParserCombinators.ReadP(底座的一部分)的無 - 非常快速和容易的東西。特別是當Parsec看起來過度殺傷力時。
字節串版本有一個bytestringreadp庫,但它不包含Char8字節串,我懷疑attoparsec在這一點上是更好的選擇。
3
Bryan O'Sullivan的博客文章What’s in a parser? Attoparsec rewired (2/2)包含一個很好的性能基準,比較幾個實現以及比較內存使用的一些註釋。
4
我最近將一些代碼從Parsec轉換到Attoparsec。兩者都很有能力。
Attoparsec贏得了性能和內存佔用,但Parsec提供了更好的錯誤報告並且具有更完整的文檔。
相關問題
- 1. 解析器組合器選擇庫(haskell)
- 2. Haskell JSON解析器不解析對象
- 3. 解析器選擇標準
- 4. Haskell解析器到AST
- 5. 解析JSON haskell
- 6. Haskell,解析錯誤
- 7. Haskell日期解析
- 8. 選擇正確的IOS XML解析器
- 9. Perl - > HTML選擇解析器
- 10. 解析Nokogiri時消除CSS選擇器?
- 11. ID解析然後使用選擇器
- 12. 使用CSS選擇器解析Perl XML
- 13. 日期選擇器到解析日期
- 14. jQuery的:選擇器解析機制
- 15. Angular2 - 在組件選擇器上解析
- 16. Haskell解析器組合器Haskell標識符
- 17. 在Haskell中使用解析器組合器庫編寫的分析解析器
- 18. 選擇在Haskell
- 19. 使用Aeson(Haskell)解碼枚舉選擇
- 20. Haskell命令系統解析器
- 21. Haskell的哪個XML解析器?
- 22. JSON解析從Web服務器在Haskell
- 23. Haskell功能齊全的CSV解析器?
- 24. Haskell - 遞歸下降解析器
- 25. 爲haskell中的人編寫解析器
- 26. 解析器爲Haskell中的Data.ByteString.Lazy.Char8?
- 27. Haskell Parsec遇到的解析器[...]
- 28. 如何在Haskell中構建解析器
- 29. Haskell的XML拉式解析器
- 30. 解析Haskell圖表生成器錯誤
感謝您的詳細解答 – Keith 2010-06-19 22:18:07
非常棒的答案,非常感謝。 – Litherum 2012-03-25 05:57:53