Files
ocaml-sexpr/pc.mli

86 lines
2.4 KiB
OCaml

type severity = Style | Warning | Error
type parse_error = {
severity: severity;
pos: int;
message: string;
expected: string list option;
found: string option;
other_case: parse_error option;
}
type src_info = {
source: string;
path: string;
}
type cursor = { source: string; pos: int }
type parse_result = {
cursor: cursor;
errors: parse_error list
}
val pp_err : src_info -> Format.formatter -> parse_error -> unit
val pp_errli : src_info -> Format.formatter -> parse_error list -> unit
val create : string -> cursor
exception Parser_Cant_Recover of parse_result
exception Parser_No_Progress of cursor
type 'a parsr = cursor -> 'a * parse_result
val single_inline_white : unit parsr
val single_white : unit parsr
val any : char parsr
val just : string -> string parsr
val ex_end : unit parsr
val digitch : char parsr
val digit : int parsr
val lower : char parsr
val upper : char parsr
val alpha : char parsr
val alnum : char parsr
val sign : int parsr (** '+'->1, '-'->-1, _->1 *)
val p_uint : int parsr
val p_int : int parsr
val p_uflt : float parsr
val p_flt : float parsr
val repeat : 'a parsr -> 'a list parsr (** at lest 0 times *)
val many : 'a parsr -> 'a list parsr (** at least 1 times *)
(** repeat 'x parsr, as long as 'e parsr fails *)
val until : 'e parsr -> 'x parsr -> 'x list parsr
val opt : 'x parsr -> 'x option parsr
val map : ('i -> 'o) -> 'i parsr -> 'o parsr
val set : 'o -> 'i parsr -> 'o parsr
(** if the given parser succeeds, this parser will fail, val the other way around *)
val inv : 'x parsr -> unit parsr
(** requires that both parsers parse successfully at the same loc,
but only uses first parser for progressing val returning result.
combines warnings / errors from both parsers *)
val also : 'a parsr -> 'b parsr -> 'a parsr
exception Recursive_Parser_Used_Before_Created
val recursive : ('v parsr -> 'v parsr) -> 'v parsr
val chain : 'a parsr -> 'b parsr -> ('a * 'b) parsr
val ignore_then : 'a parsr -> 'b parsr -> 'b parsr
val then_ignore : 'a parsr -> 'b parsr -> 'a parsr
val nd_of3 : 'a parsr -> 'b parsr -> 'c parsr -> 'b parsr
val outer_of3 : 'a parsr -> 'b parsr -> 'c parsr -> ('a * 'c) parsr
val ignore : 'a parsr -> unit parsr
val either : 'a parsr -> 'a parsr -> 'a parsr
val doparse : Format.formatter -> src_info -> 'a parsr -> 'a option