X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2FmatitaDisambiguator.ml;h=178c7d8c7f18372fc4c1b768470c4e09d2183921;hb=2026624f827b29c35d54aa67b301250123ea7311;hp=183e775d0630e4b24c6433f455e5aa52d61adc52;hpb=07dde6f87105c18b28fc784b7d596a5d242e1225;p=helm.git diff --git a/helm/matita/matitaDisambiguator.ml b/helm/matita/matitaDisambiguator.ml index 183e775d0..178c7d8c7 100644 --- a/helm/matita/matitaDisambiguator.ml +++ b/helm/matita/matitaDisambiguator.ml @@ -23,26 +23,20 @@ * http://helm.cs.unibo.it/ *) +open MatitaTypes + class parserr () = object - method parseTerm (stream: char Stream.t) = - CicTextualParser2.parse_term stream - - (* TODO Zack: implements methods below *) - method parseTactic (_: char Stream.t) : DisambiguateTypes.tactic = - MatitaTypes.not_implemented "parserr.parseTactic" - method parseTactical (_: char Stream.t) : DisambiguateTypes.tactical = - MatitaTypes.not_implemented "parserr.parseTactical" - method parseCommand (_: char Stream.t) : DisambiguateTypes.command = - MatitaTypes.not_implemented "parserr.parseCommand" - method parseScript (_: char Stream.t) : DisambiguateTypes.script = - MatitaTypes.not_implemented "parserr.parseScript" + method parseTerm = CicTextualParser2.parse_term + method parseTactical = CicTextualParser2.parse_tactical end -class disambiguator - ~parserr ~mqiconn ~(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 @@ -50,33 +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 input_or_locate_uri ~(title:string) = - (* TODO 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 *) - MatitaTypes.not_implemented - "MatitaDisambiguator: input_or_locate_uri callback" + 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 + 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 + 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 - method setParserr p = parserr <- p - method disambiguateTermAst - ~context ~metasenv ?(env = DisambiguateTypes.Environment.empty) termAst - = - disambiguate_term mqiconn context metasenv termAst ~aliases:env + 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 ~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 disambiguateTerm ~context ~metasenv ?env stream = - self#disambiguateTermAst ~context ~metasenv ?env + 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 +