Utility functions to write manual parsers.
module Parse:
sig
val escapable_string : string -> stop_before:char list -> string * char option * string
stop_before
character if it is not
escaped. Examples: (* Does not stop: *)
escapable_string ~stop_before:['='; '@'] "sdf\tsd\000 sdf fdsaf";;
= ("sdf\tsd\000 sdf fdsaf", None, "")
(* Reads an escaped string; *)
escapable_string ~stop_before:['='; '@'] "\"sdf\\tsd\\000\" sdf fdsaf";;
= ("sdf\tsd\000", None, " sdf fdsa")
escapable_string ~stop_before:['='; '@'] "\"sdf\\tsd\\000\" s=df @fdsaf";;
= ("sdf\tsd\000", None, " s=df @fdsa")
escapable_string ~stop_before:['='; '@'] "\"sdf\\tsd\\000\"@ s=df @fdsaf";;
= ("sdf\tsd\000", Some '@', " s=df @fdsa")
(* Stops at '=' or '@' *)
escapable_string ~stop_before:['='; '@'] "sdf\tsd\000 s=df @fdsaf";;
= ("sdf\tsd\000 s", Some '=', "df @fdsa")
escapable_string ~stop_before:['='; '@'] "sdf\tsd\000 sdf @fdsaf";;
= ("sdf\tsd\000 sdf ", Some '@', "fdsa")
end