package csexp

  1. Overview
  2. Docs

Module Csexp.MakeSource

Parameters

module Sexp : Sexp

Signature

Parsing

Sourceval parse_string : string -> (Sexp.t, int * string) Result.t

parse_string s parses a single S-expression encoded in canonical form in s. It is an error for s to contain a S-expression followed by more data. In case of error, the offset of the error as well as an error message is returned.

Sourceval parse_string_many : string -> (Sexp.t list, int * string) Result.t

parse_string s parses a sequence of S-expressions encoded in canonical form in s

Sourceval input : in_channel -> (Sexp.t, string) Result.t

Read exactly one canonical S-expressions from the given channel. Note that this function never raises End_of_file. Instead, it returns Error.

Sourceval input_opt : in_channel -> (Sexp.t option, string) Result.t

Same as input but returns Ok None if the end of file has already been reached. If some more characters are available but the end of file is reached before reading a complete S-expression, this function returns Error.

Sourceval input_many : in_channel -> (Sexp.t list, string) Result.t

Read many S-expressions until the end of input is reached.

Serialising

Sourceval serialised_length : Sexp.t -> int

The length of the serialised representation of a S-expression

Sourceval to_string : Sexp.t -> string

to_string sexp converts S-expression sexp to a string in canonical form.

Sourceval to_buffer : Buffer.t -> Sexp.t -> unit

to_buffer buf sexp outputs the S-expression sexp converted to its canonical form to buffer buf.

Sourceval to_channel : out_channel -> Sexp.t -> unit

output oc sexp outputs the S-expression sexp converted to its canonical form to channel oc.

Low level parser

For efficiently parsing from sources other than strings or input channel. For instance in Lwt or Async programs.

Sourcemodule Parser : sig ... end

The Parser module offers an API that is a balance between sharing the common logic of parsing canonical S-expressions while allowing to write parsers that are as efficient as possible, both in terms of speed and allocations. A carefully written parser using this API will be:

Deprecated low-level parser

The above are deprecated as the Input signature does not allow to distinguish between IO errors and end of input conditions. Additionally, the use of monads tend to produce parsers that allocates a lot.

It is recommended to use the Parser module instead.

Sourcemodule type Input = sig ... end
Sourcemodule Make_parser (Input : Input) : sig ... end
OCaml

Innovation. Community. Security.