gpt4 book ai didi

haskell - Parsec:消耗所有输入

转载 作者:行者123 更新时间:2023-12-03 21:19:06 25 4
gpt4 key购买 nike

我对 Parsec 的一个常见问题是,如果无效输入出现在“正确”的位置,它往往会忽略它。

作为一个具体的例子,假设我们有 integer :: Parser Int ,我写

expression = sepBy integer (char '+')

(暂时忽略空白问题。)

这可以正确解析“123+456+789”之类的内容。但是,如果我输入“123+456-789”,它会愉快地忽略非法的“-”字符和表达式的结尾部分;我实际上想要一条错误消息告诉我有关无效输入的信息,而不仅仅是让它默默地忽略该部分。

我理解为什么会发生这种情况;我不确定如何解决它。设计使用所有提供的输入并仅在所有输入都是有效表达式时才成功的解析器的一般方法是什么?

最佳答案

它实际上非常简单——只要确保它后面跟着 eof :

parse (expression <* eof) "<interactive>" "123+456-789"
eof 匹配输入的结尾,即使输入只是一个字符串而不是文件。

显然,这只在解析器的顶层才有意义。

关于haskell - Parsec:消耗所有输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16209278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com