Haskell Parser组合器

时间:2013-08-03 01:05:21

标签: parsing haskell parsec parser-combinators attoparsec

我正在阅读很多关于Haskell Parser Combinators的内容,并发现了很多主题,如:

但所有这些主题都会将Parser CombinatorsParser Generators进行比较。

我想问你哪个Parser Combinator最适合以下条件:

  1. 我希望能够很好地控制错误(包括错误恢复)和用户
  2. 的消息
  3. 我希望能够用一小部分文本(一次不是整个文件)来提供解析器
  4. 我希望能够很好地重新设计语法(我目前正在开发语法,所以“很好的工作”很重要“
  5. 最终解析器应该很快(性能很重要,但不如第1-3点那么多)。
  6. 我发现,最流行的解析器组合是:

2 个答案:

答案 0 :(得分:3)

我肯定会说与Parsec一起去,为什么:

Attoparsec旨在快速使用,但缺乏对您在Parsec中获得的错误消息的强大支持,因此这是您的第一点胜利。

我使用解析器组合子库的经验是,在GHCi或测试中测试解析器的各个部分非常容易,所以第二点真正满足了所有这些。最后,Attoparsec和Parsec非常快。

最后,Parsec已经存在时间最长,并且具有许多有用和高级的功能。这意味着一般可维护性将变得更容易,Parsec中有更多示例,更多人熟悉它。 uu-parsinglib绝对值得探索,但我建议首先熟悉Parsec是因为这些原因更好的课程。 (Alex也是与Parsec一起使用的最推荐的词法分析器,否则我自己没有使用它。)

答案 1 :(得分:2)

我会在这里发布我的答案,以防有人发现这个问题。目前的答案已经过时了。

最好使用megaparsec包作为解析器组合库。它是一个现代化的生产就绪型图书馆。它的README.md包含与其他解析器组合子库的完美比较: