Attoparsec 解析失败,但不应该使用适当的回溯



我正在使用Attoparsec,据说默认情况下它会回溯。但是,以下行:

parseOnly  (string "foo" *> many1 anyChar <* string "bar") "fooxxxbar"

失败,并显示:

Left "not enough input"

为什么会这样?如果many1 anyChar决定只解析三个字符(xxx(,它应该是成功的。它应该考虑在某个时候这样做,因为回溯,不是吗?

使用Attoparsec执行等效/foo(.*)bar/正则表达式的正确方法是什么?

我正在使用Attoparsec,据说默认情况下会回溯。

差一点。Attoparsec确实支持回溯,但仅在某些明确的情况下(文档说它支持(。它的目的是高性能解析,不出所料,这与回溯效果不佳。

您正在寻找manyTillmanyTill'。请注意,文档中提到了回溯行为。

ghci> manyTill1 p e = (:) <$> p <*> manyTill p e 
ghci> parseOnly (string "foo" *> manyTill1 anyChar (string "bar")) "fooxxxbar"
Right "xxx"

相关内容

最新更新