| author | paulson | 
| Wed, 08 Jan 1997 15:17:25 +0100 | |
| changeset 2495 | 82ec47e0a8d3 | 
| parent 2383 | 4127499d9b52 | 
| child 2504 | f5e2288c2697 | 
| permissions | -rw-r--r-- | 
| 18 | 1 | (* Title: Pure/Syntax/syntax.ML | 
| 0 | 2 | ID: $Id$ | 
| 3 | Author: Tobias Nipkow and Markus Wenzel, TU Muenchen | |
| 18 | 4 | |
| 5 | Root of Isabelle's syntax module. | |
| 0 | 6 | *) | 
| 7 | ||
| 556 | 8 | infix |-> <-| <->; | 
| 9 | ||
| 260 | 10 | signature BASIC_SYNTAX = | 
| 2383 | 11 | sig | 
| 260 | 12 | include AST0 | 
| 556 | 13 | include SYN_TRANS0 | 
| 14 | include MIXFIX0 | |
| 260 | 15 | include PRINTER0 | 
| 2383 | 16 | end; | 
| 260 | 17 | |
| 0 | 18 | signature SYNTAX = | 
| 2383 | 19 | sig | 
| 260 | 20 | include AST1 | 
| 0 | 21 | include LEXICON0 | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 22 | include SYN_EXT0 | 
| 0 | 23 | include TYPE_EXT0 | 
| 556 | 24 | include SYN_TRANS1 | 
| 25 | include MIXFIX1 | |
| 0 | 26 | include PRINTER0 | 
| 1158 | 27 | datatype 'a trrule = | 
| 2287 | 28 | |-> of 'a * 'a | | 
| 29 | <-| of 'a * 'a | | |
| 30 | <-> of 'a * 'a | |
| 556 | 31 | type syntax | 
| 32 | val extend_log_types: syntax -> string list -> syntax | |
| 33 | val extend_type_gram: syntax -> (string * int * mixfix) list -> syntax | |
| 2366 | 34 | val extend_const_gram: syntax -> string * bool -> (string * typ * mixfix) list -> syntax | 
| 556 | 35 | val extend_consts: syntax -> string list -> syntax | 
| 36 | val extend_trfuns: syntax -> | |
| 37 | (string * (ast list -> ast)) list * | |
| 38 | (string * (term list -> term)) list * | |
| 39 | (string * (term list -> term)) list * | |
| 40 | (string * (ast list -> ast)) list -> syntax | |
| 2383 | 41 | val extend_trfunsT: syntax -> (string * (typ -> term list -> term)) list -> syntax | 
| 1158 | 42 | val extend_trrules: syntax -> (string * string) trrule list -> syntax | 
| 43 | val extend_trrules_i: syntax -> ast trrule list -> syntax | |
| 556 | 44 | val merge_syntaxes: syntax -> syntax -> syntax | 
| 45 | val type_syn: syntax | |
| 764 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 clasohm parents: 
624diff
changeset | 46 | val pure_syn: syntax | 
| 556 | 47 | val print_gram: syntax -> unit | 
| 48 | val print_trans: syntax -> unit | |
| 49 | val print_syntax: syntax -> unit | |
| 50 | val test_read: syntax -> string -> string -> unit | |
| 624 | 51 | val read: syntax -> typ -> string -> term list | 
| 556 | 52 | val read_typ: syntax -> (indexname -> sort) -> string -> typ | 
| 53 | val simple_read_typ: string -> typ | |
| 922 
196ca0973a6d
added CPure (curried functions) and ProtoPure (ancestor of Pure and CPure)
 clasohm parents: 
888diff
changeset | 54 | val pretty_term: bool -> syntax -> term -> Pretty.T | 
| 556 | 55 | val pretty_typ: syntax -> typ -> Pretty.T | 
| 922 
196ca0973a6d
added CPure (curried functions) and ProtoPure (ancestor of Pure and CPure)
 clasohm parents: 
888diff
changeset | 56 | val string_of_term: bool -> syntax -> term -> string | 
| 556 | 57 | val string_of_typ: syntax -> typ -> string | 
| 58 | val simple_string_of_typ: typ -> string | |
| 59 | val simple_pprint_typ: typ -> pprint_args -> unit | |
| 882 
b118d1ea0dfd
moved ambiguity_level from sign.ML to Syntax/syntax.ML
 clasohm parents: 
