1 let show_queries = ref false
11 if ! use_db then begin Mqint.init (); db_down := false; true end
12 else begin print_endline "Not issuing in restricted mode"; false end
15 let default_confirm q =
16 let module Util = MQueryUtil in
17 if ! show_queries then print_string (Util.text_of_query q ^ nl);
18 let b = check_db () in
19 if ! db_down then print_endline "db_down"; b
23 let lexbuf = Lexing.from_channel stdin in
26 match CicTextualParserContext.main
27 (UriManager.uri_of_string "cic:/dummy") [] []
28 CicTextualLexer.token lexbuf
31 | Some (_, expr) -> terms := expr :: ! terms
35 CicTextualParser0.Eof -> ! terms
38 let u = UriManager.uri_of_string uri in
39 let s = match (CicEnvironment.get_obj u) with
40 | Cic.Definition (_, _, ty, _) -> CicPp.ppterm ty
41 | Cic.Axiom (_, ty, _) -> CicPp.ppterm ty
42 | Cic.Variable (_, _, ty) -> CicPp.ppterm ty
43 | _ -> "Current proof or inductive definition."
45 | Cic.CurrentProof (_,conjs,te,ty) ->
46 | C.InductiveDefinition _ ->
48 in print_endline s; flush stdout
51 let on = check_db () in
52 if on then ignore (Mqint.check ())
54 let rec display = function
58 print_string ("? " ^ CicPp.ppterm term ^ nl);
62 let module Gen = MQueryGenerator in
63 let rec levels_aux = function
67 print_string ("? " ^ CicPp.ppterm term ^ nl);
68 print_string (Gen.string_of_levels (Gen.levels_of_term [] [] term) nl);
74 let module Util = MQueryUtil in
75 let module Gen = MQueryGenerator in
76 Gen.set_confirm_query default_confirm;
78 let q = Util.query_of_text (Lexing.from_channel ich) in
79 print_endline (Util.text_of_result (Gen.execute_query q) nl);
81 with Gen.Discard -> ()
84 let module Util = MQueryUtil in
85 let module Gen = MQueryGenerator in
86 Gen.set_confirm_query default_confirm;
88 print_endline (Util.text_of_result (Gen.locate name) nl);
90 with Gen.Discard -> ()
93 let module Util = MQueryUtil in
94 let module Gen = MQueryGenerator in
95 let queries = ref [] in
97 if List.mem query ! queries then false
98 else begin queries := query :: ! queries; default_confirm query end
100 let rec backward level = function
104 print_string ("? " ^ CicPp.ppterm term ^ nl);
106 let t0 = Sys.time () in
107 let r = Gen.backward [] [] term level in
108 let t1 = Sys.time () -. t0 in
109 let info = List.nth (Gen.get_query_info ()) 0 in
110 print_string ("GEN = " ^ info ^ ":" ^ string_of_float t1 ^ "s" ^ nl);
111 print_string (Util.text_of_result r nl);
113 with Gen.Discard -> ()
115 Gen.set_confirm_query confirm;
116 for level = max m n downto min m n do
117 prerr_endline ("toplevel: backward: trying level " ^
118 string_of_int level);
121 prerr_endline ("toplevel: backward: " ^
122 string_of_int (List.length ! queries) ^
126 prerr_endline "\nUSAGE: toplevel.opt OPTIONS < INPUTFILE\n";
127 prerr_endline "The tool provides a textual interface to the HELM Query Generator, used for";
128 prerr_endline "testing purposes. Toplevel reads its input from stdin and produces ith output";
129 prerr_endline "in HTML on stdout. The options can be one ore more of the following.\n";
130 prerr_endline "OPTIONS:\n";
131 prerr_endline "-h -help shows this help message";
132 prerr_endline "-q -show-queries outputs the generated queries";
133 prerr_endline "-c -db-check checks the database connection";
134 prerr_endline "-r -restricted -nodb enables restricted mode: queries are not issued";
135 prerr_endline "-t -typeof URI outputs the CIC type of the given HELM object";
136 prerr_endline "-x -execute issues a query given in the input file";
137 prerr_endline "-d -disply outputs the CIC terms given in the input file";
138 prerr_endline "-l -levels outputs the cut levels of the CIC terms given in the input file";
139 prerr_endline "-L -locate ALIAS issues the \"Locate\" query for the given alias";
140 prerr_endline "-B -backward LEVEL issues the \"Backward\" query for the given level on all CIC terms";
141 prerr_endline " in the input file";
142 prerr_endline "-MB -multi-backward MAX issues the \"Backward\" query for each level from max to 0 on all";
143 prerr_endline " CIC terms in the input file\n";
144 prerr_endline "NOTES: CIC terms are read with the HELM CIC Textual Parser";
145 prerr_endline " -typeof does not work with inductive types and proofs in progress\n"
148 let rec parse = function
150 | ("-h"|"-help") :: rem -> prerr_help ()
151 | ("-d"|"-display") :: rem -> display (get_terms ())
152 | ("-t"|"-typeof") :: arg :: rem -> pp_type_of arg; parse rem
153 | ("-l"|"-levels") :: rem -> levels (get_terms ())
154 | ("-x"|"-execute") :: rem -> execute stdin; parse rem
155 | ("-q"|"-show-queries") :: rem -> show_queries := true; parse rem
156 | ("-r"|"-restricted"|"-nodb") :: rem -> use_db := false; parse rem
157 | ("-c"|"-db-check") :: rem -> dbc (); parse rem
158 | ("-L"|"-locate") :: arg :: rem -> locate arg; parse rem
159 | ("-B"|"-backward") :: arg :: rem ->
160 let m = (int_of_string arg) in
161 mbackward m m (get_terms ())
162 | ("-MB"|"-multi-backward") :: arg :: rem ->
163 let m = (int_of_string arg) in
164 mbackward m 0 (get_terms ())
165 | _ :: rem -> parse rem
167 parse (List.tl (Array.to_list Sys.argv))
170 let module Gen = MQueryGenerator in
172 Logger.log_callback :=
174 ~print_and_flush:(function s -> print_string s ; flush stdout)) ;
175 Gen.set_log_file "MQGenLog.htm";
177 if not ! db_down then Mqint.close ();
178 Gen.set_confirm_query (fun _ -> true);
179 prerr_endline ("toplevel: done in " ^ string_of_float (Sys.time ()) ^