相关疑难解决方法(0)

Parsec.Expr不支持重复前缀/后缀运算符

文档Parsec.Expr.buildExpressionParser说:

相同优先级的前缀和后缀运算符只能出现一次(如果 - 是前缀否定,则不允许--2).

事实上,这是咬我的,因为我试图解析的语言允许任意重复它的前缀和后缀运算符(想想像C表达式**a[1][2]).

那么,为什么要Parsec制定这个限制,我该如何解决呢?

我想我可以将我的前缀/后缀解析器移到term解析器中,因为它们具有最高优先级.

**a + 1
Run Code Online (Sandbox Code Playgroud)

被解析为

(*(*(a)))+(1)
Run Code Online (Sandbox Code Playgroud)

但是如果我想要解析它,我该怎么办?

*(*((a)+(1)))
Run Code Online (Sandbox Code Playgroud)

如果buildExpressionParser做了我想要的,我可以简单地重新排列表中运算符的顺序.

注意请参阅此处以获得更好的解决方

haskell parsec

15
推荐指数
1
解决办法
888
查看次数

标签 统计

haskell ×1

parsec ×1