865diff
changeset | 60 | val ambiguity_level: int ref | 
| 2383 | 61 | end; | 
| 0 | 62 | |
| 1511 | 63 | structure Syntax : SYNTAX = | 
| 0 | 64 | struct | 
| 65 | ||
| 1511 | 66 | open Lexicon SynExt Ast Parser TypeExt SynTrans Mixfix Printer; | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 67 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 68 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 69 | (** tables of translation functions **) | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 70 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 71 | (*the ref serves as unique id*) | 
| 2383 | 72 | (*does not subsume typed print translations*) | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 73 | type 'a trtab = (('a list -> 'a) * unit ref) Symtab.table;
 | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 74 | |
| 383 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 75 | val dest_trtab = Symtab.dest; | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 76 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 77 | fun lookup_trtab tab c = | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 78 | apsome fst (Symtab.lookup (tab, c)); | 
| 0 | 79 | |
| 80 | ||
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 81 | (* empty, extend, merge trtabs *) | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 82 | |
| 383 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 83 | fun err_dup_trfuns name cs = | 
| 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 84 |   error ("More than one " ^ name ^ " for " ^ commas_quote cs);
 | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 85 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 86 | val empty_trtab = Symtab.null; | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 87 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 88 | fun extend_trtab tab trfuns name = | 
