Parsec
文件说明了以下关于<|>
这个组合器实现了选择。解析器p&lt; |&gt;首先应用p。 如果成功,则返回p的值。如果p没有失败 消耗任何输入,尝试解析器q。该组合器是定义的 等于MonadPlus类的mplus成员和 (Control.Applicative。&lt; |&gt;)Control.Applicative.Alternative的成员。
如何实施<|>
的反向跟踪版本?当p
消耗任何输入时,它会回溯,因此q
可以再次应用于完整输入。
答案 0 :(得分:2)
要启用回溯功能,您只需使用try
,例如try p <|> q
。
但请注意,过度使用try
会影响解析器的性能。请考虑left factoring您的语法,以尽可能消除公共前缀。