You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Parsec如何优化between组合子的错误提示信息

解决方案

你遇到的错误提示冗余问题,根源是many $ char '.'解析器会默认把.加入到任意位置的期望符号列表中,包括输入已经到末尾、仅能补充]的场景。

仅需用Parsec内置的<?>标签覆盖不需要的错误提示即可,无需修改现有逻辑结构,也可以完整保留between组合子的使用:

import Text.Parsec.String (Parser)
import Control.Applicative hiding ((<|>))
import Text.ParserCombinators.Parsec hiding (many)

inBracketsP :: Parser [String]
-- 仅修改了两处<?>标签
inBracketsP = (many $ between (char '[') (char ']' <?> "]") (many (char '.') <?> "")) <* eof

main :: IO ()
main =  putStr $ show $ parse inBracketsP "" "[...][..."

原理说明

<?>操作符可以自定义解析失败时显示的期望内容:

  • 把many (char '.')的期望内容设为空字符串,就不会在错误提示里显示多余的期望.的内容
  • 为闭合方括号解析器显式指定期望提示为],保证错误提示只展示有效内容

修改后运行的输出结果完全符合预期:

Left (line 1, column 10):
unexpected end of input
expecting ']'

内容的提问来源于stack exchange,提问作者Dawid Łakomy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:39:00