package earley

  1. Overview
  2. Docs

Module Earley_core.InputSource

A module providing efficient input buffers with preprocessing.

Type

Sourcetype buffer

The abstract type for an input buffer.

Reading from a buffer

Sourceval 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.

Sourceval get : buffer -> int -> char

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

Creating a buffer

Sourceval from_file : string -> buffer

from_file fn returns a buffer constructed using the file fn.

Sourceval from_channel : ?filename:string -> 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.

Sourceval 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.

Sourceval 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

Sourceexception 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.

Sourceval pp_error : string -> string -> 'a

pp_error name msg raises Preprocessor_error(name,msg).

Sourcemodule type Preprocessor = sig ... end

Specification of a preprocessor.

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

Functor for building buffers with a preprocessor.

Buffer manipulation functions

Sourceval is_empty : buffer -> int -> bool

is_empty buf test whether the buffer buf is empty.

Sourceval line_num : buffer -> int

line_num buf returns the current line number of buf.

Sourceval line_offset : buffer -> int

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

Sourceval line : buffer -> string

line buf returns the current line in the buffer buf.

Sourceval line_length : buffer -> int

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

Sourceval utf8_col_num : buffer -> int -> int

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

Sourceval normalize : buffer -> int -> buffer * int

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

Sourceval filename : buffer -> string

filename buf returns the file name associated to the buf.

Sourceval buffer_uid : buffer -> int

buffer_uid buf returns a unique identifier for buf.

Sourceval buffer_equal : buffer -> buffer -> bool

buffer_eq b1 b2 tests the equality of b1 and b2.

Sourceval buffer_compare : buffer -> buffer -> int

buffer_compare b1 b2 compares b1 and b2.

Sourceval 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

Sourcemodule OrdTbl : sig ... end
Sourcemodule Tbl : sig ... end

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

OCaml

Innovation. Community. Security.