5 let chars_of_string s =
6 let len = String.length s in
16 type 'a parser = char list -> ('a * char list) list
24 List.concat $ List.map (fun (a, x') -> (g a) x') frst
26 let prs_zero = fun _ -> []
29 let prs_eof = function [] -> [(),[]] | _ -> [];;
54 prs_many1 p +++ return []
57 fun a -> prs_many p >>=
58 fun b -> return $ a::b
61 let rec prs_exact i p =
66 fun a -> prs_exact (i - 1) p >>=
67 fun b -> return $ a::b
69 let rec prs_sep_by p s =
70 prs_sep_by1 p s +++ return []
73 fun a -> prs_many $ (s >>= fun _ -> p) >>=
74 fun b -> return $ a::b
77 let prs_char c = prs_predicate (fun x -> x = c)
83 x = '0' || x = '1' || x = '2' || x = '3' ||
84 x = '4' || x = '5' || x = '6' || x = '7' ||
85 x = '8' || x = '9' || x = 'A' || x = 'B' ||
86 x = 'C' || x = 'D' || x = 'E' || x = 'F' ||
87 x = 'a' || x = 'b' || x = 'c' || x = 'd' ||