| 383 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 89 | Symtab.extend_new (tab, map (fn (c, f) => (c, (f, ref ()))) trfuns) | 
| 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 90 | handle Symtab.DUPS cs => err_dup_trfuns name cs; | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 91 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 92 | fun merge_trtabs tab1 tab2 name = | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 93 | Symtab.merge eq_snd (tab1, tab2) | 
| 383 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 94 | handle Symtab.DUPS cs => err_dup_trfuns name cs; | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 95 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 96 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 97 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 98 | (** tables of translation rules **) | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 99 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 100 | type ruletab = (ast * ast) list Symtab.table; | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 101 | |
| 383 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 102 | fun dest_ruletab tab = flat (map snd (Symtab.dest tab)); | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 103 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 104 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 105 | (* lookup_ruletab *) | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 106 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 107 | fun lookup_ruletab tab = | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 108 | if Symtab.is_null tab then None | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 109 | else Some (fn a => Symtab.lookup_multi (tab, a)); | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 110 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 111 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 112 | (* empty, extend, merge ruletabs *) | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 113 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 114 | val empty_ruletab = Symtab.null; | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 115 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 116 | fun extend_ruletab tab rules = | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 117 | generic_extend (op =) Symtab.dest_multi Symtab.make_multi tab | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 118 | (map (fn r => (head_of_rule r, r)) (distinct rules)); | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 119 | |
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 120 | fun merge_ruletabs tab1 tab2 = | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 121 | generic_merge (op =) Symtab.dest_multi Symtab.make_multi tab1 tab2; | 
| 0 | 122 | |
| 123 | ||
| 124 | ||
| 125 | (** datatype syntax **) | |
| 126 | ||
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 127 | datatype syntax = | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 128 |   Syntax of {
 | 
| 18 | 129 | lexicon: lexicon, | 
| 764 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 clasohm parents: 
624diff
changeset | 130 | logtypes: string list, | 
| 18 | 131 | gram: gram, | 
| 132 | consts: string list, | |
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 133 | parse_ast_trtab: ast trtab, | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 134 | parse_ruletab: ruletab, | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 135 | parse_trtab: term trtab, | 
| 2383 | 136 | print_trtab: ((typ -> term list -> term) * unit ref) Symtab.table, | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 137 | print_ruletab: ruletab, | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 138 | print_ast_trtab: ast trtab, | 
| 2202 
cc15a7bfbe12
extend_const_gram now supports multiple disjoint printer tables;
 wenzelm parents: 
1813diff
changeset | 139 | prtabs: prtabs}; | 
| 0 | 140 | |
| 18 | 141 | |
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 142 | (* empty_syntax *) | 
| 18 | 143 | |
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 144 | val empty_syntax = | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 145 |   Syntax {
 | 
| 167 | 146 | lexicon = empty_lexicon, | 
| 764 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 clasohm parents: 
624diff
changeset | 147 | logtypes = [], | 
| 171 | 148 | gram = empty_gram, | 
| 167 | 149 | consts = [], | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 150 | parse_ast_trtab = empty_trtab, | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 151 | parse_ruletab = empty_ruletab, | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 152 | parse_trtab = empty_trtab, | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 153 | print_trtab = empty_trtab, | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 154 | print_ruletab = empty_ruletab, | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 155 | print_ast_trtab = empty_trtab, | 
| 2202 
cc15a7bfbe12
extend_const_gram now supports multiple disjoint printer tables;
 wenzelm parents: 
1813diff
changeset | 156 | prtabs = empty_prtabs}; | 
| 167 | 157 | |
| 158 | ||
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 159 | (* extend_syntax *) | 
| 167 | 160 | |
| 2366 | 161 | fun extend_syntax (mode, inout) (Syntax tabs) syn_ext = | 
| 167 | 162 | let | 
| 2383 | 163 |     val {lexicon, logtypes = logtypes1, gram, consts = consts1,
 | 
| 2366 | 164 | parse_ast_trtab, parse_ruletab, parse_trtab, print_trtab, print_ruletab, | 
| 165 | print_ast_trtab, prtabs} = tabs; | |
| 764 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 clasohm parents: 
624diff
changeset | 166 |     val SynExt {logtypes = logtypes2, xprods, consts = consts2, parse_ast_translation,
 | 
| 167 | 167 | parse_rules, parse_translation, print_translation, print_rules, | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 168 | print_ast_translation} = syn_ext; | 
| 167 | 169 | in | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 170 |     Syntax {
 | 
| 2366 | 171 | lexicon = if inout then extend_lexicon lexicon (delims_of xprods) else lexicon, | 
| 764 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 clasohm parents: 
624diff
changeset | 172 | logtypes = extend_list logtypes1 logtypes2, | 
| 2366 | 173 | gram = if inout then extend_gram gram xprods else gram, | 
| 167 | 174 | consts = consts2 union consts1, | 
| 175 | parse_ast_trtab = | |
| 176 | extend_trtab parse_ast_trtab parse_ast_translation "parse ast translation", | |
| 177 | parse_ruletab = extend_ruletab parse_ruletab parse_rules, | |
| 178 | parse_trtab = extend_trtab parse_trtab parse_translation "parse translation", | |
| 179 | print_trtab = extend_trtab print_trtab print_translation "print translation", | |
| 180 | print_ruletab = extend_ruletab print_ruletab print_rules, | |
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 181 | print_ast_trtab = | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 182 | extend_trtab print_ast_trtab print_ast_translation "print ast translation", | 
| 2383 | 183 | prtabs = extend_prtabs prtabs mode xprods} | 
| 18 | 184 | end; | 
| 185 | ||
| 186 | ||
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 187 | (* merge_syntaxes *) | 
| 0 | 188 | |
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 189 | fun merge_syntaxes (Syntax tabs1) (Syntax tabs2) = | 
| 0 | 190 | let | 
| 2383 | 191 |     val {lexicon = lexicon1, logtypes = logtypes1, gram = gram1,
 | 
| 2366 | 192 | consts = consts1, parse_ast_trtab = parse_ast_trtab1, parse_ruletab = parse_ruletab1, | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 193 | parse_trtab = parse_trtab1, print_trtab = print_trtab1, | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 194 | print_ruletab = print_ruletab1, print_ast_trtab = print_ast_trtab1, | 
| 2202 
cc15a7bfbe12
extend_const_gram now supports multiple disjoint printer tables;
 wenzelm parents: 
1813diff
changeset | 195 | prtabs = prtabs1} = tabs1; | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 196 | |
| 2383 | 197 |     val {lexicon = lexicon2, logtypes = logtypes2, gram = gram2,
 | 
| 2366 | 198 | consts = consts2, parse_ast_trtab = parse_ast_trtab2, parse_ruletab = parse_ruletab2, | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 199 | parse_trtab = parse_trtab2, print_trtab = print_trtab2, | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 200 | print_ruletab = print_ruletab2, print_ast_trtab = print_ast_trtab2, | 
| 2202 
cc15a7bfbe12
extend_const_gram now supports multiple disjoint printer tables;
 wenzelm parents: 
1813diff
changeset | 201 | prtabs = prtabs2} = tabs2; | 
| 0 | 202 | in | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 203 |     Syntax {
 | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 204 | lexicon = merge_lexicons lexicon1 lexicon2, | 
| 764 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 clasohm parents: 
624diff
changeset | 205 | logtypes = merge_lists logtypes1 logtypes2, | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 206 | gram = merge_grams gram1 gram2, | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 207 | consts = merge_lists consts1 consts2, | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 208 | parse_ast_trtab = | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 209 | merge_trtabs parse_ast_trtab1 parse_ast_trtab2 "parse ast translation", | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 210 | parse_ruletab = merge_ruletabs parse_ruletab1 parse_ruletab2, | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 211 | parse_trtab = merge_trtabs parse_trtab1 parse_trtab2 "parse translation", | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 212 | print_trtab = merge_trtabs print_trtab1 print_trtab2 "print translation", | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 213 | print_ruletab = merge_ruletabs print_ruletab1 print_ruletab2, | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 214 | print_ast_trtab = | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 215 | merge_trtabs print_ast_trtab1 print_ast_trtab2 "print ast translation", | 
| 2383 | 216 | prtabs = merge_prtabs prtabs1 prtabs2} | 
| 0 | 217 | end; | 
| 218 | ||
| 219 | ||
| 260 | 220 | (* type_syn *) | 
| 221 | ||
| 2366 | 222 | val type_syn = extend_syntax ("", true) empty_syntax type_ext;
 | 
