let parse_environment str =
let stream = Stream.of_string str in
let environment = ref Environment.empty in
+ let multiple_environment = ref Environment.empty in
try
while true do
let alias =
DisambiguateChoices.lookup_num_by_dsc desc
in
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 aliases_of_environment env =
+ Environment.fold
+ (fun domain_item (dsc,_) acc ->
+ let s =
+ 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)
+ in
+ s :: acc)
+ env []
+
+let commands_of_environment env =
+ List.map
+ (fun alias -> GrafiteAst.Alias (dummy_floc, alias))
+ (aliases_of_environment env)
let pp_environment env =
- let aliases =
- Environment.fold
- (fun domain_item (dsc, _) acc ->
- 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 :: acc)
- 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)
+