+open Printf
+
+type location = Lexing.position * Lexing.position
+
+let pp_location (loc_begin, loc_end) =
+ let c_begin = loc_begin.Lexing.pos_cnum - loc_begin.Lexing.pos_bol in
+ let c_end = loc_end.Lexing.pos_cnum - loc_end.Lexing.pos_bol in
+ if loc_begin.Lexing.pos_lnum = -1 || loc_end.Lexing.pos_lnum = -1 then
+ sprintf "%d-%d" c_begin c_end
+ else
+ sprintf "(%d,%d)-(%d,%d)" loc_begin.Lexing.pos_lnum c_begin
+ loc_end.Lexing.pos_lnum c_end
+
+let floc_of_loc (loc_begin, loc_end) =
+ let floc_begin =
+ { Lexing.pos_fname = ""; Lexing.pos_lnum = -1; Lexing.pos_bol = -1;
+ Lexing.pos_cnum = loc_begin }
+ in
+ let floc_end = { floc_begin with Lexing.pos_cnum = loc_end } in
+ (floc_begin, floc_end)
+
+let loc_of_floc = function
+ | { Lexing.pos_cnum = loc_begin }, { Lexing.pos_cnum = loc_end } ->
+ (loc_begin, loc_end)
+
+let dummy_floc = floc_of_loc (-1, -1)