- fprintf err_formatter "Query: %a\n%!" Xpath.Ast.print_path query;
- fprintf err_formatter "Automata: %a\n%!" Ata.print auto;
- fprintf err_formatter "Evaluating automaton:\n%!";
- let module Naive = Eval.Make(Naive_tree) in
- let t1 = Unix.gettimeofday() in
- let results = Naive.eval auto doc (Naive_tree.root doc) in
- let teval = (Unix.gettimeofday () -. t1) *. 1000. in
- let t1 = Unix.gettimeofday () in
- output_string stdout "<xml_result>\n";
- List.iter (fun n ->
- Naive_tree.print_xml stdout doc n;
- output_char stdout '\n'
- ) results;
- output_string stdout "</xml_result>\n";
- let tprint = (Unix.gettimeofday () -. t1) *. 1000. in
- flush stdout;
- fprintf err_formatter "evaluation time: %fms\nserialization time: %fms\n%!" teval tprint
+ try
+ main ()
+ with
+ Arg.Bad msg -> eprintf "Error: %s\n%!" msg; Options.usage (); exit 1
+ | Sys_error msg -> eprintf "Error: %s\n%!" msg; exit 2
+ | Tree.Parse_error msg -> eprintf "Error: file %s, %s\n%!" !Options.input_file msg; exit 3
+ | Xpath.Ulexer.Error (s, e, msg) -> eprintf "Error: character %i-%i: %s\n%!" s e msg; exit 4
+ | e -> eprintf "FATAL ERROR: %s\n%!" (Printexc.to_string e); exit 128