vlambda博客
学习文章列表

Haskell 解析入门系列

原文:Parsing with Haskell (https://mmhaskell.com/parsing)

Haskell 是一种非常适合所有解析需求的出色语言。该语言的函数特性使得将不同的构建块组合在一起变得非常容易,而无需担心令人讨厌的副作用和不可预见的后果。由于该语言非常适合解析,因此业界已存在好几个不同的库。它们的实现方式略有不同。在本系列中,我们将探索其中的三个库。

第 1 部分:Gherkin 语法

在开始探讨任何解析库的细节之前,我们需要知道解析的目标是什么!在本系列的第 1 部分中,将学习 Gherkin (http://docs.behat.org/en/v2.5/guides/1.gherkin.html) 语法,它将作为我们在整个系列中的示例语言。我们还将研究有关 Haskell 的一些特性,正是这些特性使其成为如此出色的解析语言。

第 2 部分:Regex Applicative Parsing

在本系列的第 2 部分中,我们将迈出解析代码的第一步。我们将深入研究 Regex Applicative Parsing (https://hackage.haskell.org/package/regex-applicative) 库。这个库可以使我们在不使用 monad 的情况下解析任何常规语言!当然,我们必须首先熟悉一些鲜为人知的 applicative 运算符。但是,当我们构建解析器时,我们会看到一些关于如何将它们组合在一起的非常巧妙的想法。

第 3 部分:Attoparsec

在第 3 部分中,我们将探索 Attoparsec (https://hackage.haskell.org/package/attoparsec) 库。这将是我们首次看到解析的 monadic 方式。在我们的程序中引入 monad 总是会带来一定的认知开销。但是我们也将看到,得到的好处是,我们的代码可以更清晰地描述意图。

第 4 部分:Megaparsec

在本系列的第 4 部分也是最后一部分中,我们将全面了解 Megaparsec (https://hackage.haskell.org/package/megaparsec)。这个库与 Attoparsec 有很多共同之处,但为一些很酷的附加功能引入了一些额外的特性!