我想知道是否有办法在Parsec停止解析后从Parsec获得剩余输入,无论是成功还是失败的解析,也许是这个签名:
parseRemaining :: Stream s Identity t => Parsec s () a -> SourceName -> s -> (s, Either ParseError a)
我们获得的不是Either ParseError a
,而是获得剩余的Stream s
答案 0 :(得分:1)
您可以使用getInput
,它是一个返回剩余输入的解析器。
答案 1 :(得分:0)
我在Parsec的内部挖掘了一下,我无法找到一种简单的方法来恢复状态信息(包含流)。
临时解决方案是检查您收到的错误,然后使用其位置信息来推断解析停止的位置。 (当然,只有当您的流支持搜索时,这才有效。)
答案 2 :(得分:0)
看看Megaparsec
- Parsec的现代分支,从版本4.2.0开始,它允许提供
解析开始时的自定义状态,并在最后提取解析器状态(它
如果解析器成功或失败,则无关紧要)。这允许部分解析
输入,恢复解析,指定非标准的初始文本位置,
等等
runParser'
和
runParserT'
披露:我是Megaparsec的作者之一。