| 223 | val pure_syn = extend_syntax ("", true) type_syn pure_ext;
 | |
| 260 | 224 | |
| 0 | 225 | |
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 226 | (** inspect syntax **) | 
| 0 | 227 | |
| 260 | 228 | fun pretty_strs_qs name strs = | 
| 229 | Pretty.strs (name :: map quote (sort_strings strs)); | |
| 0 | 230 | |
| 18 | 231 | |
| 232 | (* print_gram *) | |
| 0 | 233 | |
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 234 | fun print_gram (Syntax tabs) = | 
| 0 | 235 | let | 
| 2383 | 236 |     val {lexicon, logtypes, gram, prtabs, ...} = tabs;
 | 
| 0 | 237 | in | 
| 260 | 238 | Pretty.writeln (pretty_strs_qs "lexicon:" (dest_lexicon lexicon)); | 
| 764 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 clasohm parents: 
624diff
changeset | 239 |     Pretty.writeln (Pretty.strs ("logtypes:" :: logtypes));
 | 
| 2202 
cc15a7bfbe12
extend_const_gram now supports multiple disjoint printer tables;
 wenzelm parents: 
1813diff
changeset | 240 | Pretty.writeln (Pretty.big_list "prods:" (pretty_gram gram)); | 
| 2383 | 241 | Pretty.writeln (pretty_strs_qs "print modes:" (prmodes_of prtabs)) | 
| 0 | 242 | end; | 
| 243 | ||
| 244 | ||
| 18 | 245 | (* print_trans *) | 
| 0 | 246 | |
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 247 | fun print_trans (Syntax tabs) = | 
| 0 | 248 | let | 
| 260 | 249 | fun pretty_trtab name tab = | 
| 250 | pretty_strs_qs name (map fst (dest_trtab tab)); | |
| 0 | 251 | |
| 260 | 252 | fun pretty_ruletab name tab = | 
| 253 | Pretty.big_list name (map pretty_rule (dest_ruletab tab)); | |
| 0 | 254 | |
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 255 |     val {consts, parse_ast_trtab, parse_ruletab, parse_trtab, print_trtab,
 | 
| 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 256 | print_ruletab, print_ast_trtab, ...} = tabs; | 
| 0 | 257 | in | 
| 260 | 258 | Pretty.writeln (pretty_strs_qs "consts:" consts); | 
| 259 | Pretty.writeln (pretty_trtab "parse_ast_translation:" parse_ast_trtab); | |
| 260 | Pretty.writeln (pretty_ruletab "parse_rules:" parse_ruletab); | |
| 261 | Pretty.writeln (pretty_trtab "parse_translation:" parse_trtab); | |
| 262 | Pretty.writeln (pretty_trtab "print_translation:" print_trtab); | |
| 263 | Pretty.writeln (pretty_ruletab "print_rules:" print_ruletab); | |
| 264 | Pretty.writeln (pretty_trtab "print_ast_translation:" print_ast_trtab) | |
| 0 | 265 | end; | 
| 266 | ||
| 267 | ||
| 268 | (* print_syntax *) | |
| 269 | ||
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 270 | fun print_syntax syn = (print_gram syn; print_trans syn); | 
| 0 | 271 | |
| 272 | ||
| 273 | ||
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 274 | (** read **) | 
| 18 | 275 | |
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 276 | (* test_read *) | 
| 18 | 277 | |
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 278 | fun test_read (Syntax tabs) root str = | 
| 18 | 279 | let | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 280 |     val {lexicon, gram, parse_ast_trtab, parse_ruletab, ...} = tabs;
 | 
