4 let input_file : string option ref = ref None
5 let output_file : string option ref = ref None
8 let compose = ref false
9 let parallel = ref false
10 let supported_models = [ "naive", (module Naive_tree : Tree.S);
11 "compact",(module Compact_tree : Tree.S);
13 let tree_model = ref (fst (List.hd supported_models))
14 let set_model s = tree_model := s
16 let set_string_option r s = r := Some s
20 " write the number of results only";
21 "--count", Set count, " ";
23 " display timing and various statistics";
24 "--stats", Set stats, " ";
25 "-d", String (set_string_option input_file),
26 " specify the input document file [default stdin]";
27 "--doc", String (set_string_option input_file), " ";
28 "-o", String (set_string_option output_file),
29 " specify the output file [default stdout]";
30 "--out", String (set_string_option output_file), " ";
32 " compose queries: each query is applied to the results of the \
33 previous one [default run all queries from the root node]";
34 "--compose", Set compose, " ";
36 " run all queries in parallel [default run all queries \
38 "--parallel", Set parallel, " ";
39 "-m", Symbol (List.map fst supported_models, set_model),
40 " specify tree model (naive or compact, default to naive)";
41 "--model", Symbol (List.map fst supported_models, set_model), " ";
45 Printf.sprintf "usage: %s [options] query [query ... query]" Sys.argv.(0)
47 let usage () = usage specs usage_msg
50 parse specs (fun q -> queries := q :: !queries ) usage_msg;
52 [] -> raise (Arg.Bad "missing query")
53 | l -> queries := List.rev l