53 lines
1.4 KiB
OCaml
53 lines
1.4 KiB
OCaml
(* Ranges and utilities on ranges. *)
|
|
|
|
(* A range represents a segment of text in a given file; it has a
|
|
* beginning and ending position specified in terms of line and column
|
|
* numbers. A range is associated with tokens during lexing to allow
|
|
* the compiler to give better error messages during lexing and
|
|
* parsing.
|
|
*)
|
|
|
|
(* a position in the source file; line number and column *)
|
|
type pos = int * int
|
|
|
|
(* a range of positions in a particular file *)
|
|
type t = string * pos * pos
|
|
|
|
(* line of position *)
|
|
val line_of_pos : pos -> int
|
|
|
|
(* column of position *)
|
|
val col_of_pos : pos -> int
|
|
|
|
(* new position with given line and col *)
|
|
val mk_pos : int -> int -> pos
|
|
|
|
(* the filename a range is in *)
|
|
val file_of_range : t -> string
|
|
|
|
(* the beginning of the range *)
|
|
val start_of_range : t -> pos
|
|
|
|
(* the end of the range *)
|
|
val end_of_range : t -> pos
|
|
|
|
(* create a new range from the given filename and start, end positions *)
|
|
val mk_range : string -> pos -> pos -> t
|
|
|
|
(* merge two ranges together *)
|
|
val merge_range : t -> t -> t
|
|
|
|
(* pretty-print a range *)
|
|
val string_of_range : t -> string
|
|
|
|
(* print a range as an ocaml value *)
|
|
val ml_string_of_range : t -> string
|
|
|
|
(* use to tag generated AST nodes where range does not apply *)
|
|
val norange : t
|
|
|
|
val pos_of_lexpos : Lexing.position -> pos
|
|
|
|
val mk_lex_range : Lexing.position -> Lexing.position -> t
|
|
|
|
val lex_range : Lexing.lexbuf -> t
|