shithub: martian9

ref: 465362387ca57cd00f2b4be4f4a9c75b6c15d793
dir: /utils.ml/

View raw version
exception Syntax_error of string
exception Runtime_error of string

let token_re = Str.regexp "~@\\|[][{}()'`~^@]\\|\"\\(\\\\.\\|[^\"]\\)*\"?\\|;.*\\$\\|[^][  \n{}('\"`,;)]*"

(* copied verbatim - must needs grok *)
let gsub re f str =
  String.concat "" (List.map (function Str.Delim x -> f x | Str.Text x -> x) (Str.full_split re str))

let tokenize str =
  List.map
    (function Str.Delim x -> String.trim x (* move trim to regex for speed? *) | Str.Text _ -> "tokenize botch")
    (List.filter (function Str.Delim _ -> true | Str.Text _ -> false) (Str.full_split token_re str))