package earley

  1. Overview
  2. Docs

A module providing efficient input buffers with preprocessing.

Type

type buffer

The abstract type for an input buffer.

Reading from a buffer

val read : buffer -> int -> char * buffer * int

read buf pos returns the character at position pos in the buffer buf, together with the new buffer and position.

val get : buffer -> int -> char

get buf pos returns the character at position pos in the buffer buf.

Creating a buffer

val from_file : string -> buffer

from_file fn returns a buffer constructed using the file fn.

val from_channel : ?filename:string -> Stdlib.in_channel -> buffer

from_channel ~filename ch returns a buffer constructed using the channel ch. The optional filename is only used as a reference to the channel in error messages.

val from_string : ?filename:string -> string -> buffer

from_string ~filename str returns a buffer constructed using the string str. The optional filename is only used as a reference to the channel in error messages.

val from_fun : ('a -> unit) -> string -> ('a -> string) -> 'a -> buffer

from_fun finalise name get data returns a buffer constructed from the object data using the get function. The get function is used to obtain one line of input from data. The finalise function is applied to data when the end of file is reached. The name string is used to reference the origin of the data in error messages.

Creating buffers with a custom preprocessor

exception Preprocessor_error of string * string

Exception that can be raised by a preprocessor in case of error. The first string references the name of the buffer (e.g. the name of the corresponding file) and the second string contains the message.

val pp_error : string -> string -> 'a

pp_error name msg raises Preprocessor_error(name,msg).

module type Preprocessor = sig ... end

Specification of a preprocessor.

module WithPP (PP : Preprocessor) : sig ... end

Functor for building buffers with a preprocessor.

Buffer manipulation functions

val is_empty : buffer -> int -> bool

is_empty buf test whether the buffer buf is empty.

val line_num : buffer -> int

line_num buf returns the current line number of buf.

val line_offset : buffer -> int

line_beginning buf returns the offset of the current line in the buffer buf.

val line : buffer -> string

line buf returns the current line in the buffer buf.

val line_length : buffer -> int

line_length buf returns the length of the current line in the buffer buf.

val utf8_col_num : buffer -> int -> int

utf8_col_num buf pos returns the utf8 column number corresponding to the position pos in buf.

val normalize : buffer -> int -> buffer * int

normalize buf pos ensures that pos is less than the length of the current line in str.

val filename : buffer -> string

filename buf returns the file name associated to the buf.

val buffer_uid : buffer -> int

buffer_uid buf returns a unique identifier for buf.

val buffer_equal : buffer -> buffer -> bool

buffer_eq b1 b2 tests the equality of b1 and b2.

val buffer_compare : buffer -> buffer -> int

buffer_compare b1 b2 compares b1 and b2.

val buffer_before : buffer -> int -> buffer -> int -> bool

leq_bug b1 i1 b2 i2 returns true if the position b1, i1 is before b2, i2. Gives meaningless result if b1 and b2 do not refer to the same file.

....

First kind of table: association list in file order (first position in the beginning

module OrdTbl : sig ... end
module Tbl : sig ... end

Second kind of table: unordered, but imperative and more efficient