X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=src%2Fsolve.ml;h=4ab11479c7765fb02ad6673dd644810ef8abaccc;hb=5e7268fb95cdc7e56fe24f324a710550ade3d851;hp=b6dee3b76a5e1f87931c2d886ed06e7a5cc97f01;hpb=48457c0a99124a16ab29d7b84bcca85e0f3185a4;p=tatoo.git diff --git a/src/solve.ml b/src/solve.ml index b6dee3b..4ab1147 100644 --- a/src/solve.ml +++ b/src/solve.ml @@ -15,7 +15,8 @@ (** use: [./test xml_file -f XPath_queries_file] - one query per line [XPath_querie_file] + one query per line [XPath_querie_file], output + a solution per line. *) open Format @@ -24,7 +25,6 @@ let doc () = let fd = open_in Sys.argv.(1) in let d = Tree.load_xml_file fd in close_in fd; - fprintf err_formatter "Parse Tree OK ! "; d @@ -32,47 +32,53 @@ let query () = let arg2 = Sys.argv.(2) in if arg2 = "-f" then let fq = open_in Sys.argv.(3) in - let rec list_qu fq list = - try - (match XPath.parse_file fq with - | q -> list_qu fq (q::list) - | _ -> list) + let rec list_qu fq list = + try let q = XPath.parse_file fq in + list_qu fq (q::list) with _ -> list in let list = list_qu fq [] in close_in fq; - fprintf err_formatter "Parse query OK ! "; list - else failwith "Use -f" - -let build_asta query = - let asta = Compil.trans query in - fprintf err_formatter "Compil OK ! "; - asta + else failwith "Use ./test xml_file -f XPath_queries_file" let compute_run doc query = let run = Run.compute doc query in - fprintf err_formatter "Run OK ! \n"; run let () = + let flag = Array.length Sys.argv = 5 in + let flag2 = + if flag + then int_of_string Sys.argv.(4) = 1 + else false in Format.pp_set_margin err_formatter 80; let doc = doc () in - output_string stderr "##### Doc with positions #####\n"; - Tree.print_xml_preorder stderr doc (Tree.root doc); - output_string stderr "\n"; let queries = query () in + let rec print_selec fmt l = match l with + | [x] -> fprintf fmt "%s" (string_of_int x) + | x :: tl -> fprintf fmt "%s" ((string_of_int x)^"; ");print_selec fmt tl + | [] -> fprintf fmt "%s" "ø" in let rec solve_queries = function | [] -> () | query :: tl -> - let asta = build_asta query in + let asta = Compil.trans query in let selected_nodes = Run.selected_nodes doc asta in - fprintf err_formatter "\n ### Query: %a\n" - XPath.Ast.print query; - let rec print_selec fmt l = match l with - | [x] -> fprintf fmt "%s" (string_of_int x) - | x :: tl -> fprintf fmt "%s" ((string_of_int x)^"; ");print_selec fmt tl - | [] -> fprintf fmt "%s" "ø" in - fprintf err_formatter "@. ### Selected nodes: {%a}@." - print_selec selected_nodes in + let run = compute_run doc asta in + if flag + then + fprintf err_formatter " ### Query: %a" + XPath.Ast.print query + else (); + if flag2 then + fprintf err_formatter "@. ### Selected nodes: {%a}@." + print_selec selected_nodes + else (); + if flag + then begin + Asta.print err_formatter asta; + Run.print err_formatter run; + end + else (); + solve_queries tl in solve_queries queries; exit 0