Utility functions to write manual parsers.
module Parse: sigval escapable_string : string -> stop_before:char list -> string * char option * stringstop_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