diff options
| author | Gaëtan Gilbert | 2019-07-05 09:16:02 +0200 |
|---|---|---|
| committer | Gaëtan Gilbert | 2019-07-05 11:55:10 +0200 |
| commit | 115785b3678ef333cd5db2447f832abc7a64a8b1 (patch) | |
| tree | 27c8c5cec9641c00d9950da703e4655778194e6c /gramlib | |
| parent | 37d417f664fc14e14bbcf09d479c4bffbe5ee178 (diff) | |
Use Format.pp_print_list with conditional instead of fold for list prints in gramlib
This means we don't need to ignore the result of the fold. cf #10471
Using Format.pp_print_list instead of a custom iteri was suggested by
Jean-Christophe Léchenet (eponier)
Diffstat (limited to 'gramlib')
| -rw-r--r-- | gramlib/grammar.ml | 42 |
1 files changed, 18 insertions, 24 deletions
diff --git a/gramlib/grammar.ml b/gramlib/grammar.ml index f9d18e7190..f96cfebed5 100644 --- a/gramlib/grammar.ml +++ b/gramlib/grammar.ml @@ -871,39 +871,33 @@ and print_rule : type s tr p. formatter -> (s, tr, p) ty_symbols -> unit = and print_level : type s. _ -> _ -> s ex_symbols list -> _ = fun ppf pp_print_space rules -> fprintf ppf "@[<hov 0>[ "; - let _ = - List.fold_left - (fun sep (ExS rule) -> - fprintf ppf "%t%a" sep print_rule rule; - fun ppf -> fprintf ppf "%a| " pp_print_space ()) - (fun ppf -> ()) rules + let () = + Format.pp_print_list ~pp_sep:(fun ppf () -> fprintf ppf "%a| " pp_print_space ()) + (fun ppf (ExS rule) -> print_rule ppf rule) + ppf rules in fprintf ppf " ]@]" let print_levels ppf elev = - let _ = - List.fold_left - (fun sep (Level lev) -> - let rules = - List.map (fun (ExS t) -> ExS (TCns (MayRec2, Sself, t))) (flatten_tree lev.lsuffix) @ - flatten_tree lev.lprefix - in - fprintf ppf "%t@[<hov 2>" sep; - begin match lev.lname with + Format.pp_print_list ~pp_sep:(fun ppf () -> fprintf ppf "@,| ") + (fun ppf (Level lev) -> + let rules = + List.map (fun (ExS t) -> ExS (TCns (MayRec2, Sself, t))) (flatten_tree lev.lsuffix) @ + flatten_tree lev.lprefix + in + fprintf ppf "@[<hov 2>"; + begin match lev.lname with Some n -> fprintf ppf "%a@;<1 2>" print_str n | None -> () - end; - begin match lev.assoc with + end; + begin match lev.assoc with LeftA -> fprintf ppf "LEFTA" | RightA -> fprintf ppf "RIGHTA" | NonA -> fprintf ppf "NONA" - end; - fprintf ppf "@]@;<1 2>"; - print_level ppf pp_force_newline rules; - fun ppf -> fprintf ppf "@,| ") - (fun ppf -> ()) elev - in - () + end; + fprintf ppf "@]@;<1 2>"; + print_level ppf pp_force_newline rules) + ppf elev let print_entry ppf e = fprintf ppf "@[<v 0>[ "; |
