From e7dad1b54ab44fd961134ad2cabf435f42fac433 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Tue, 7 Jun 2022 16:19:28 -0400 Subject: [PATCH] fix(parse): rename function in test case like Grant remarked, the chaining function is actually right-associative, not left-associative --- src/core/CCParse.ml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/CCParse.ml b/src/core/CCParse.ml index 5849a6ac..26e7eafa 100644 --- a/src/core/CCParse.ml +++ b/src/core/CCParse.ml @@ -91,15 +91,15 @@ open CCShims_ let integer = P.chars1_if (function '0'..'9'->true|_->false) >|= int_of_string in - let chainl1 e op = + let chainr1 e op = P.fix (fun r -> e >>= fun x -> (op <*> P.return x <*> r) <|> P.return x) in let expr : int P.t = P.fix (fun expr -> let factor = parens expr <|> integer in - let term = chainl1 factor (mul <|> div) in - chainl1 term (add <|> sub)) in + let term = chainr1 factor (mul <|> div) in + chainr1 term (add <|> sub)) in assert_equal (Ok 6) (P.parse_string expr "4*1+2"); assert_equal (Ok 12) (P.parse_string expr "4*(1+2)");