mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Taken from tokenrove/parsur so I don't have to worry about license hassles. (You may relicense these samples as necessary.) It would be nice to have an example of the embedded SQL syntax in a sample.
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
functor Make(Stream : sig type t end) : sig
 | 
						|
    con t :: Type -> Type
 | 
						|
 | 
						|
    val mreturn : a ::: Type -> a -> t a
 | 
						|
    val mbind : a ::: Type -> b ::: Type ->
 | 
						|
                (t a) -> (a -> t b) -> (t b)
 | 
						|
    val monad_parse : monad t
 | 
						|
 | 
						|
    val parse : a ::: Type -> t a -> Stream.t -> option a
 | 
						|
 | 
						|
    (** Combinators *)
 | 
						|
    val fail : a ::: Type -> t a
 | 
						|
    val or : a ::: Type -> t a -> t a -> t a
 | 
						|
    val maybe : a ::: Type -> t a -> t (option a)
 | 
						|
    val maybe' : a ::: Type -> t a -> t unit
 | 
						|
    val many : a ::: Type -> t a -> t (list a)
 | 
						|
    val count : a ::: Type -> int -> t a -> t (list a)
 | 
						|
    val skipMany : a ::: Type -> t a -> t unit
 | 
						|
    val sepBy : a ::: Type -> s ::: Type -> t a -> t s -> t (list a)
 | 
						|
end
 | 
						|
 | 
						|
structure String : sig
 | 
						|
    con t :: Type -> Type
 | 
						|
    val monad_parse : monad t
 | 
						|
 | 
						|
    val parse : a ::: Type -> t a -> string -> option a
 | 
						|
 | 
						|
    (** Combinators *)
 | 
						|
    val fail : a ::: Type -> t a
 | 
						|
    val or : a ::: Type -> t a -> t a -> t a
 | 
						|
    val maybe : a ::: Type -> t a -> t (option a)
 | 
						|
    val maybe' : a ::: Type -> t a -> t unit
 | 
						|
    val many : a ::: Type -> t a -> t (list a)
 | 
						|
    val count : a ::: Type -> int -> t a -> t (list a)
 | 
						|
    val skipMany : a ::: Type -> t a -> t unit
 | 
						|
    val sepBy : a ::: Type -> s ::: Type -> t a -> t s -> t (list a)
 | 
						|
 | 
						|
    val eof : t unit
 | 
						|
    (* We provide alternative versions of some of these predicates
 | 
						|
     * that return t unit as a monadic syntactical convenience. *)
 | 
						|
    val string : string -> t string
 | 
						|
    val string' : string -> t unit
 | 
						|
    val stringCI : string -> t string
 | 
						|
    val stringCI' : string -> t unit
 | 
						|
    val char : char -> t char
 | 
						|
    val char' : char -> t unit
 | 
						|
    val take : int -> t (string*int)
 | 
						|
    val drop : int -> t unit
 | 
						|
    val satisfy : (char -> bool) -> t char
 | 
						|
    val skip : (char -> bool) -> t unit
 | 
						|
    val skipWhile : (char -> bool) -> t unit
 | 
						|
    val takeWhile : (char -> bool) -> t (string*int)
 | 
						|
    val takeWhile' : (char -> bool) -> t string (* conses *)
 | 
						|
    (* Well, "till" is the correct form; but "til" is in common enough
 | 
						|
     * usage that I'll prefer it for terseness. *)
 | 
						|
    val takeTil : (char -> bool) -> t (string*int)
 | 
						|
    val takeTil' : (char -> bool) -> t string (* conses *)
 | 
						|
    val takeRest : t string
 | 
						|
 | 
						|
    (** Convenience functions *)
 | 
						|
    val skipSpace : t unit
 | 
						|
    val endOfLine : t unit
 | 
						|
    val unsigned_int_of_radix : int -> t int
 | 
						|
    (*
 | 
						|
     * val signed_int_of_radix : int -> t int
 | 
						|
     * val double : t float
 | 
						|
     *)
 | 
						|
end
 | 
						|
 | 
						|
structure Blob : sig
 | 
						|
    con t :: Type -> Type
 | 
						|
    val monad_parse : monad t
 | 
						|
 | 
						|
    val parse : a ::: Type -> t a -> blob -> option a
 | 
						|
 | 
						|
    (** Combinators *)
 | 
						|
    val fail : a ::: Type -> t a
 | 
						|
    val or : a ::: Type -> t a -> t a -> t a
 | 
						|
    val maybe : a ::: Type -> t a -> t (option a)
 | 
						|
    val maybe' : a ::: Type -> t a -> t unit
 | 
						|
    val many : a ::: Type -> t a -> t (list a)
 | 
						|
    val count : a ::: Type -> int -> t a -> t (list a)
 | 
						|
    val skipMany : a ::: Type -> t a -> t unit
 | 
						|
    val sepBy : a ::: Type -> s ::: Type -> t a -> t s -> t (list a)
 | 
						|
end
 |