package fmlib_parse

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

An error reporter is a convenience module which helps to generate readable error messages.

type t

Make an error reporter

val make_syntax : Parser.t -> t

Make an error reported for a parser which has failed with a syntax error.

Precondition: Parser.has_failed_syntax p

make semantic_range semantic_doc p

Generate an error reporter from

  • semantic_range: Function which computes from a semantic error a range in the source file where the error occurred.
  • semantic_doc: Function which computes from a semantic error a pretty print document.
  • p: The parser which ended in an error state

The functions for semantic errors have to be provided by the user because semantic errors are transparent to the parser. In case the parser cannot end in a semantic error (i.e. no fail combinator has been used), then the function fun _ -> assert false can be used for both.

Precondition: not (Parser.has_succeeded p)

Run the error reporter

In order to run the error reporter some kind of a stream is needed which represents the source code where an error has occurred. The reporter extracts a source snippet which contains the error and marks the error position. After the code snippet it adds an error message describing the error.

val run_on_stream : char Stream.t -> t -> Fmlib_pretty.Print.doc

run the reporter on a character stream which represents the source code.

val run_on_string : string -> t -> Fmlib_pretty.Print.doc

run the reporter on a string which represents the source code.

val run_on_channel : in_channel -> t -> Fmlib_pretty.Print.doc

run the reporter on an input channel which represents the source code. Note that the input channel must be positioned at the start.

val run_on_channels : in_channel -> int -> out_channel -> t -> unit

run_on_channels ic width oc r

Run the reporter on an input channel which represents the source code. Note that the input channel must be positioned at the start.

Then write the error report with the text width width to the output channel oc.

Run with inverted control

val needs_more : t -> bool

Does the reporter need more characters from the source file?

val put : char -> t -> t

Put a character from the source file into the reporter.

val put_end : t -> t

Tell the reporter that there are no more characters in the input source.

val document : t -> Fmlib_pretty.Print.doc

The document containing a source snippet which contains the marked error.

OCaml

Innovation. Community. Security.