1 (* Copyright (C) 2004, HELM Team.
3 * This file is part of HELM, an Hypertextual, Electronic
4 * Library of Mathematics, developed at the Computer Science
5 * Department, University of Bologna, Italy.
7 * HELM is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * HELM is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with HELM; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
22 * For details, see the HELM World-Wide-Web page,
23 * http://helm.cs.unibo.it/
30 method parseTerm = CicTextualParser2.parse_term
31 method parseTactical = CicTextualParser2.parse_tactical
35 ~parserr ~dbd ~(chooseUris: MatitaTypes.choose_uris_callback)
36 ~(chooseInterp: MatitaTypes.choose_interp_callback) ()
38 let disambiguate_term =
39 let module Callbacks =
41 let interactive_user_uri_choice
42 ~selection_mode ?ok ?(enable_button_for_non_vars = true) ~title ~msg
45 chooseUris ~selection_mode ~title ~msg
46 ~nonvars_button:enable_button_for_non_vars uris
48 let interactive_interpretation_choice = chooseInterp
49 let input_or_locate_uri ~(title:string) ?id =
50 (* Zack: I try to avoid using this callback. I therefore assume that
51 * the presence of an identifier that can't be resolved via "locate"
52 * query is a syntax error *)
53 let msg = match id with Some id -> id | _ -> "" in
54 raise (Unbound_identifier msg)
57 let module Disambiguator = Disambiguate.Make (Callbacks) in
58 Disambiguator.disambiguate_term
61 val mutable parserr: parserr = parserr
62 method parserr = parserr
63 method setParserr p = parserr <- p
65 val mutable _env = DisambiguateTypes.Environment.empty
67 method setEnv e = _env <- e
69 method disambiguateTermAst ?(context = []) ?(metasenv = []) ?env termAst =
70 let (save_state, env) =
72 | Some env -> (false, env)
73 | None -> (true, _env)
75 match disambiguate_term ~initial_ugraph:CicUniv.empty_ugraph
76 ~dbd context metasenv termAst ~aliases:env with
77 | [ (env, metasenv, term,ugraph) as x ] ->
78 if save_state then self#setEnv env;
82 method disambiguateTermAsts ?(metasenv = []) ?env asts =
83 let ast = CicAst.pack asts in
84 let (env, metasenv, term, ugraph) =
85 self#disambiguateTermAst ~context:[] ~metasenv ?env ast
87 (env, metasenv, CicUtil.unpack term, ugraph)
89 method disambiguateTerm ?context ?metasenv ?env stream =
90 self#disambiguateTermAst ?context ?metasenv ?env
91 (parserr#parseTerm stream)