| 18 | 281 | |
| 2366 | 282 | val chars = SymbolFont.read_charnames (explode str); | 
| 283 | val toks = tokenize lexicon false chars; | |
| 624 | 284 |     val _ = writeln ("tokens: " ^ space_implode " " (map display_token toks));
 | 
| 18 | 285 | |
| 383 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 286 | fun show_pt pt = | 
| 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 287 | let | 
| 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 288 | val raw_ast = pt_to_ast (K None) pt; | 
| 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 289 |         val _ = writeln ("raw: " ^ str_of_ast raw_ast);
 | 
| 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 290 | val pre_ast = pt_to_ast (lookup_trtab parse_ast_trtab) pt; | 
| 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 291 | val _ = normalize true true (lookup_ruletab parse_ruletab) pre_ast; | 
| 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 292 | in () end; | 
| 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 293 | in | 
| 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 294 | seq show_pt (parse gram root toks) | 
| 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 295 | end; | 
| 18 | 296 | |
| 297 | ||
| 260 | 298 | (* read_ast *) | 
| 299 | ||
| 882 
b118d1ea0dfd
moved ambiguity_level from sign.ML to Syntax/syntax.ML
 clasohm parents: 
865diff
changeset | 300 | val ambiguity_level = ref 1; | 
| 
b118d1ea0dfd
moved ambiguity_level from sign.ML to Syntax/syntax.ML
 clasohm parents: 
865diff
changeset | 301 | |
| 865 | 302 | fun read_asts (Syntax tabs) xids root str = | 
| 260 | 303 | let | 
| 764 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 clasohm parents: 
624diff
changeset | 304 |     val {lexicon, gram, parse_ast_trtab, logtypes, ...} = tabs;
 | 
| 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 clasohm parents: 
624diff
changeset | 305 | val root' = if root mem logtypes then logic else root; | 
| 2366 | 306 | val chars = SymbolFont.read_charnames (explode str); | 
| 307 | val pts = parse gram root' (tokenize lexicon xids chars); | |
| 330 
2fda15dd1e0f
changed the way a grammar is generated to allow the new parser to work;
 clasohm parents: 
260diff
changeset | 308 | |
| 624 | 309 | fun show_pt pt = writeln (str_of_ast (pt_to_ast (K None) pt)); | 
| 260 | 310 | in | 
| 888 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 311 | if length pts > ! ambiguity_level then | 
| 1580 
e3fd931e6095
Added some functions which allow redirection of Isabelle's output
 berghofe parents: 
1511diff
changeset | 312 |       (warning ("Ambiguous input " ^ quote str);
 | 
| 882 
b118d1ea0dfd
moved ambiguity_level from sign.ML to Syntax/syntax.ML
 clasohm parents: 
865diff
changeset | 313 | writeln "produces the following parse trees:"; | 
| 
b118d1ea0dfd
moved ambiguity_level from sign.ML to Syntax/syntax.ML
 clasohm parents: 
865diff
changeset | 314 | seq show_pt pts) | 
| 624 | 315 | else (); | 
| 316 | map (pt_to_ast (lookup_trtab parse_ast_trtab)) pts | |
| 260 | 317 | end; | 
| 318 | ||
| 319 | ||
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 320 | (* read *) | 
| 0 | 321 | |
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 322 | fun read (syn as Syntax tabs) ty str = | 
| 0 | 323 | let | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 324 |     val {parse_ruletab, parse_trtab, ...} = tabs;
 | 
