Haskell的parsec库中的选择运算符

时间:2013-06-02 10:10:43

标签: haskell text-parsing parsec

Parsec文件说明了以下关于<|>

的内容
  

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

如何实施<|>的反向跟踪版本?当p消耗任何输入时,它会回溯,因此q可以再次应用于完整输入。

1 个答案:

答案 0 :(得分:2)

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

但请注意,过度使用try会影响解析器的性能。请考虑left factoring您的语法,以尽可能消除公共前缀。