Source file omega_string_literals.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
open Core
open Angstrom
let (|>>) p f =
p >>= fun x -> return (f x)
module Escapable = struct
module type S = sig
val delimiter : string
val escape : char
end
module Make (M : S) = struct
let escaped_char_s =
any_char
let char_token_s =
((char M.escape *> escaped_char_s >>= fun c -> return (Format.sprintf {|%c%c|} M.escape c))
<|> (any_char |>> String.of_char)
)
let base_string_literal =
((string M.delimiter *> (many_till char_token_s (string M.delimiter))
|>> String.concat)
>>= fun result ->
return (Format.sprintf {|%s%s%s|} M.delimiter result M.delimiter)
)
end
end
module Raw = struct
module type S = sig
val left_delimiter : string
val right_delimiter : string
end
module Make (M : S) = struct
let char_token_s =
(any_char |>> String.of_char)
let base_string_literal =
((
string M.left_delimiter *> (many_till char_token_s (string M.right_delimiter))
|>> String.concat)
>>= fun result ->
return (Format.sprintf {|%s%s%s|} M.left_delimiter result M.right_delimiter)
)
end
end