我阅读了很多有关Haskell Parser组合器的信息,发现了很多主题,例如:

  • 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 CombinatorsParser Generators进行了比较。

    我想问您哪种Parser Combinator最适合以下条件:
  • 我想对用户
  • 的错误(包括错误恢复)和消息进行很好的控制
  • 我希望能够为解析器提供一小部分文本(不是一次全部文件)
  • 我希望能够很好地重新设计语法(我目前正在开发语法,因此“工作很不错”很重要”。
  • 最终解析器应该很快(性能很重要,但不如1-3点那么大)。

  • 我发现,最受欢迎的解析器组合器是:
  • Parsec
  • uu-parsinglib
  • attoparsec
  • 最佳答案

    我想肯定会选择Parsec,这是为什么:

    Attoparsec的设计旨在快速使用,但缺少对您在Parsec中收到的错误消息的强大支持,因此这是您的第一点优势。

    我使用解析器组合器库的经验是,无论是在GHCi中还是在测试中,对解析器的各个部分进行测试都是非常容易的,因此第二点确实让所有这些人都满意。最后,Attoparsec和Parsec的速度非常快。

    最后,Parsec的使用时间最长,并且具有许多有用和高级的功能。这意味着一般的可维护性将变得更加容易,Parsec中有更多示例,并且更多人熟悉它。 uu-parsinglib绝对值得您花时间探索,但是出于这些原因,我建议先熟悉Parsec是更好的方法。 (Alex也是与Parsec或其他方式一起使用的最推荐的词法分析器,但我自己并未使用它。)

    关于parsing - Haskell解析器组合器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18028220/

    10-12 23:13