39 val delims_of: xprod list -> string list list |
39 val delims_of: xprod list -> string list list |
40 datatype syn_ext = |
40 datatype syn_ext = |
41 Syn_Ext of { |
41 Syn_Ext of { |
42 xprods: xprod list, |
42 xprods: xprod list, |
43 consts: string list, |
43 consts: string list, |
44 prmodes: string list, |
|
45 parse_ast_translation: (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list, |
44 parse_ast_translation: (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list, |
46 parse_rules: (Ast.ast * Ast.ast) list, |
45 parse_rules: (Ast.ast * Ast.ast) list, |
47 parse_translation: (string * ((Proof.context -> term list -> term) * stamp)) list, |
46 parse_translation: (string * ((Proof.context -> term list -> term) * stamp)) list, |
48 print_translation: (string * ((Proof.context -> typ -> term list -> term) * stamp)) list, |
47 print_translation: (string * ((Proof.context -> typ -> term list -> term) * stamp)) list, |
49 print_rules: (Ast.ast * Ast.ast) list, |
48 print_rules: (Ast.ast * Ast.ast) list, |
50 print_ast_translation: (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list, |
49 print_ast_translation: (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list} |
51 token_translation: (string * string * (Proof.context -> string -> Pretty.T)) list} |
|
52 val mfix_delims: string -> string list |
50 val mfix_delims: string -> string list |
53 val mfix_args: string -> int |
51 val mfix_args: string -> int |
54 val syn_ext': bool -> (string -> bool) -> mfix list -> |
52 val syn_ext': bool -> (string -> bool) -> mfix list -> |
55 string list -> (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list * |
53 string list -> (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list * |
56 (string * ((Proof.context -> term list -> term) * stamp)) list * |
54 (string * ((Proof.context -> term list -> term) * stamp)) list * |
57 (string * ((Proof.context -> typ -> term list -> term) * stamp)) list * |
55 (string * ((Proof.context -> typ -> term list -> term) * stamp)) list * |
58 (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list |
56 (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list -> |
59 -> (string * string * (Proof.context -> string -> Pretty.T)) list |
57 (Ast.ast * Ast.ast) list * (Ast.ast * Ast.ast) list -> syn_ext |
60 -> (Ast.ast * Ast.ast) list * (Ast.ast * Ast.ast) list -> syn_ext |
|
61 val syn_ext: mfix list -> string list -> |
58 val syn_ext: mfix list -> string list -> |
62 (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list * |
59 (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list * |
63 (string * ((Proof.context -> term list -> term) * stamp)) list * |
60 (string * ((Proof.context -> term list -> term) * stamp)) list * |
64 (string * ((Proof.context -> typ -> term list -> term) * stamp)) list * |
61 (string * ((Proof.context -> typ -> term list -> term) * stamp)) list * |
65 (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list |
62 (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list -> |
66 -> (string * string * (Proof.context -> string -> Pretty.T)) list |
63 (Ast.ast * Ast.ast) list * (Ast.ast * Ast.ast) list -> syn_ext |
67 -> (Ast.ast * Ast.ast) list * (Ast.ast * Ast.ast) list -> syn_ext |
|
68 val syn_ext_const_names: string list -> syn_ext |
64 val syn_ext_const_names: string list -> syn_ext |
69 val syn_ext_rules: (Ast.ast * Ast.ast) list * (Ast.ast * Ast.ast) list -> syn_ext |
65 val syn_ext_rules: (Ast.ast * Ast.ast) list * (Ast.ast * Ast.ast) list -> syn_ext |
70 val syn_ext_trfuns: |
66 val syn_ext_trfuns: |
71 (string * ((Ast.ast list -> Ast.ast) * stamp)) list * |
67 (string * ((Ast.ast list -> Ast.ast) * stamp)) list * |
72 (string * ((term list -> term) * stamp)) list * |
68 (string * ((term list -> term) * stamp)) list * |
75 val syn_ext_advanced_trfuns: |
71 val syn_ext_advanced_trfuns: |
76 (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list * |
72 (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list * |
77 (string * ((Proof.context -> term list -> term) * stamp)) list * |
73 (string * ((Proof.context -> term list -> term) * stamp)) list * |
78 (string * ((Proof.context -> typ -> term list -> term) * stamp)) list * |
74 (string * ((Proof.context -> typ -> term list -> term) * stamp)) list * |
79 (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list -> syn_ext |
75 (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list -> syn_ext |
80 val syn_ext_tokentrfuns: (string * string * (Proof.context -> string -> Pretty.T)) list -> syn_ext |
|
81 val pure_ext: syn_ext |
76 val pure_ext: syn_ext |
82 end; |
77 end; |
83 |
78 |
84 structure Syn_Ext: SYN_EXT = |
79 structure Syn_Ext: SYN_EXT = |
85 struct |
80 struct |
324 |
319 |
325 datatype syn_ext = |
320 datatype syn_ext = |
326 Syn_Ext of { |
321 Syn_Ext of { |
327 xprods: xprod list, |
322 xprods: xprod list, |
328 consts: string list, |
323 consts: string list, |
329 prmodes: string list, |
|
330 parse_ast_translation: (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list, |
324 parse_ast_translation: (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list, |
331 parse_rules: (Ast.ast * Ast.ast) list, |
325 parse_rules: (Ast.ast * Ast.ast) list, |
332 parse_translation: (string * ((Proof.context -> term list -> term) * stamp)) list, |
326 parse_translation: (string * ((Proof.context -> term list -> term) * stamp)) list, |
333 print_translation: (string * ((Proof.context -> typ -> term list -> term) * stamp)) list, |
327 print_translation: (string * ((Proof.context -> typ -> term list -> term) * stamp)) list, |
334 print_rules: (Ast.ast * Ast.ast) list, |
328 print_rules: (Ast.ast * Ast.ast) list, |
335 print_ast_translation: (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list, |
329 print_ast_translation: (string * ((Proof.context -> Ast.ast list -> Ast.ast) * stamp)) list}; |
336 token_translation: (string * string * (Proof.context -> string -> Pretty.T)) list}; |
|
337 |
330 |
338 |
331 |
339 (* syn_ext *) |
332 (* syn_ext *) |
340 |
333 |
341 fun syn_ext' convert is_logtype mfixes consts trfuns tokentrfuns (parse_rules, print_rules) = |
334 fun syn_ext' convert is_logtype mfixes consts trfuns (parse_rules, print_rules) = |
342 let |
335 let |
343 val (parse_ast_translation, parse_translation, print_translation, |
336 val (parse_ast_translation, parse_translation, print_translation, |
344 print_ast_translation) = trfuns; |
337 print_ast_translation) = trfuns; |
345 |
338 |
346 val (xprods, parse_rules') = map (mfix_to_xprod convert is_logtype) mfixes |
339 val (xprods, parse_rules') = map (mfix_to_xprod convert is_logtype) mfixes |
349 distinct (op =) (map (fn Mfix x => #3 x) mfixes @ map (fn XProd x => #3 x) xprods); |
342 distinct (op =) (map (fn Mfix x => #3 x) mfixes @ map (fn XProd x => #3 x) xprods); |
350 in |
343 in |
351 Syn_Ext { |
344 Syn_Ext { |
352 xprods = xprods, |
345 xprods = xprods, |
353 consts = union (op =) consts mfix_consts, |
346 consts = union (op =) consts mfix_consts, |
354 prmodes = distinct (op =) (map (fn (m, _, _) => m) tokentrfuns), |
|
355 parse_ast_translation = parse_ast_translation, |
347 parse_ast_translation = parse_ast_translation, |
356 parse_rules = parse_rules' @ parse_rules, |
348 parse_rules = parse_rules' @ parse_rules, |
357 parse_translation = parse_translation, |
349 parse_translation = parse_translation, |
358 print_translation = print_translation, |
350 print_translation = print_translation, |
359 print_rules = map swap parse_rules' @ print_rules, |
351 print_rules = map swap parse_rules' @ print_rules, |
360 print_ast_translation = print_ast_translation, |
352 print_ast_translation = print_ast_translation} |
361 token_translation = tokentrfuns} |
|
362 end; |
353 end; |
363 |
354 |
364 |
355 |
365 val syn_ext = syn_ext' true (K false); |
356 val syn_ext = syn_ext' true (K false); |
366 |
357 |
367 fun syn_ext_const_names cs = syn_ext [] cs ([], [], [], []) [] ([], []); |
358 fun syn_ext_const_names cs = syn_ext [] cs ([], [], [], []) ([], []); |
368 fun syn_ext_rules rules = syn_ext [] [] ([], [], [], []) [] rules; |
359 fun syn_ext_rules rules = syn_ext [] [] ([], [], [], []) rules; |
369 fun syn_ext_advanced_trfuns trfuns = syn_ext [] [] trfuns [] ([], []); |
360 fun syn_ext_advanced_trfuns trfuns = syn_ext [] [] trfuns ([], []); |
370 fun syn_ext_tokentrfuns trfuns = syn_ext [] [] ([], [], [], []) trfuns ([], []); |
|
371 |
361 |
372 fun syn_ext_trfuns (atrs, trs, tr's, atr's) = |
362 fun syn_ext_trfuns (atrs, trs, tr's, atr's) = |
373 let fun simple (name, (f, s)) = (name, (K f, s)) in |
363 let fun simple (name, (f, s)) = (name, (K f, s)) in |
374 syn_ext_advanced_trfuns (map simple atrs, map simple trs, map simple tr's, map simple atr's) |
364 syn_ext_advanced_trfuns (map simple atrs, map simple trs, map simple tr's, map simple atr's) |
375 end; |
365 end; |
392 Mfix ("'(_')", spropT --> spropT, "", [0], max_pri), |
382 Mfix ("'(_')", spropT --> spropT, "", [0], max_pri), |
393 Mfix ("_::_", [logicT, typeT] ---> logicT, "_constrain", [4, 0], 3), |
383 Mfix ("_::_", [logicT, typeT] ---> logicT, "_constrain", [4, 0], 3), |
394 Mfix ("_::_", [spropT, typeT] ---> spropT, "_constrain", [4, 0], 3)] |
384 Mfix ("_::_", [spropT, typeT] ---> spropT, "_constrain", [4, 0], 3)] |
395 token_markers |
385 token_markers |
396 ([], [], [], []) |
386 ([], [], [], []) |
397 [] |
|
398 ([], []); |
387 ([], []); |
399 |
388 |
400 end; |
389 end; |