parsing - ReadP 在返回空结果之间
问题描述
考虑使用以下代码段ReadP
:
import Text.ParserCombinators.ReadP
readP_to_S (between (char '[') (char ']') (munch (/= ','))) "[234]"
它输出
[]
根据文件,
:: ReadP open -> ReadP close -> ReadP a -> ReadP a Source#之间
在 open close p 之间解析 open,然后是 p,最后是 close。仅返回 p 的值。
因此,我希望返回值是
[("234", "")]
因为第一个解析器匹配左括号,第二个匹配右括号,最后一个匹配除逗号之外的所有内容。为什么不这样做?
解决方案
看源头
between open close p = do _ <- open
x <- p
_ <- close
return x
很明显,p
解析器不能使用解析器所需的字符close
(对我来说,这不是很直观)。
例如,这
readP_to_S (between (char '[') (char ']') (munch (/= ']'))) "[234]"
给
[("234","")]
推荐阅读
- javascript - 我对 2 个不同的输出感到困惑,因为 setTimeout 是异步的,fn 定义应该在回调执行时更新为“2”
- web - Service Worker 可以拦截来自 Web Worker 的 http 请求吗?
- c - 16位对象数组的memcpy可以在两者之间中断吗
- python - 生成组合,使总数始终为 100,并使用定义的跳跃值
- json - 如何在导入json文件期间将mongodb中唯一名称的一阶键设置为id
- python - 通过比较散列密码登录
- java - 为什么在链表的节点中插入值时需要一个临时节点?
- javascript - npm 中的 ERR_SSL_WRONG_VERSION_NUMBER
- python - TypeError: __init__(): 构造函数参数与 face_recognition 调用不兼容
- sql - 如何在 sqlite 中过滤 SUM(flag) OVER (...)