123456789101112131415161718192021222324252627282930313233343536373839typepos=Lexing.position={pos_fname:string;pos_lnum:int;pos_bol:int;pos_cnum:int;}(** [file, line, char] *)letget_pos_infop=p.pos_fname,p.pos_lnum,p.pos_cnum-p.pos_bol+1(* zero_pos is not exported from Lexing *)letzero_pos={pos_fname="";pos_lnum=1;pos_bol=0;pos_cnum=0;}letpos_to_stringp=letfile,line,column=get_pos_infopinPrintf.sprintf"%s:%d:%d"filelinecolumn(* type t = {
loc_start : pos;
loc_end : pos;
} *)typet=pos*posletmakeloc_startloc_end=loc_start,loc_endletto_string(loc_start,loc_end)=let(fname,lstart,cstart)=get_pos_infoloc_startinlet(_,lend,cend)=get_pos_infoloc_endinPrintf.sprintf"%s:%d:%d-%d:%d"fnamelstartcstartlendcendletempty=zero_pos,zero_pos(* type 'node annot = t * 'node *)