微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Megaparsec 解析数组 [1][2] 时出现问题

如何解决使用 Megaparsec 解析数组 [1][2] 时出现问题

我正在关注 Megaparsec documentation 来解析多维数组。

opSubscript = Postfix $ foldr1 (.) <$> some singleIndex

singleIndex = do
  index < brackets expr
  return $ \l -> ArrayIndex l index

array[1][2] 预计将被解析为

ArrayIndex (ArrayIndex (Var "array") 1)) 2

然而,它是

ArrayIndex (ArrayIndex (Var "array") 2)) 1

这里出了什么问题?

解决方法

some singleIndex 解析了一个包含两个函数的列表,[f,g],其中

f = \l -> ArrayIndex l 1
g = \l -> ArrayIndex l 2

然后用 foldr1 组合它们。并且因为

foldr1 f [x,y] = x `f` y

您的结果函数是 f . g。当然,这首先应用 g,产生 ArrayIndex (Var "array") 2,然后应用 f,产生 ArrayIndex (ArrayIndex (Var "array") 2) 1

所以你的解析很好,但你编写的结果是错误的。您想要不同的关联性、顺序或其他东西。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。