module Cudf_parser:sig
..end
type
cudf_parser
exception Parse_error of string * Cudf_types.loc
val from_in_channel : ?typedecl:Cudf_conf.stanza_typedecl ->
Pervasives.in_channel -> cudf_parser
typedecl
: (initial) per-stanza and per-property type declarations to
be used while parsing. Default: Cudf_conf.stanza_typedecl
val from_IO_in_channel : ?typedecl:Cudf_conf.stanza_typedecl -> IO.input -> cudf_parser
typedecl
: (initial) per-stanza and per-property type declarations to
be used while parsing. Default: Cudf_conf.stanza_typedecl
val from_file : ?typedecl:Cudf_conf.stanza_typedecl -> string -> cudf_parser
typedecl
: as per Cudf_parser.from_in_channel
val close : cudf_parser -> unit
Afterwards, the parser should not be used any longer
"parse_*" functions offer plain syntax parsing, with no semantic interpretation of what is being parsed. "load_*" functions offer the latter, hence also checking for semantic constraints (such as the lack of key duplication).
All full parsing function are granted to raise only
Cudf_parser.Parse_error
; finer grained exception are mapped to it.
val parse : cudf_parser ->
Cudf.preamble option * Cudf.package list * Cudf.request option
Parse_error
when an error during parsing is encountered (might be a
syntax error, a type error, ..)preamble, packages, request
where preamble and request
are returned only if actually met in the parsed document. Note that a
document with no request part is not a valid CUDF document (but might still
be used to represent solver solutions, for instance).val load : cudf_parser ->
Cudf.preamble option * Cudf.universe * Cudf.request option
Cudf_parser.parse
, but additionally loads the package
list as an abstract Cudf.universe
.
Note: to load compact universes (i.e. only containing package names,
versions, and installed status) that will be tested as solutions you should
use Cudf_parser.load_solution
instead: the present function does not
expand missing metadata with respect to the initial status.
Raises
Parse_error
as Cudf_parser.parse
doesCudf.Constraint_violation
as Cudf.load_universe
doesval load_solution : cudf_parser ->
Cudf.universe -> Cudf.preamble option * Cudf.universe
Solution format is as per Appendix B of CUDF 2.0 spec
Raises Parse_error
as Cudf_parser.parse
does
val parse_from_file : ?typedecl:Cudf_conf.stanza_typedecl ->
string -> Cudf.preamble option * Cudf.package list * Cudf.request option
val load_from_file : ?typedecl:Cudf_conf.stanza_typedecl ->
string -> Cudf.preamble option * Cudf.universe * Cudf.request option
val load_solution_from_file : string -> Cudf.universe -> Cudf.preamble option * Cudf.universe
val parse_item : cudf_parser -> Cudf.cudf_item
Beware that parsing is stateful; in particular when the preamble is parsed,
the list of allowed properties for future package stanzas is internally
updated.
The following parsing function usually raise fine grained exceptions such
as Cudf_types.Syntax_error
and Cudf_types.Type_error
.
typeloc_map =
(string * Cudf_types.loc) list
val parse_stanza : cudf_parser -> loc_map * string Cudf_types.stanza
End_of_file
if no other stanza is available due to reached EOFCudf_types.Syntax_error
when a syntax error is encounteredval type_check_stanza : ?locs:loc_map ->
string Cudf_types.stanza ->
Cudf_types.typedecl -> Cudf_types.typed_value Cudf_types.stanza
Syntax_error
if a property does not match its declared type; this
exception is also raised when an undeclared property is encounteredType_error
when a property has a value of the wrong type