X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2FmatitaDisambiguator.ml;h=178c7d8c7f18372fc4c1b768470c4e09d2183921;hb=6912a028bef118d8e9d7c2847200510a9b055c6a;hp=bb7f2807dee162fe600850abe176d99dd214a773;hpb=142d3076f2a4dc17d9045c2bba4d4b01eddfd008;p=helm.git diff --git a/helm/matita/matitaDisambiguator.ml b/helm/matita/matitaDisambiguator.ml index bb7f2807d..178c7d8c7 100644 --- a/helm/matita/matitaDisambiguator.ml +++ b/helm/matita/matitaDisambiguator.ml @@ -31,10 +31,12 @@ class parserr () = method parseTactical = CicTextualParser2.parse_tactical end -class disambiguator - ~parserr ~dbd ~(chooseUris: MatitaTypes.choose_uris_callback) - ~(chooseInterp: MatitaTypes.choose_interp_callback) () - = +let parserr () = new parserr () +let parserr_instance = MatitaMisc.singleton parserr + +class disambiguator () = + let _chooseUris = ref mono_uris_callback in + let _chooseInterp = ref mono_interp_callback in let disambiguate_term = let module Callbacks = struct @@ -42,44 +44,63 @@ class disambiguator ~selection_mode ?ok ?(enable_button_for_non_vars = true) ~title ~msg ~id uris = - chooseUris ~selection_mode ~title ~msg + !_chooseUris ~selection_mode ~title ~msg ~nonvars_button:enable_button_for_non_vars uris - let interactive_interpretation_choice = chooseInterp + let interactive_interpretation_choice interp = !_chooseInterp interp + let input_or_locate_uri ~(title:string) ?id = (* Zack: I try to avoid using this callback. I therefore assume that * the presence of an identifier that can't be resolved via "locate" * query is a syntax error *) - let msg = match id with Some id -> id | _ -> "" in + let msg = match id with Some id -> id | _ -> "_" in raise (Unbound_identifier msg) end in let module Disambiguator = Disambiguate.Make (Callbacks) in - Disambiguator.disambiguate_term + Disambiguator.disambiguate_term in object (self) - val mutable parserr: parserr = parserr - method parserr = parserr - method setParserr p = parserr <- p - val mutable _env = DisambiguateTypes.Environment.empty method env = _env method setEnv e = _env <- e + method chooseUris = !_chooseUris + method setChooseUris f = _chooseUris := f + + method chooseInterp = !_chooseInterp + method setChooseInterp f = _chooseInterp := f + + val parserr = parserr_instance () + method parserr = parserr + + val dbd = MatitaMisc.dbd_instance () + method disambiguateTermAst ?(context = []) ?(metasenv = []) ?env termAst = let (save_state, env) = match env with | Some env -> (false, env) | None -> (true, _env) in - match disambiguate_term ~dbd context metasenv termAst ~aliases:env with - | [ (env, metasenv, term) as x ] -> + match disambiguate_term ~initial_ugraph:CicUniv.empty_ugraph + ~dbd context metasenv termAst ~aliases:env with + | [ (env, metasenv, term,ugraph) as x ] -> if save_state then self#setEnv env; x | _ -> assert false + method disambiguateTermAsts ?(metasenv = []) ?env asts = + let ast = CicAst.pack asts in + let (env, metasenv, term, ugraph) = + self#disambiguateTermAst ~context:[] ~metasenv ?env ast + in + (env, metasenv, CicUtil.unpack term, ugraph) + method disambiguateTerm ?context ?metasenv ?env stream = self#disambiguateTermAst ?context ?metasenv ?env (parserr#parseTerm stream) end +let disambiguator () = new disambiguator () +let instance = MatitaMisc.singleton disambiguator +