| 865 | 325 | val asts = read_asts syn false (typ_to_nonterm ty) str; | 
| 0 | 326 | in | 
| 624 | 327 | map (ast_to_term (lookup_trtab parse_trtab)) | 
| 328 | (map (normalize_ast (lookup_ruletab parse_ruletab)) asts) | |
| 0 | 329 | end; | 
| 330 | ||
| 331 | ||
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 332 | (* read types *) | 
| 0 | 333 | |
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 334 | fun read_typ syn def_sort str = | 
| 888 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 335 | (case read syn typeT str of | 
| 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 336 | [t] => typ_of_term (raw_term_sorts t) def_sort t | 
| 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 337 | | _ => sys_error "read_typ: ambiguous type syntax"); | 
| 144 | 338 | |
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 339 | fun simple_read_typ str = read_typ type_syn (K []) str; | 
| 144 | 340 | |
| 341 | ||
| 18 | 342 | |
| 1158 | 343 | (** prepare translation rules **) | 
| 344 | ||
| 345 | datatype 'a trrule = | |
| 888 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 346 | op |-> of 'a * 'a | | 
| 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 347 | op <-| of 'a * 'a | | 
| 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 348 | op <-> of 'a * 'a; | 
| 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 349 | |
| 1158 | 350 | fun map_rule f (x |-> y) = (f x |-> f y) | 
| 351 | | map_rule f (x <-| y) = (f x <-| f y) | |
| 352 | | map_rule f (x <-> y) = (f x <-> f y); | |
| 353 | ||
| 354 | fun right_rule (pat1 |-> pat2) = Some (pat1, pat2) | |
| 355 | | right_rule (pat1 <-| pat2) = None | |
| 356 | | right_rule (pat1 <-> pat2) = Some (pat1, pat2); | |
| 357 | ||
| 358 | fun left_rule (pat1 |-> pat2) = None | |
| 359 | | left_rule (pat1 <-| pat2) = Some (pat2, pat1) | |
| 360 | | left_rule (pat1 <-> pat2) = Some (pat2, pat1); | |
| 361 | ||
| 362 | ||
| 363 | fun check_rule (rule as (lhs, rhs)) = | |
| 364 | (case rule_error rule of | |
| 365 | Some msg => | |
| 366 |       error ("Error in syntax translation rule: " ^ msg ^ "\n" ^
 | |
| 367 | str_of_ast lhs ^ " -> " ^ str_of_ast rhs) | |
| 368 | | None => rule); | |
| 888 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 369 | |
| 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 370 | |
| 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 371 | fun read_pattern syn (root, str) = | 
| 18 | 372 | let | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 373 |     val Syntax {consts, ...} = syn;
 | 
| 18 | 374 | |
| 888 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 375 | fun constify (ast as Constant _) = ast | 
| 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 376 | | constify (ast as Variable x) = | 
| 18 | 377 | if x mem consts then Constant x else ast | 
| 888 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 378 | | constify (Appl asts) = Appl (map constify asts); | 
| 18 | 379 | in | 
| 888 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 380 | (case read_asts syn true root str of | 
| 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 381 | [ast] => constify ast | 
| 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 382 |     | _ => error ("Syntactically ambiguous input: " ^ quote str))
 | 
| 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 383 | end handle ERROR => | 
| 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 384 |     error ("The error(s) above occurred in translation pattern " ^
 | 
| 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 385 | quote str); | 
| 0 | 386 | |
| 556 | 387 | |
| 1158 | 388 | fun prep_rules rd_pat raw_rules = | 
| 389 | let val rules = map (map_rule rd_pat) raw_rules in | |
| 888 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 390 | (map check_rule (mapfilter right_rule rules), | 
| 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 wenzelm parents: 
882diff
changeset | 391 | map check_rule (mapfilter left_rule rules)) | 
| 1158 | 392 | end | 
| 18 | 393 | |
| 394 | ||
| 395 | ||
| 396 | (** pretty terms or typs **) | |
| 397 | ||
| 2202 
cc15a7bfbe12
extend_const_gram now supports multiple disjoint printer tables;
 wenzelm parents: 
1813diff
changeset | 398 | fun pretty_t t_to_ast prt_t curried (syn as Syntax tabs) t = | 
| 0 | 399 | let | 
| 2202 
cc15a7bfbe12
extend_const_gram now supports multiple disjoint printer tables;
 wenzelm parents: 
