Skip to content
Snippets Groups Projects
lxm.ml 1.94 KiB
Newer Older
(** Time-stamp: <modified the 01/09/2008 (at 17:03) by jahier> *)
Erwan Jahier's avatar
Erwan Jahier committed

(** Common to lus2lic and lic2loc  *)

Erwan Jahier's avatar
Erwan Jahier committed

let new_line ( lexbuf ) = (
  Global.line_start_pos := Lexing.lexeme_end lexbuf;
  incr Global.line_num;
  ()
Erwan Jahier's avatar
Erwan Jahier committed
)

(* exported *)
type pragma = Pragma of string * string

Erwan Jahier's avatar
Erwan Jahier committed
(* le type ``lexeme'', string + info source *)
type t = {
Erwan Jahier's avatar
Erwan Jahier committed
        _file : string ;
        _str : string ;
        _line : int ;
        _cstart : int ;
        _cend : int;
	_pragma : pragma list
Erwan Jahier's avatar
Erwan Jahier committed
}

let str x = (x._str)
let id x = (Ident.of_string x._str)
Erwan Jahier's avatar
Erwan Jahier committed
let line x = (x._line)
let cstart x = (x._cstart)
let cend x = (x._cend)
let pragma x = x._pragma
Erwan Jahier's avatar
Erwan Jahier committed
(* affichage standard: *)
let details lxm = (
  Printf.sprintf "in file \"%s\", line %d, col %d to %d, token '%s'"
    lxm._file lxm._line lxm._cstart lxm._cend lxm._str 
Erwan Jahier's avatar
Erwan Jahier committed
)
let position lxm = (
  Printf.sprintf "line:%d, col:%d to %d"
    lxm._line lxm._cstart lxm._cend
Erwan Jahier's avatar
Erwan Jahier committed
)

(* constructeur de type flagg avec un lexeme *)
Erwan Jahier's avatar
Erwan Jahier committed
type 'a srcflagged = {
Erwan Jahier's avatar
Erwan Jahier committed
   src : t ;
   it  : 'a
}
(* flagage d'une valeur quelconque *) 
Erwan Jahier's avatar
Erwan Jahier committed
let (flagit : 'a -> t -> 'a srcflagged) = 
  fun x lxm -> 
    { it = x; src = lxm }
Erwan Jahier's avatar
Erwan Jahier committed


let dummy str = 
  {
    _str = str ;  
    _file = String.concat ", " !Global.infiles ; 
    _line = 0 ; 
    _cstart = 0 ; 
  }

let last_lexeme = ref (dummy "")
Erwan Jahier's avatar
Erwan Jahier committed

let make ( lexbuf ) = (
  let s = (Lexing.lexeme lexbuf) in
  let l = !Global.line_num in
  let c1 = (Lexing.lexeme_start lexbuf - !Global.line_start_pos + 1) in
  let c2 = (Lexing.lexeme_end lexbuf - !Global.line_start_pos) in
    last_lexeme := 
      { _str = s ; 
Erwan Jahier's avatar
Erwan Jahier committed
        _file = !Global.current_file; 
        _line = l; 
        _cstart = c1 ; 
      };
    !last_lexeme
Erwan Jahier's avatar
Erwan Jahier committed
)

let add_pragma lxm pl = { lxm with _pragma = pl }
Erwan Jahier's avatar
Erwan Jahier committed
let make_string ( lexbuf ) = 
  let lxm = make lexbuf in
    { lxm with _str = String.sub lxm._str 1 ((String.length lxm._str)-2) }



Erwan Jahier's avatar
Erwan Jahier committed
let last_made () = !last_lexeme