package orsetto

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

A distinguished chain scanner for simple ASCII character symbols.

type chain = private
  1. | Chain : {
    1. separator : unit Cf_scan.ASCII.t;
    2. header : ctrl;
    3. trailer : ctrl;
    4. fail : (Cf_scan.ASCII.mark -> 'x) option;
    } -> chain

The type of a chain discipline.

val mk : ?xf:(Cf_scan.ASCII.mark -> 'x) -> ?a:[< ctrl ] -> ?b:[< ctrl ] -> 'r Cf_scan.ASCII.t -> chain

Use mk separator to make a chain discipline with separator to scan for delimiters. Use ~a and/or ~b to control how leading/trailing delimiters are processed (respectively). For example, use ~b:`Opt to specify that a trailing delimiter is optionally permitted.

val sep : ?xf:(Cf_scan.ASCII.mark -> 'x) -> [< ctrl ] -> 'r -> 'r Cf_scan.ASCII.t -> 'r Cf_scan.ASCII.t

Use sep c r p to make a parser for separator p with optionality control c.

If c is `Non then no input is consumed and r is returned.

If c is `Opt then returns either the value recognized by p, or r if no value is recognized.

If c is `Req then acts as reqf ?xf p.

val sep0 : ?xf:(Cf_scan.ASCII.mark -> 'x) -> [< ctrl ] -> unit Cf_scan.ASCII.t -> bool Cf_scan.ASCII.t

Use sep0 c p to make a parser for separator p with optionality control c, in the case that p returns the unit type.

If c is `Non then no input is consumed and false is returned.

If c is `Opt then returns a boolean value indicating whether p recognized a separator.

If c is `Req then acts as reqf ?xf p >>= fun () -> return true.

val vis : c:chain -> ?a:int -> ?b:int -> ('r -> 'r Cf_scan.ASCII.t) -> 'r -> 'r Cf_scan.ASCII.t

Use vis ~c ?a ?b f v to compose a parser that recognizes a sequence of symbols in the input stream, delimited according to the chain discipline ~c, by applying a visitor function f at each sequence point to obtain its parser. The first sequence point is visited with the initializer v.

If ~a is used, then it specifies the minimum number of elements in the sequence. If ~b is used then it specifies the maximum number of elements in the sequence. Composition raises Invalid_argument if a < 0 or b < a.

val seq : c:chain -> ?a:int -> ?b:int -> 'r Cf_scan.ASCII.t -> 'r list Cf_scan.ASCII.t

Use seq ?a ?b p to create a new parser that recognizes a sequence of symbols in the input stream with p, delimited according to the chain discipline ~c.

If ~a is used, then it specifies the minimum number of elements in the sequence. If ~b is used then it specifies the maximum number of elements in the sequence. Composition raises Invalid_argument if a < 0 or b < a.