equal
deleted
inserted
replaced
190 Block of int * symb list; |
190 Block of int * symb list; |
191 |
191 |
192 type prtabs = (string * ((symb list * int * int) list) Symtab.table) list; |
192 type prtabs = (string * ((symb list * int * int) list) Symtab.table) list; |
193 |
193 |
194 fun mode_tab prtabs mode = the_default Symtab.empty (AList.lookup (op =) prtabs mode); |
194 fun mode_tab prtabs mode = the_default Symtab.empty (AList.lookup (op =) prtabs mode); |
195 fun mode_tabs prtabs modes = List.mapPartial (AList.lookup (op =) prtabs) (modes @ [""]); |
195 fun mode_tabs prtabs modes = map_filter (AList.lookup (op =) prtabs) (modes @ [""]); |
196 |
196 |
197 |
197 |
198 (* xprod_to_fmt *) |
198 (* xprod_to_fmt *) |
199 |
199 |
200 fun xprod_to_fmt (SynExt.XProd (_, _, "", _)) = NONE |
200 fun xprod_to_fmt (SynExt.XProd (_, _, "", _)) = NONE |
242 |
242 |
243 val empty_prtabs = []; |
243 val empty_prtabs = []; |
244 |
244 |
245 fun change_prtabs f mode xprods prtabs = |
245 fun change_prtabs f mode xprods prtabs = |
246 let |
246 let |
247 val fmts = List.mapPartial xprod_to_fmt xprods; |
247 val fmts = map_filter xprod_to_fmt xprods; |
248 val tab = fold f fmts (mode_tab prtabs mode); |
248 val tab = fold f fmts (mode_tab prtabs mode); |
249 in AList.update (op =) (mode, tab) prtabs end; |
249 in AList.update (op =) (mode, tab) prtabs end; |
250 |
250 |
251 fun extend_prtabs m = change_prtabs Symtab.update_list m; |
251 fun extend_prtabs m = change_prtabs Symtab.update_list m; |
252 fun remove_prtabs m = change_prtabs (Symtab.remove_list (op =)) m; |
252 fun remove_prtabs m = change_prtabs (Symtab.remove_list (op =)) m; |