如何解决使用 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 举报,一经查实,本站将立刻删除。