1(* ========================================================================= *) 2(* PARSER COMBINATORS *) 3(* Copyright (c) 2001-2004 Joe Hurd. *) 4(* ========================================================================= *) 5 6signature mlibParser = 7sig 8 9(* Recommended fixities 10 infixr 9 >>++ 11 infixr 8 ++ 12 infixr 7 >> 13 infixr 6 || 14*) 15 16type 'a pp = 'a mlibUseful.pp 17type 'a stream = 'a mlibStream.stream 18 19(* Generic *) 20exception Noparse 21val ++ : ('a -> 'b * 'a) * ('a -> 'c * 'a) -> 'a -> ('b * 'c) * 'a 22val >> : ('a -> 'b * 'a) * ('b -> 'c) -> 'a -> 'c * 'a 23val >>++ : ('a -> 'b * 'a) * ('b -> 'a -> 'c * 'a) -> 'a -> 'c * 'a 24val || : ('a -> 'b * 'a) * ('a -> 'b * 'a) -> 'a -> 'b * 'a 25val smany : ('s -> 'a -> 's * 'a) -> 's -> 'a -> 's * 'a 26val many : ('a -> 'b * 'a) -> 'a -> 'b list * 'a 27val atleastone : ('a -> 'b * 'a) -> 'a -> 'b list * 'a 28val nothing : 'a -> unit * 'a 29val optional : ('a -> 'b * 'a) -> 'a -> 'b option * 'a 30 31(* mlibStream-based *) 32type ('a,'b) parser = 'a stream -> 'b * 'a stream 33val everything : ('a, 'b list) parser -> 'a stream -> 'b stream 34val maybe : ('a -> 'b option) -> ('a,'b) parser 35val finished : ('a,unit) parser 36val some : ('a -> bool) -> ('a,'a) parser 37val any : ('a,'a) parser 38val exact : ''a -> (''a,''a) parser 39 40(* Parsing and pretty-printing for infix operators *) 41type infixities = {tok : string, prec : int, left_assoc : bool} list 42type 'a con = string * 'a * 'a -> 'a 43type 'a des = 'a -> (string * 'a * 'a) option 44type 'a iparser = (string,'a) parser 45type 'a iprinter = ('a * bool) pp 46val optoks : infixities -> string list 47val parse_left_infix : string list -> 'a con -> 'a iparser -> 'a iparser 48val parse_right_infix : string list -> 'a con -> 'a iparser -> 'a iparser 49val parse_infixes : infixities -> 'a con -> 'a iparser -> 'a iparser 50val pp_left_infix : string list -> 'a des -> 'a iprinter -> 'a iprinter 51val pp_right_infix : string list -> 'a des -> 'a iprinter -> 'a iprinter 52val pp_infixes : infixities -> 'a des -> 'a iprinter -> 'a iprinter 53 54(* Lexing *) 55val space : char -> bool 56val digit : char -> bool 57val lower : char -> bool 58val upper : char -> bool 59val alpha : char -> bool 60val alphanum : char -> bool (* alpha + digit + _ + ' *) 61val symbol : char -> bool (* <>=-*+/\?@|!$%&~#^: *) 62val punct : char -> bool (* ()[]{}.,; *) 63 64(* Quotations *) 65type 'a quotation = 'a frag list 66val quotation_parser : (string -> 'a) -> 'b pp -> 'b quotation -> 'a 67 68end 69