parsing - Haskell 解析器组合器

标签 parsing haskell parsec parser-combinators attoparsec

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

但是所有这些主题都将解析器组合器解析器生成器进行比较。

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

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

我发现最流行的解析器组合器是:

最佳答案

我想说肯定会选择秒差距,原因如下:

Attoparsec 的设计目的是快速使用,但缺乏对 Parsec 错误消息的强大支持,因此这是您第一点的胜利。

我使用解析器组合器库的经验是,无论是在 GHCi 中还是在测试中测试解析器的各个部分都非常容易,因此它们都确实满足了第二点。最后,Attoparsec 和 Parsec 非常快。

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

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

相关文章:

Haskell 分析 - clock_gettime

Haskell 解析 : `many` combinator inside an `optional` combinator

parsing - Haskell/Parsec : how do I use Text. Parsec.Token with Text.Parsec.Indent(来自 indents 包)

c# - 拿一个字符串,把它变成一些数据库命令(C#)

python - 使用python(pyparsing)解析lexc

c++ - 评估 C++ 字符串中的表达式 : "Hi ${user} from ${host}"

haskell - 如何在不同类型上进行模式匹配?

haskell - `until` 是如何工作的?

解析 Haskell 自定义数据类型

php - 解析文本中的 bbcode youtube 标签并替换为包含视频 ID 的 html