let register_rule r =
  try
    ignore(Hashtbl.find rules r.rule_name);
    failwith (Printf.sprintf "Rule %s already registered." r.rule_name)
  with
    Not_found ->
      Hashtbl.add rules r.rule_name r