mpri-funcprog-project/src/Error.ml

41 lines
878 B
OCaml

open Lexing
type place =
position * position
let place lexbuf : place =
lexbuf.lex_start_p, lexbuf.lex_curr_p
let line p : int =
p.pos_lnum
let column p : int =
p.pos_cnum - p.pos_bol
let show place : string =
let startp, endp = place in
Printf.sprintf "File \"%s\", line %d, characters %d-%d"
startp.pos_fname
(line startp)
(column startp)
(endp.pos_cnum - startp.pos_bol) (* intentionally [startp.pos_bol] *)
let display continuation header place format =
Printf.fprintf stderr "%s:\n" (show place);
Printf.kfprintf
continuation
stderr
(header ^^ format ^^ "\n%!")
let error place format =
display
(fun _ -> exit 1)
"Error: "
place format
let set_filename lexbuf filename =
lexbuf.lex_curr_p <- { lexbuf.lex_curr_p with pos_fname = filename }
let pp_place formatter _place =
Format.fprintf formatter "<>"