module type S = sig
.. end
type
t = Type.t
=
| |
Atom of string |
| |
List of t list |
Type of S-expressions
type
bigstring = (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t
Type of bigstrings
Defaults
val default_indent : int Pervasives.ref
default_indent
reference to default indentation level for
human-readable conversions. Initialisation value: 2.
S-expression size
val size : t -> int * int
size sexp
Returns (n_atoms, n_chars)
, where n_atoms
is
the number of atoms in S-expression sexp
, and n_chars
is the
number of characters in the atoms of the S-expression.
Scan functions
val scan_sexp : ?buf:Buffer.t -> Lexing.lexbuf -> t
scan_sexp ?buf lexbuf
scans an S-expression from lex buffer
lexbuf
using the optional string buffer buf
for storing
intermediate strings.
val scan_sexps : ?buf:Buffer.t -> Lexing.lexbuf -> t list
scan_sexps ?buf lexbuf
reads a list of whitespace separated
S-expressions from lex buffer lexbuf
using the optional string
buffer buf
for storing intermediate strings.
val scan_rev_sexps : ?buf:Buffer.t -> Lexing.lexbuf -> t list
scan_rev_sexps ?buf lexbuf
same as
Sexp_intf.S.scan_sexps
, but returns the
reversed list and is slightly more efficient.
val scan_iter_sexps : ?buf:Buffer.t -> f:(t -> unit) -> Lexing.lexbuf -> unit
scan_iter_sexps ?buf ~f lexbuf
iterates over all whitespace
separated S-expressions scanned from lex buffer lexbuf
using
function f
, and the optional string buffer buf
for storing
intermediate strings.
val scan_fold_sexps : ?buf:Buffer.t ->
f:('a -> t -> 'a) -> init:'a -> Lexing.lexbuf -> 'a
scan_fold_sexps ?buf ~f ~init lexbuf
folds over all whitespace
separated S-expressions scanned from lex buffer lexbuf
using
function f
, initial state init
, and the optional string buffer
buf
for storing intermediate strings.
val scan_sexps_conv : ?buf:Buffer.t -> f:(t -> 'a) -> Lexing.lexbuf -> 'a list
scan_sexps_conv ?buf ~f lexbuf
maps all whitespace separated
S-expressions scanned from lex buffer lexbuf
to some list using
function f
, and the optional string buffer buf
for storing
intermediate strings.
Type and exception definitions for (partial) parsing
module Parse_pos: sig
.. end
module Cont_state: sig
.. end
type ('a, 't)
parse_result = ('a, 't) Pre_sexp.parse_result
=
Type of result from calling Sexp.parse
.
type ('a, 't)
parse_fun = pos:int -> len:int -> 'a -> ('a, 't) parse_result
Type of parsing functions with given offsets and lengths.
module Annotated: sig
.. end
Module for parsing S-expressions annotated with location information
type 't
parse_state = private 't Pre_sexp.parse_state
= private {
|
parse_pos :Parse_pos.t ; |
|
mutable pstack :'t ; |
|
pbuf :Buffer.t ; |
}
Type of state maintained during parsing
type
parse_error = Pre_sexp.parse_error
= {
}
Type of parse errors
exception Parse_error of parse_error
Exception raised during partial parsing
Unannotated (partial) parsing
val parse : ?parse_pos:Parse_pos.t ->
?len:int -> string -> (string, t) parse_result
parse ?parse_pos ?len str
(partially) parses an S-expression in
string buffer str
starting out with position information provided in
parse_pos
and reading at most len
characters. To parse a single
atom that is not delimited by whitespace it is necessary to call this
function a second time with the returned continuation, and a dummy
buffer that contains whitespace.
parse_pos
: default = Parse_pos.create ()
len
: default = String.length str - parse_pos.Parse_pos.buf_pos
val parse_bigstring : ?parse_pos:Parse_pos.t ->
?len:int ->
bigstring ->
(bigstring, t) parse_result
parse_bigstring ?parse_pos ?len str
same as
Sexp_intf.S.parse
, but operates on
bigstrings.
val input_sexp : ?parse_pos:Parse_pos.t -> Pervasives.in_channel -> t
input_sexp ?parse_pos ic
parses an S-expression from input channel
ic
using initial position information in parse_pos
. NOTE: this
function is not as fast on files as Sexp.load_sexp
, and is also
slightly slower than the scan-functions. But it is guaranteed that
input_sexp
is only going to read data parseable as an S-expression.
Thus, subsequent input functions will see the data immediately
following it.
parse_pos
: default = Parse_pos.create ()
val input_sexps : ?parse_pos:Parse_pos.t ->
?buf:string -> Pervasives.in_channel -> t list
input_sexps ?parse_pos ?buf ic
parses whitespace separated
S-expressions from input channel ic
until EOF is reached. Faster than
the scan-functions.
parse_pos
: default = Parse_pos.create ()
val input_rev_sexps : ?parse_pos:Parse_pos.t ->
?buf:string -> Pervasives.in_channel -> t list
input_rev_sexps ?parse_pos ?buf ic
same as Sexp.input_sexps
,
but returns a reversed list of S-expressions, which is slightly more
efficient.
Loading of (converted) S-expressions
val load_sexp : ?strict:bool -> ?buf:string -> string -> t
load_sexp ?strict ?buf file
reads one S-expression from
file
using
buffer
buf
for storing intermediate data. Faster than the
scan-functions.
RaisesParse_error
if the S-expression is unparseable.
Failure
if parsing reached the end of file before one S-expression
could be read.
Failure
if strict
is true and there is more than one
S-expression in the file.
strict
: default = true
val load_sexps : ?buf:string -> string -> t list
load_sexps ?buf file
reads a list of whitespace separated S-expressions
from
file
using buffer
buf
for storing intermediate data.
Faster than the scan-functions.
RaisesParse_error
if there is unparseable data in the file.
Failure
if parsing reached the end of file before the last
S-expression could be fully read.
val load_rev_sexps : ?buf:string -> string -> t list
load_rev_sexps ?buf file
same as Sexp.load_sexps
, but returns a
reversed list of S-expressions, which is slightly more efficient.
val load_sexp_conv : ?strict:bool ->
?buf:string ->
string -> (t -> 'a) -> 'a Annotated.conv
load_sexp_conv ?strict ?buf file f
like
Sexp.load_sexp
, but
performs a conversion on the fly using
f
. Performance is equivalent
to executing
Sexp.load_sexp
and performing conversion when there
are no errors. In contrast to the plain S-expression loader, this
function not only performs the conversion, it will give exact error
ranges for conversion errors.
RaisesParse_error
if there is unparseable data in the file.
Failure
if parsing reached the end of file before the last
S-expression could be fully read.
val load_sexp_conv_exn : ?strict:bool -> ?buf:string -> string -> (t -> 'a) -> 'a
load_sexp_conv_exn ?strict ?buf file f
like
Sexp_intf.S.load_sexp_conv
,
but returns the converted value or raises
Of_sexp_error
with exact
location information in the case of a conversion error.
val load_sexps_conv : ?buf:string ->
string -> (t -> 'a) -> 'a Annotated.conv list
load_sexps_conv ?buf file f
like
Sexp.load_sexps
, but performs
a conversion on the fly using
f
. Performance is equivalent to
executing
Sexp.load_sexps
and performing conversion when there
are no errors. In contrast to the plain S-expression loader, this
function not only performs the conversion, it will give exact error
ranges for conversion errors.
RaisesParse_error
if there is unparseable data in the file.
Failure
if parsing reached the end of file before the last
S-expression could be fully read.
val load_sexps_conv_exn : ?buf:string -> string -> (t -> 'a) -> 'a list
load_sexps_conv_exn ?buf file f
like
Sexp_intf.S.load_sexps_conv
, but returns
the converted value or raises
Of_sexp_error
with exact location
information in the case of a conversion error.
Output of S-expressions to I/O-channels
NOTE: for performance reasons these output functions may need to
allocate large strings to write out huge S-expressions. This may
cause problems on 32-bit platforms. If you think that you may need to
write huge S-expressions on such platforms, you might want to use the
pretty-printers that write to formatters instead (see further below).
val output_hum : Pervasives.out_channel -> t -> unit
output_hum oc sexp
outputs S-expression sexp
to output channel
oc
in human readable form.
val output_hum_indent : int -> Pervasives.out_channel -> t -> unit
output_hum_indent indent oc sexp
outputs S-expression sexp
to output channel oc
in human readable form using indentation level
indent
.
val output_mach : Pervasives.out_channel -> t -> unit
output_mach oc sexp
outputs S-expression sexp
to output channel
oc
in machine readable (i.e. most compact) form.
val output : Pervasives.out_channel -> t -> unit
output oc sexp
same as output_mach
.
Output of S-expressions to file
All save-functions write to a temporary file before moving it into
place to avoid intermittent garbling of existing files, which may
cause problems for other processes that try to read.
val save_hum : ?perm:int -> string -> t -> unit
save_hum ?perm file sexp
outputs S-expression sexp
to file
in human
readable form.
perm
: default = umask
val save_mach : ?perm:int -> string -> t -> unit
save_mach ?perm file sexp
outputs S-expression sexp
to file
in machine readable (i.e. most compact) form.
perm
: default = umask
val save : ?perm:int -> string -> t -> unit
val save_sexps_hum : ?perm:int -> string -> t list -> unit
save_sexps_hum ?perm file sexps
outputs S-expression list sexps
to
file
in human readable form, each sexp being followed by a newline.
perm
: default = umask
val save_sexps_mach : ?perm:int -> string -> t list -> unit
save_sexps_mach ?perm file sexps
outputs S-expression list sexps
to
file
in machine readable form, each sexp being followed by a
newline.
perm
: default = umask
val save_sexps : ?perm:int -> string -> t list -> unit
Output of S-expressions to formatters
val pp_hum : Format.formatter -> t -> unit
pp_hum ppf sexp
outputs S-expression sexp
to formatter ppf
in human readable form.
val pp_hum_indent : int -> Format.formatter -> t -> unit
pp_hum_indent n ppf sexp
outputs S-expression sexp
to formatter
ppf
in human readable form and indentation level n
.
val pp_mach : Format.formatter -> t -> unit
pp_mach ppf sexp
outputs S-expression sexp
to formatter ppf
in machine readable (i.e. most compact) form.
val pp : Format.formatter -> t -> unit
pp ppf sexp
same as pp_mach
.
String and bigstring conversions
module Of_string_conv_exn: sig
.. end
Module encapsulating the exception raised by string converters when
type conversions fail.
val of_string : string -> t
of_string str
converts string
str
to an S-expression. NOTE:
trailing whitespace is considered an error, which may be overly
strict for some applications. Either strip the string of trailing
whitespace first, or, even cheaper, use
Sexp_intf.S.parse
instead.
val of_string_conv : string -> (t -> 'a) -> 'a Annotated.conv
of_string_conv str conv
like
Sexp_intf.S.of_string
, but performs type conversion
with
conv
.
Returns conversion result.
val of_string_conv_exn : string -> (t -> 'a) -> 'a
val of_bigstring : bigstring -> t
val of_bigstring_conv : bigstring ->
(t -> 'a) -> 'a Annotated.conv
of_bigstring_conv bstr conv
like
Sexp_intf.S.of_bigstring
, but performs
type conversion with
conv
.
Returns conversion result.
val of_bigstring_conv_exn : bigstring -> (t -> 'a) -> 'a
val to_string_hum : ?indent:int -> t -> string
to_string_hum ?indent sexp
converts S-expression sexp
to a
string in human readable form with indentation level indent
.
indent
: default = !default_indent
val to_string_mach : t -> string
to_string_mach sexp
converts S-expression sexp
to a string in
machine readable (i.e. most compact) form.
val to_string : t -> string
to_string sexp
same as to_string_mach
.
Buffer conversions
val to_buffer_hum : buf:Buffer.t -> ?indent:int -> t -> unit
to_buffer_hum ~buf ?indent sexp
outputs the S-expression sexp
converted to a string in human readable form to buffer buf
.
indent
: default = !default_indent
val to_buffer_mach : buf:Buffer.t -> t -> unit
to_buffer_mach ~buf sexp
outputs the S-expression sexp
converted
to a string in machine readable (i.e. most compact) form to buffer buf
.
val to_buffer : buf:Buffer.t -> t -> unit
val to_buffer_gen : buf:'buffer ->
add_char:('buffer -> char -> unit) ->
add_string:('buffer -> string -> unit) -> t -> unit
to_buffer_gen ~buf ~add_char ~add_string sexp
outputs the S-expression
sexp
converted to a string to buffer buf
using the output functions
add_char
and add_string
.
Utilities for automated type conversions
val unit : t
unit
the unit-value as expressed by an S-expression.
val sexp_of_t : t -> t
sexp_of_t sexp
maps S-expressions which are part of a type with
automated S-expression conversion to themselves.
val t_of_sexp : t -> t
t_of_sexp sexp
maps S-expressions which are part of a type with
automated S-expression conversion to themselves.
Utilities for conversion error handling
type
found = [ `Found | `Pos of int * found ]
Type of successful search results. `Found
means that an
S-expression was found at the immediate position, and `Pos (pos,
found)
indicates that it was found at position pos
within a
structure (= S-expression list) where found
describes recursively
where it was found in that structure.
type
search_result = [ `Found | `Not_found | `Pos of int * found ]
Type of search results. `Not_found
means that an
S-expression was not found within another S-expression.
val search_physical : t -> contained:t -> search_result
search_physical sexp ~contained
Returns the search result
indicating whether, and if, where the S-expression contained
was found within S-expression sexp
.
val subst_found : t -> subst:t -> found -> t
subst_found sexp ~subst found
Returns the S-expression that
results from substituting subst
within S-expression sexp
at the location described by found
.
module With_layout: sig
.. end
S-expressions annotated with relative source positions and comments