1 (* Copyright (C) 2005, 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/
26 open DisambiguateTypes
28 let parse_environment str =
29 let stream = Ulexing.from_utf8_string str in
30 let environment = ref Environment.empty in
31 let multiple_environment = ref Environment.empty in
35 match GrafiteParser.parse_statement stream with
36 GrafiteAst.Executable (_, GrafiteAst.Command (_, GrafiteAst.Alias (_,alias)))
38 | _ -> assert false in
40 (*CSC: Warning: this code should be factorized with the corresponding
41 code in MatitaEngine *)
43 GrafiteAst.Ident_alias (id,uri) ->
45 (uri,(fun _ _ _-> CicUtil.term_of_uri (UriManager.uri_of_string uri)))
46 | GrafiteAst.Symbol_alias (symb,instance,desc) ->
47 Symbol (symb,instance),
48 DisambiguateChoices.lookup_symbol_by_dsc symb desc
49 | GrafiteAst.Number_alias (instance,desc) ->
51 DisambiguateChoices.lookup_num_by_dsc desc
53 environment := Environment.add key value !environment;
54 multiple_environment := Environment.cons key value !multiple_environment;
58 !environment, !multiple_environment
60 let alias_of_domain_and_codomain_items domain_item (dsc,_) =
61 match domain_item with
62 Id id -> GrafiteAst.Ident_alias (id, dsc)
63 | Symbol (symb, i) -> GrafiteAst.Symbol_alias (symb, i, dsc)
64 | Num i -> GrafiteAst.Number_alias (i, dsc)
66 let aliases_of_environment env =
68 (fun domain_item codomain_item acc ->
69 alias_of_domain_and_codomain_items domain_item codomain_item::acc
72 let aliases_of_domain_and_codomain_items_list l =
74 (fun acc (domain_item,codomain_item) ->
75 alias_of_domain_and_codomain_items domain_item codomain_item::acc
78 let commands_of_domain_and_codomain_items_list l =
80 (fun alias -> GrafiteAst.Alias (dummy_floc, alias))
81 (aliases_of_domain_and_codomain_items_list l)
83 let pp_environment env =
84 let aliases = aliases_of_environment env in
86 List.map (fun alias -> GrafiteAstPp.pp_alias alias ^ ".") aliases
88 String.concat "\n" (List.sort compare strings)