open DisambiguateTypes
let parse_environment str =
- let stream = Stream.of_string str in
+ let stream = Ulexing.from_utf8_string str in
let environment = ref Environment.empty in
+ let multiple_environment = ref Environment.empty in
try
while true do
let alias =
Num instance,
DisambiguateChoices.lookup_num_by_dsc desc
in
- environment := Environment.cons key value !environment;
+ environment := Environment.add key value !environment;
+ multiple_environment := Environment.cons key value !multiple_environment;
done;
assert false
with End_of_file ->
- !environment
+ !environment, !multiple_environment
+
+let alias_of_domain_and_codomain_items domain_item (dsc,_) =
+ match domain_item with
+ Id id -> GrafiteAst.Ident_alias (id, dsc)
+ | Symbol (symb, i) -> GrafiteAst.Symbol_alias (symb, i, dsc)
+ | Num i -> GrafiteAst.Number_alias (i, dsc)
+
+let aliases_of_environment env =
+ Environment.fold
+ (fun domain_item codomain_item acc ->
+ alias_of_domain_and_codomain_items domain_item codomain_item::acc
+ ) env []
+
+let aliases_of_domain_and_codomain_items_list l =
+ List.fold_left
+ (fun acc (domain_item,codomain_item) ->
+ alias_of_domain_and_codomain_items domain_item codomain_item::acc
+ ) [] l
+
+let commands_of_domain_and_codomain_items_list l =
+ List.map
+ (fun alias -> GrafiteAst.Alias (dummy_floc, alias))
+ (aliases_of_domain_and_codomain_items_list l)
let pp_environment env =
- let aliases =
- Environment.fold
- (fun domain_item codomain_items acc ->
- List.fold_left
- (fun strings (dsc, _) ->
- let s =
- match domain_item with
- | Id id ->
- GrafiteAstPp.pp_alias (GrafiteAst.Ident_alias (id, dsc)) ^ "."
- | Symbol (symb, i) ->
- GrafiteAstPp.pp_alias (GrafiteAst.Symbol_alias (symb, i, dsc))
- ^ "."
- | Num i ->
- GrafiteAstPp.pp_alias (GrafiteAst.Number_alias (i, dsc)) ^ "."
- in
- s :: strings)
- acc codomain_items)
- env []
+ let aliases = aliases_of_environment env in
+ let strings =
+ List.map (fun alias -> GrafiteAstPp.pp_alias alias ^ ".") aliases
in
- String.concat "\n" (List.sort compare aliases)
+ String.concat "\n" (List.sort compare strings)