Infix and postfix operators in Parsec

I'm writing a parser for a Haskell-style language, and when I need to use the same symbol for infix, prefix and postfix operators, the combinator "buildExpressionParser" seems not to work as intended. For example, in: (1)x + y (2)x + (3)+ x If I set the priority of the postfix version of "+" to be higher than the infix version, the parser cannot recognize (1), for it stops at the end of "x +". And if the priority of postfix "+" is lower, Parsec complains about (2) by returning an error message which expects something after "+". Is there some way to get over this problem, and let me be able to still benifit from the expression mechanism in Parsec. Or should I write these stuff from scratch? Thanks.

It seems that the case of identical postfix and infix operators was not considered. So I recommend to write something from scratch. Cheers Christian Xinyu Jiang schrieb:
I'm writing a parser for a Haskell-style language, and when I need to use the same symbol for infix, prefix and postfix operators, the combinator "buildExpressionParser" seems not to work as intended. For example, in:
(1)x + y (2)x + (3)+ x
If I set the priority of the postfix version of "+" to be higher than the infix version, the parser cannot recognize (1), for it stops at the end of "x +". And if the priority of postfix "+" is lower, Parsec complains about (2) by returning an error message which expects something after "+".
Is there some way to get over this problem, and let me be able to still benifit from the expression mechanism in Parsec. Or should I write these stuff from scratch? Thanks.

Parse a sequence of primitive expressions first and then do fixity resolution independent from Parsec. C. Christian Maeder schrieb:
It seems that the case of identical postfix and infix operators was not considered. So I recommend to write something from scratch.
Cheers Christian
Xinyu Jiang schrieb:
I'm writing a parser for a Haskell-style language, and when I need to use the same symbol for infix, prefix and postfix operators, the combinator "buildExpressionParser" seems not to work as intended. For example, in:
(1)x + y (2)x + (3)+ x
If I set the priority of the postfix version of "+" to be higher than the infix version, the parser cannot recognize (1), for it stops at the end of "x +". And if the priority of postfix "+" is lower, Parsec complains about (2) by returning an error message which expects something after "+".
Is there some way to get over this problem, and let me be able to still benifit from the expression mechanism in Parsec. Or should I write these stuff from scratch? Thanks.
participants (2)
-
Christian Maeder
-
Xinyu Jiang