1signature Regexp_Type =
2sig
3
4 type w64 = Word64.word
5 type charset =  w64 * w64 * w64 * w64
6
7 val alphabet_size : int
8 val alphabet : char list
9
10 (* charsets *)
11 val charset_empty   : charset
12 val charset_full    : charset
13 val charset_mem     : char -> charset -> bool
14 val charset_of      : char list -> charset
15 val charset_elts    : charset -> char list
16
17 val charset_insert  : char -> charset -> charset
18 val charset_sing    : char -> charset
19 val charset_span    : int -> int -> charset
20 val charset_union   : charset -> charset -> charset
21 val charset_diff    : charset -> charset -> charset
22 val charset_compare : charset * charset -> order
23
24 datatype regexp
25    = Chset of charset
26    | Cat of regexp * regexp
27    | Star of regexp
28    | Or of regexp list
29    | Neg of regexp
30
31 val regexp_compare : regexp * regexp -> order
32
33 (* derived syntax *)
34 val And  : regexp * regexp -> regexp
35 val Diff : regexp * regexp -> regexp
36
37 (* predeclared regexps *)
38 val WHITESPACE : regexp
39 val DIGIT      : regexp
40 val ALPHA      : regexp
41 val ALPHANUM   : regexp
42 val EMPTY      : regexp
43 val SIGMA      : regexp
44 val DOT        : regexp
45 val EPSILON    : regexp
46 val SIGMASTAR  : regexp
47
48 val replicate : regexp -> int -> regexp
49 val ranged : regexp -> int -> int -> regexp
50 val catlist : regexp list -> regexp
51 val strip_cat : regexp -> regexp list
52 val dots : int -> regexp list
53 val mk_or : regexp list -> regexp
54
55
56 datatype tree
57   = Ap of string * tree list
58   | Cset of charset
59   | Ident of char
60   | Power of tree * int
61   | Range of tree * int option * int option
62   | Interval of IntInf.int * IntInf.int
63   | Const of IntInf.int
64
65 val tree_parse        : substring -> tree list * substring
66 val substring_to_tree : substring -> tree
67 val quote_to_tree     : 'a frag list -> tree
68
69 val tree_to_regexp : (IntInf.int * IntInf.int -> regexp) -> tree -> regexp
70
71 val get_intervalFn : unit -> (IntInf.int * IntInf.int -> regexp)
72 val set_intervalFn : (IntInf.int * IntInf.int -> regexp) -> unit
73
74 val fromSubstring : substring -> regexp
75 val fromString    : string -> regexp
76 val fromQuote     : 'a frag list -> regexp
77
78 val pp_regexp     : regexp PP.pprinter
79 val print_regexp  : regexp -> unit
80 val println_regexp  : regexp -> unit
81
82end
83