open Angstrom let is_digit = function '0' .. '9' -> true | _ -> false let is_semi c = c == ';' let digit = take_while is_digit >>| int_of_string let skip_semi = skip is_semi let semi_digits = sep_by1 skip_semi digit type parser = { separator : char array; delimiter : char array; } let create_parser ?(separator = [|'\x20'; '\x09'|]) ?(delimiter = [|'\x0a'; '\x0d'|]) () = { separator ; delimiter } let is_sep = function '\x20' | '\x09' -> true | _ -> false let is_delim = function '\x0a' | '\x0d' -> true | _ -> false