gpt4 book ai didi

haskell - 秒差距 vs Yacc/Bison/Antlr : Why and when to use Parsec?

转载 作者:行者123 更新时间:2023-12-03 07:02:57 26 4
gpt4 key购买 nike

我是 Haskell 和 Parsec 的新手。看完Chapter 16 Using Parsec of Real World Haskell ,一个问题出现在我的脑海中:为什么以及什么时候 Parsec 比 Yacc/Bison/Antlr 等其他解析器生成器更好?

我的理解是 Parsec 创建了一个很好的 DSL 来编写解析器,而 Haskell 让它变得非常简单和富有表现力。但解析是这样一种标准/流行的技术,值得拥有自己的语言,输出到多种目标语言。那么我们什么时候应该使用 Parsec 而不是从 Bison/Antlr 生成 Haskell 代码?

这个问题可能超出了技术范围,进入了行业实践领域。当从头开始编写解析器时,与 Bison/Antlr 或类似的东西相比,选择 Haskell/Parsec 有什么好处?

顺便说一句:我的问题与 this one 非常相似但那里没有得到令人满意的答复。

最佳答案

您列出的工具之间的主要区别之一是 ANTLR、Bison 及其 friend 是解析器生成器,而 Parsec 是解析器组合器库。

解析器生成器读取语法描述并输出解析器。通常不可能将现有语法组合成新语法,当然也不可能将两个现有生成的解析器组合成新解析器。

解析器组合器 OTOH 不执行任何操作,只是将现有解析器组合成新的解析器。通常,解析器组合器库附带几个简单的内置解析器,可以解析空字符串或单个字符,并且它附带一组组合器,它们采用 1 个或多个解析器并返回一个新的解析器,例如,解析原始解析器的序列(例如,您可以组合 d 解析器和 o 解析器形成 do 解析器),交替原始解析器(例如 0 解析器和 1 解析器到 0|1 解析器)或多次解析原始解析器(重复)。

这意味着,例如,您可以采用现有的 Java 解析器和现有的 HTML 解析器,并将它们组合成 JSP 解析器。

大多数解析器生成器不支持这一点,或者仅以有限的方式支持它。解析器组合器 OTOH 支持这一点,不支持其他任何东西。

关于haskell - 秒差距 vs Yacc/Bison/Antlr : Why and when to use Parsec?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5055370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com