From 095e3e1680cd3c76313ada0b50f1495104414cbf Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Tue, 7 Apr 2009 15:43:41 +0000 Subject: [PATCH] Fixed the parsing of associative operators --- frontends/ParseOccam.hs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frontends/ParseOccam.hs b/frontends/ParseOccam.hs index c57d9d3..bd03502 100644 --- a/frontends/ParseOccam.hs +++ b/frontends/ParseOccam.hs @@ -770,7 +770,9 @@ expression <|> do { m <- md; sDEFINED; e <- expression; return $ A.IsDefined m e } <|> sizeExpr <|> do m <- md - (l, o) <- tryVV operand $ udOperator ((`elem` [JustDyadic, EitherDyadicMonadic]) . operatorArity) + (l, o) <- tryVV operand $ udOperator + (\op -> (operatorArity op `elem` [JustDyadic, EitherDyadicMonadic]) + && not (isAssocOperator op)) r <- operand return $ A.FunctionCall m o [l, r] <|> associativeOpExpression @@ -890,6 +892,7 @@ isAssocOperator "AND" = True isAssocOperator "OR" = True isAssocOperator "PLUS" = True isAssocOperator "TIMES" = True +isAssocOperator _ = False udOperator :: (String -> Bool) -> OccParser A.Name udOperator isOp = do m <- md