3

Parsec文件说以下关于<|>

这个组合器实现了选择。解析器 p <|> q 首先应用 p。如果成功,则返回 p 的值。如果 p 在没有消耗任何输入的情况下失败,则尝试解析器 q。这个组合器被定义为等于 MonadPlus 类的 mplus 成员和 Control.Applicative.Alternative 的 (Control.Applicative.<|>) 成员。

如何实现回溯版本<|>p它在消耗任何输入时回溯,这样q可以再次将其应用于完整输入。

4

1 回答 1

2

要启用回溯,您只需使用try,例如try p <|> q

但是,请注意,过度使用try会损害解析器的性能。考虑在可能的情况下对语法进行左分解,以消除常见的前缀。

于 2013-06-04T03:56:56.620 回答