的文档Parsec.Expr.buildExpressionParser
说:
相同优先级的前缀和后缀运算符只能出现一次(即,如果- 是前缀否定,则--2 是不允许的)。
确实,这让我很痛苦,因为我试图解析的语言允许任意重复其前缀和后缀运算符(想想像这样的 C 表达式**a[1][2]
)。
那么,为什么要Parsec
做出这个限制,我该如何解决呢?
我想我可以将我的前缀/后缀解析器向下移动到term
解析器中,因为它们具有最高优先级。
IE
**a + 1
被解析为
(*(*(a)))+(1)
但是如果我想让它解析为
*(*((a)+(1)))
如果buildExpressionParser
做了我想要的,我可以简单地重新排列表中运算符的顺序。
注意请参阅此处以获得更好的解决方案