得到Parsec的左输入

时间:2015-09-27 23:13:32

标签: haskell parsec

我想知道是否有办法在Parsec停止解析后从Parsec获得剩余输入,无论是成功还是失败的解析,也许是这个签名:

parseRemaining :: Stream s Identity t => Parsec s () a -> SourceName -> s -> (s, Either ParseError a)

我们获得的不是Either ParseError a,而是获得剩余的Stream s

3 个答案:

答案 0 :(得分:1)

您可以使用getInput,它是一个返回剩余输入的解析器。

答案 1 :(得分:0)

我在Parsec的内部挖掘了一下,我无法找到一种简单的方法来恢复状态信息(包含流)。

临时解决方案是检查您收到的错误,然后使用其位置信息来推断解析停止的位置。 (当然,只有当您的流支持搜索时,这才有效。)

答案 2 :(得分:0)

看看Megaparsec - Parsec的现代分支,从版本4.2.0开始,它允许提供 解析开始时的自定义状态,并在最后提取解析器状态(它 如果解析器成功或失败,则无关紧要)。这允许部分解析 输入,恢复解析,指定非标准的初始文本位置, 等等 runParser'runParserT'

披露:我是Megaparsec的作者之一。