]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/cic_notation/test_parser.ml
snapshot (first version with [apparently] working mappings between level
[helm.git] / helm / ocaml / cic_notation / test_parser.ml
index bcb7e661b7e37936b993c9c0f40ddc7785171d5d..05a80d982fdfd95cb893535f5c9739a51f22d73b 100644 (file)
 open Printf
 
 let _ =
-  CicNotationEnv.set_pp_term CicNotationPp.pp_term;
+  Helm_registry.set "getter.mode" "remote";
+  Helm_registry.set "getter.url" "http://helm.cs.unibo.it:58081/"
+
+  (* ORRIBLE HACK! conversion:
+   * (Cic.id, string) Hashtbl.t -> (Cic.id, CicNotationtPt.sort_kind) Hashtbl.t
+   *)
+let patch_sort_tbl tbl =
+  let sort_of_string = function
+    | "Prop" -> `Prop
+    | "Set" -> `Set
+    | "Type" | "?" -> `Type
+    | "CProp" -> `CProp
+    | _ -> assert false
+  in
+  let tbl' = Hashtbl.create (Hashtbl.length tbl) in
+  Hashtbl.iter
+    (fun id sort_str -> Hashtbl.add tbl' id (sort_of_string sort_str))
+    tbl;
+  tbl'
+
+let _ =
   let module P = CicNotationPt in
   let level = ref ~-1 in
   let arg_spec = [ "-level", Arg.Set_int level, "set the notation level" ] in
@@ -79,14 +99,40 @@ let _ =
             | P.Print t -> 
                 print_endline (CicNotationPp.pp_term t); flush stdout
             | P.Notation (l1, associativity, precedence, l2) ->
-                prerr_endline "foo";
                 print_endline "Extending notation ..."; flush stdout;
                 ignore
                   (CicNotationParser.extend l1 ?precedence ?associativity
                     (fun env loc ->
                       prerr_endline "ENV";
                       prerr_endline (CicNotationPp.pp_env env);
-                      CicNotationEnv.instantiate env l2)))
+                      CicNotationFwd.instantiate_level2 env l2))
+            | P.Interpretation (l2, l3) ->
+                print_endline "Adding interpretation ..."; flush stdout;
+                let time1 = Unix.gettimeofday () in
+                ignore (CicNotationRew.add_interpretation l2 l3);
+                let time2 = Unix.gettimeofday () in
+                printf "done (patterns compilation took %f seconds)\n"
+                  (time2 -. time1);
+                flush stdout
+            | P.Render uri ->
+                let obj, _ = CicEnvironment.get_obj CicUniv.empty_ugraph uri in
+                let annobj, _, _, id_to_sort, _, _, _ =
+                  Cic2acic.acic_object_of_cic_object obj
+                in
+                let annterm =
+                  match annobj with
+                  | Cic.AConstant (_, _, _, _, ty, _, _)
+                  | Cic.AVariable (_, _, _, ty, _, _) -> ty
+                  | _ -> assert false
+                in
+                let id_to_sort = patch_sort_tbl id_to_sort in
+                let time1 = Unix.gettimeofday () in
+                let t, id_to_uri =
+                  CicNotationRew.ast_of_acic id_to_sort annterm
+                in
+                let time2 = Unix.gettimeofday () in
+                printf "ast creation took %f seconds\n" (time2 -. time1);
+                print_endline (CicNotationPp.pp_term t); flush stdout)
 (*                 CicNotationParser.print_l2_pattern ()) *)
         | 1 -> ignore (CicNotationParser.parse_syntax_pattern istream)
         | 2 ->