
Simon Marlow schrieb:
On 06/07/2010 13:17, Christian Maeder wrote:
http://www.haskell.org/~simonmar/haskell-2010-draft-report-2/haskellch3.html
infixexp → lexp qop infixexp (infix operator application) | - infixexp (prefix negation) | lexp
This grammar rule describes a right associative nesting of (any) infix operators "qop" and prefix negation as binding weaker than any infix.
Thus a parser would create from "- 1 /= 1&& a" the tree "- (1 /= (1&& a))".
The grammar is non-ambiguous and all you have to do is flatten the result to apply fixity resolution. I don't really see how generalising the grammar would help - the tree still has to be flattened to apply fixity resolution, and the parser would have to make an arbitrary choice from one of the possible parses. Or perhaps I'm missing something here?
An ambiguous grammar (as abstract syntax for expressions) would cover the tree after fixity resolution, too. The non-ambiguous grammar only describes a temporarily wrong tree for fixity resolution. Christian