open Table open Table_options open Query_tree let parse_xpath p = Xpath.Parser.parse (Ulexing.from_utf8_string p) let main () = let () = Table_options.parse () in let doc = let fd, close_fd = match !Table_options.input_file with None | Some "-" | Some "/dev/stdin" ->stdin,ignore | Some input -> let fd = open_in input in fd, fun() -> close_in fd in (*let inc = open_in Sys.argv.(1) in*) let doc = Naive_tree.load_xml_file fd in close_fd(); doc in let queries = List.map ( fun q -> parse_xpath q) !Table_options.queries in let t1 = Unix.gettimeofday () in let query_tree_list = List.map (fun query -> compile_xpath query) queries in let mini_qtree_list = List.map (fun qtree -> Query_tree.minimize_qtree qtree) query_tree_list in List.iter ( fun q -> let res = eval_qtree doc [ (Naive_tree.root doc) ] q in print_string "\n"; print_node_list doc res; print_string "\n"; ) mini_qtree_list ; let t2 = Unix.gettimeofday () in let t = (t2 -. t1) *. 1000. in let _ = if !Table_options.count then Format.fprintf Format.std_formatter "there are %i nodes\nit takes %fms\n" !Query_tree.compteur t; in exit 0 let () = main ()