-( 15:24:07 )-< command 0 >--------------------------------------------{ counter: 0 }- utop # #use "regexp.ml";; type token = AtSign | Percent | Literal of char | PlusSign | TimesSign | Asterisk | LParen | RParen val tokenize : char list -> token list = exception LexicalError val tokenize : char list -> token list = type regexp = Zero | One | Char of char | Plus of regexp * regexp | Times of regexp * regexp | Star of regexp exception SyntaxError of string val parse_exp : token list -> regexp * token list = val parse_term : token list -> regexp * token list = val parse_factor : token list -> regexp * token list = val parse_atom : token list -> regexp * token list = val parse : string -> regexp = val format_exp : regexp -> string = val match_exp' : regexp -> char list -> (char list -> bool) -> bool = val match_exp : regexp -> string -> bool = val match_exp_fixed' : regexp -> char list -> (char list -> bool) -> bool = val match_exp_fixed : regexp -> string -> bool = -( 15:24:08 )-< command 1 >--------------------------------------------{ counter: 0 }- utop # tokenize "a+b";; Error: This expression has type string but an expression was expected of type char list -( 15:24:39 )-< command 2 >--------------------------------------------{ counter: 0 }- utop # tokenize (String.to_list "a+b");; - : token list = [Literal a; PlusSign; Literal b] -( 15:26:16 )-< command 3 >--------------------------------------------{ counter: 0 }- utop # tokenize (String.to_list "a+b%*@");; - : token list = [Literal a; PlusSign; Literal b; Percent; Asterisk; AtSign] -( 15:26:42 )-< command 4 >--------------------------------------------{ counter: 0 }- utop # tokenize (String.to_list "a");; - : token list = [Literal a] -( 15:26:55 )-< command 5 >--------------------------------------------{ counter: 0 }- utop # tokenize (String.to_list ".");; - : token list = [TimesSign] utop # tokenize (String.to_list "ab\\.");; - : token list = [Literal a; Literal b; Literal .] -( 15:32:08 )-< command 2 >--------------------------------------------{ counter: 0 }- utop # tokenize (String.to_list "ab\\.\\\\");; - : token list = [Literal a; Literal b; Literal .; Literal \] -( 15:32:51 )-< command 3 >--------------------------------------------{ counter: 0 }- utop # tokenize (String.to_list "ab\\.\\\\.");; - : token list = [Literal a; Literal b; Literal .; Literal \; TimesSign] -( 15:34:41 )-< command 1 >--------------------------------------------{ counter: 0 }- utop # parse "a+b";; - : regexp = Plus (Char a, Char b) -( 15:34:47 )-< command 2 >--------------------------------------------{ counter: 0 }- utop # parse "a+b*";; - : regexp = Plus (Char a, Star (Char b)) -( 15:55:46 )-< command 3 >--------------------------------------------{ counter: 0 }- utop # parse "(a+b)*";; - : regexp = Star (Plus (Char a, Char b)) -( 15:55:54 )-< command 4 >--------------------------------------------{ counter: 0 }- utop # parse "(a+b)*)";; Exception: SyntaxError("Unexpected input.\n"). -( 15:56:14 )-< command 6 >--------------------------------------------{ counter: 0 }- utop # parse "a+b.c*";; - : regexp = Plus (Char a, Times (Char b, Star (Char c)))