我正在尝试使用 Parsec 包在 Haskell 中编写解析器。输入规则的一部分要求解析器匹配规则选项。规则中可能有多个规则匹配,但至少有一个规则必须匹配,否则解析器会产生错误。
让我举个例子。假设我们有两个名为first
和的 Parsec 规则more
。它可能是:
- 输入匹配
first
后跟more
; - 输入仅匹配
first
;或者那个 - 输入仅匹配
more
。
在任何情况下,至少有一个first
或more
必须匹配。关于如何做到这一点的任何想法?我考虑过使用,<|>
但如果我理解正确,它只会匹配其中一个规则(即第一个成功的规则)。
编辑:
澄清:如果两者都first
匹配more
,则必须返回两者的结果。如果只有一个匹配,另一个的返回值可以是一些空值,如Nothing
,但不允许同时Nothing
返回first
和more
。