1813diff
changeset | 400 |     val {print_trtab, print_ruletab, print_ast_trtab, prtabs, ...} = tabs;
 | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 401 | val ast = t_to_ast (lookup_trtab print_trtab) t; | 
| 0 | 402 | in | 
| 2202 
cc15a7bfbe12
extend_const_gram now supports multiple disjoint printer tables;
 wenzelm parents: 
1813diff
changeset | 403 | prt_t curried prtabs (lookup_trtab print_ast_trtab) | 
| 237 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 wenzelm parents: 
175diff
changeset | 404 | (normalize_ast (lookup_ruletab print_ruletab) ast) | 
| 0 | 405 | end; | 
| 406 | ||
| 407 | val pretty_term = pretty_t term_to_ast pretty_term_ast; | |
| 922 
196ca0973a6d
added CPure (curried functions) and ProtoPure (ancestor of Pure and CPure)
 clasohm parents: 
888diff
changeset | 408 | val pretty_typ = pretty_t typ_to_ast pretty_typ_ast false; | 
| 0 | 409 | |
| 922 
196ca0973a6d
added CPure (curried functions) and ProtoPure (ancestor of Pure and CPure)
 clasohm parents: 
888diff
changeset | 410 | fun string_of_term curried syn t = | 
| 
196ca0973a6d
added CPure (curried functions) and ProtoPure (ancestor of Pure and CPure)
 clasohm parents: 
888diff
changeset | 411 | Pretty.string_of (pretty_term curried syn t); | 
| 260 | 412 | fun string_of_typ syn ty = Pretty.string_of (pretty_typ syn ty); | 
| 0 | 413 | |
| 260 | 414 | val simple_string_of_typ = string_of_typ type_syn; | 
| 415 | val simple_pprint_typ = Pretty.pprint o Pretty.quote o (pretty_typ type_syn); | |
| 0 | 416 | |
| 417 | ||
| 418 | ||
| 383 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 419 | (** extend syntax (external interfaces) **) | 
| 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 420 | |
| 2202 
cc15a7bfbe12
extend_const_gram now supports multiple disjoint printer tables;
 wenzelm parents: 
1813diff
changeset | 421 | fun ext_syntax mk_syn_ext prmode (syn as Syntax {logtypes, ...}) decls =
 | 
| 
cc15a7bfbe12
extend_const_gram now supports multiple disjoint printer tables;
 wenzelm parents: 
1813diff
changeset | 422 | extend_syntax prmode syn (mk_syn_ext logtypes decls); | 
| 383 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 423 | |
| 167 | 424 | |
| 764 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 clasohm parents: 
624diff
changeset | 425 | fun extend_log_types syn logtypes = | 
| 2366 | 426 |   extend_syntax ("", true) syn (syn_ext_logtypes logtypes);
 | 
| 383 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 427 | |
| 2366 | 428 | val extend_type_gram = ext_syntax syn_ext_types ("", true);
 | 
| 383 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 429 | |
| 2202 
cc15a7bfbe12
extend_const_gram now supports multiple disjoint printer tables;
 wenzelm parents: 
1813diff
changeset | 430 | fun extend_const_gram syn prmode = ext_syntax syn_ext_consts prmode syn; | 
| 383 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 431 | |
| 2366 | 432 | val extend_consts = ext_syntax syn_ext_const_names ("", true);
 | 
| 383 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 433 | |
| 2366 | 434 | val extend_trfuns = ext_syntax syn_ext_trfuns ("", true);
 | 
| 383 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 wenzelm parents: 
330diff
changeset | 435 | |
| 2383 | 436 | val extend_trfunsT = ext_syntax syn_ext_trfunsT ("", true);
 | 
| 437 | ||
| 1158 | 438 | fun extend_trrules syn rules = | 
| 2366 | 439 |   ext_syntax syn_ext_rules ("", true) syn (prep_rules (read_pattern syn) rules);
 | 
| 1158 | 440 | |
| 441 | fun extend_trrules_i syn rules = | |
| 2366 | 442 |   ext_syntax syn_ext_rules ("", true) syn (prep_rules I rules);
 | 
| 443 | ||
| 444 | ||
| 0 | 445 | end; |