获取 Parsec 的左输入
Get Parsec's left input
我想知道是否有办法在 Parsec 停止解析后从它获取剩余输入,无论是解析成功还是失败,也许这个签名:
parseRemaining :: Stream s Identity t => Parsec s () a -> SourceName -> s -> (s, Either ParseError a)
我们得到的不是 Either ParseError a
,而是另外得到剩余的 Stream s
您可以使用 getInput
,这是一个 returns 剩余输入的解析器。
我深入了解了 Parsec 的内部结构,但未能找到一种简单的方法来恢复状态信息(其中包含流)。
一个临时解决方案是检查您收到的错误,然后使用其位置信息推断解析停止的位置。 (当然,这只有在您的流支持搜索时才有效。)
看看Megaparsec
— Parsec 的现代分支,从 4.2.0 版开始它允许提供
在解析开始时自定义状态并在结束时提取解析器状态(它
解析器成功或失败都没有关系)。这允许部分解析
输入,恢复解析,指定 non-standard 初始文本位置,
等见
runParser'
和
runParserT'
.
披露:我是 Megaparsec 的作者之一。
我想知道是否有办法在 Parsec 停止解析后从它获取剩余输入,无论是解析成功还是失败,也许这个签名:
parseRemaining :: Stream s Identity t => Parsec s () a -> SourceName -> s -> (s, Either ParseError a)
我们得到的不是 Either ParseError a
,而是另外得到剩余的 Stream s
您可以使用 getInput
,这是一个 returns 剩余输入的解析器。
我深入了解了 Parsec 的内部结构,但未能找到一种简单的方法来恢复状态信息(其中包含流)。
一个临时解决方案是检查您收到的错误,然后使用其位置信息推断解析停止的位置。 (当然,这只有在您的流支持搜索时才有效。)
看看Megaparsec
— Parsec 的现代分支,从 4.2.0 版开始它允许提供
在解析开始时自定义状态并在结束时提取解析器状态(它
解析器成功或失败都没有关系)。这允许部分解析
输入,恢复解析,指定 non-standard 初始文本位置,
等见
runParser'
和
runParserT'
.
披露:我是 Megaparsec 的作者之一。