src/Pure/Syntax/syntax.ML
changeset 2706 91a640a91c6e
parent 2700 80e6b48c5204
child 2913 ce271fa4d8e2
equal deleted inserted replaced
2705:d6e83a02061d 2706:91a640a91c6e
   104 
   104 
   105 fun merge_tokentrtabs tabs1 tabs2 =
   105 fun merge_tokentrtabs tabs1 tabs2 =
   106   let
   106   let
   107     fun eq_tr ((c1, (_, s1)), (c2, (_, s2))) = c1 = c2 andalso s1 = s2;
   107     fun eq_tr ((c1, (_, s1)), (c2, (_, s2))) = c1 = c2 andalso s1 = s2;
   108 
   108 
       
   109     fun name (s, _) = implode (tl (explode s));
       
   110 
   109     fun merge mode =
   111     fun merge mode =
   110       let
   112       let
   111         val trs1 = assocs tabs1 mode;
   113         val trs1 = assocs tabs1 mode;
   112         val trs2 = assocs tabs2 mode;
   114         val trs2 = assocs tabs2 mode;
   113         val trs = gen_distinct eq_tr (trs1 @ trs2);
   115         val trs = gen_distinct eq_tr (trs1 @ trs2);
   114       in
   116       in
   115         (case gen_duplicates eq_fst trs of
   117         (case gen_duplicates eq_fst trs of
   116           [] => (mode, trs)
   118           [] => (mode, trs)
   117         | dups => error ("More than one token translation function in mode " ^
   119         | dups => error ("More than one token translation function in mode " ^
   118             quote mode ^ " for " ^ commas_quote (map fst dups)))
   120             quote mode ^ " for " ^ commas_quote (map name dups)))
   119       end;
   121       end;
   120   in
   122   in
   121     map merge (distinct (map fst (tabs1 @ tabs2)))
   123     map merge (distinct (map fst (tabs1 @ tabs2)))
   122   end;
   124   end;
   123 
   125