fix(parse): rename function in test case

like Grant remarked, the chaining function is actually
right-associative, not left-associative
This commit is contained in:
Simon Cruanes 2022-06-07 16:19:28 -04:00
parent 322b15d757
commit e7dad1b54a
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4

View file

@ -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)");