let bs_identifier =
    let h = Hashtbl.create 97 in
    List.iter (fun (i,t) -> Hashtbl.add h i t)
      [
        "\\at"AT;
        "\\base_addr"BASE_ADDR;
        "\\block_length"BLOCK_LENGTH;
        "\\empty"EMPTY;
        "\\exists"EXISTS;
        "\\false"FALSE;
        "\\forall"FORALL;
        "\\fresh"FRESH;
        "\\from"FROM;
        "\\inter"INTER;
        "\\lambda"LAMBDA;
        "\\let"LET;
        "\\nothing"NOTHING;
        "\\null"NULL;
        "\\old"OLD;
        "\\result"RESULT;
        "\\separated"SEPARATED;
        "\\true"TRUE;
        "\\type"BSTYPE;
        "\\typeof"TYPEOF;
        "\\union"BSUNION;
        "\\valid"VALID;
        "\\valid_index"VALID_INDEX;
        "\\valid_range"VALID_RANGE;
        "\\with"WITH;
      ];
    fun lexbuf ->
      let s = lexeme lexbuf in
      try Hashtbl.find h s with Not_found -> IDENTIFIER s