【发布时间】:2013-08-03 01:05:21
【问题描述】:
我阅读了很多有关 Haskell Parser Combinators 的内容,发现了很多主题,例如:
- Parsec vs Yacc/Bison/Antlr: Why and when to use Parsec?
- Which Haskell parsing technology is most pleasant to use, and why?
- Parsec or happy (with alex) or uu-parsinglib
- Choosing a Haskell parser
- What is the advantage of using a parser generator like happy as opposed to using parser combinators?
但所有这些主题都将Parser Combinators 与Parser Generators 进行比较。
我想问你Parser Combinator 中的哪一个最适合以下条件:
- 我希望对用户的错误(包括错误恢复)和消息进行良好的控制
- 我希望能够为解析器提供一小部分文本(而不是一次整个文件)
- 我希望能够很好地重新设计语法(我目前正在开发语法,所以“很好的工作”很重要”
- 最终的解析器应该很快(性能很重要,但不如第 1-3 点那么重要)。
我发现,最流行的解析器组合器是:
【问题讨论】:
-
我只知道 parsec,它是一个单子解析器。它相当容易使用,并且您可以很好地控制错误。
-
我只使用过
attoparsec,所以我不了解 Parsec 的第一手资料。 attoparsec 以速度极快而著称,但在错误消息方面却不是那么好。它针对前端用户永远不会看到错误消息的后端解析需求。 -
@AndrewMyers,我同意,我已经使用 attoparsec 来处理这类事情,它非常快速和简单(尤其是对于简单的语法)。它没有很多花哨的功能,比如 hackage 上的普通 parsec 库,但它支持
Text,这太棒了。 -
attoparsec错误信息完全无法使用,但速度非常快。 -
uu-parsinglib是,据我了解,为 1、2 和 3 提供了良好的配置,一直到向用户建议正确的语法(甚至自动输入它,尽管这可以烦人)。最好通过阅读"Combinator Parsing: A Short Tutorial" 来获得文档。
标签: parsing haskell parsec parser-combinators attoparsec