| author | nipkow | 
| Thu, 29 Nov 2001 14:12:42 +0100 | |
| changeset 12328 | 7c4ec77a8715 | 
| parent 12316 | 79138d75405f | 
| child 12785 | 27debaf2112d | 
| 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  | 
||
| 260 | 8  | 
signature BASIC_SYNTAX =  | 
| 2383 | 9  | 
sig  | 
| 260 | 10  | 
include AST0  | 
| 556 | 11  | 
include SYN_TRANS0  | 
12  | 
include MIXFIX0  | 
|
| 260 | 13  | 
include PRINTER0  | 
| 2383 | 14  | 
end;  | 
| 260 | 15  | 
|
| 0 | 16  | 
signature SYNTAX =  | 
| 2383 | 17  | 
sig  | 
| 6322 | 18  | 
include TOKEN_TRANS0  | 
| 260 | 19  | 
include AST1  | 
| 0 | 20  | 
include LEXICON0  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
21  | 
include SYN_EXT0  | 
| 0 | 22  | 
include TYPE_EXT0  | 
| 556 | 23  | 
include SYN_TRANS1  | 
24  | 
include MIXFIX1  | 
|
| 0 | 25  | 
include PRINTER0  | 
| 1158 | 26  | 
datatype 'a trrule =  | 
| 3526 | 27  | 
ParseRule of 'a * 'a |  | 
28  | 
PrintRule of 'a * 'a |  | 
|
29  | 
ParsePrintRule of 'a * 'a  | 
|
| 556 | 30  | 
type syntax  | 
| 
12073
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
31  | 
val extend_log_types: string list -> syntax -> syntax  | 
| 
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
32  | 
val extend_type_gram: (string * int * mixfix) list -> syntax -> syntax  | 
| 
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
33  | 
val extend_const_gram: string * bool -> (string * typ * mixfix) list -> syntax -> syntax  | 
| 
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
34  | 
val extend_consts: string list -> syntax -> syntax  | 
| 
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
35  | 
val extend_trfuns:  | 
| 556 | 36  | 
(string * (ast list -> ast)) list *  | 
37  | 
(string * (term list -> term)) list *  | 
|
38  | 
(string * (term list -> term)) list *  | 
|
| 
12073
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
39  | 
(string * (ast list -> ast)) list -> syntax -> syntax  | 
| 
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
40  | 
val extend_trfunsT: (string * (bool -> typ -> term list -> term)) list -> syntax -> syntax  | 
| 
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
41  | 
val extend_tokentrfuns: (string * string * (string -> string * real)) list -> syntax -> syntax  | 
| 
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
42  | 
val extend_trrules: (string * string) trrule list -> syntax -> syntax  | 
| 
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
43  | 
val extend_trrules_i: ast trrule list -> syntax -> syntax  | 
| 4618 | 44  | 
  val map_trrule: ('a -> 'b) -> 'a trrule -> 'b trrule
 | 
| 556 | 45  | 
val merge_syntaxes: syntax -> syntax -> syntax  | 
46  | 
val type_syn: syntax  | 
|
| 
764
 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 
clasohm 
parents: 
624 
diff
changeset
 | 
47  | 
val pure_syn: syntax  | 
| 556 | 48  | 
val print_gram: syntax -> unit  | 
49  | 
val print_trans: syntax -> unit  | 
|
50  | 
val print_syntax: syntax -> unit  | 
|
51  | 
val test_read: syntax -> string -> string -> unit  | 
|
| 624 | 52  | 
val read: syntax -> typ -> string -> term list  | 
| 12316 | 53  | 
val read_typ: syntax -> ((indexname * sort) list -> indexname -> sort) -> (sort -> sort) ->  | 
54  | 
string -> typ  | 
|
| 8894 | 55  | 
val read_sort: syntax -> string -> sort  | 
| 3779 | 56  | 
val pretty_term: syntax -> bool -> term -> Pretty.T  | 
| 556 | 57  | 
val pretty_typ: syntax -> typ -> Pretty.T  | 
| 3779 | 58  | 
val pretty_sort: syntax -> sort -> Pretty.T  | 
| 3782 | 59  | 
val simple_str_of_sort: sort -> string  | 
| 556 | 60  | 
val simple_string_of_typ: typ -> string  | 
61  | 
val simple_pprint_typ: typ -> pprint_args -> unit  | 
|
| 
882
 
b118d1ea0dfd
moved ambiguity_level from sign.ML to Syntax/syntax.ML
 
clasohm 
parents: 
865 
diff
changeset
 | 
62  | 
val ambiguity_level: int ref  | 
| 2383 | 63  | 
end;  | 
| 0 | 64  | 
|
| 12094 | 65  | 
structure Syntax: SYNTAX =  | 
| 0 | 66  | 
struct  | 
67  | 
||
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
68  | 
|
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
69  | 
(** tables of translation functions **)  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
70  | 
|
| 5692 | 71  | 
fun mk_trfun (c, f) = (c, (f, stamp ()));  | 
| 12292 | 72  | 
fun eq_trfuns ((_, s1:stamp), (_, s2)) = s1 = s2;  | 
| 0 | 73  | 
|
74  | 
||
| 5692 | 75  | 
(* parse (ast) translations *)  | 
76  | 
||
77  | 
fun lookup_tr tab c = apsome fst (Symtab.lookup (tab, c));  | 
|
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
78  | 
|
| 
383
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
79  | 
fun err_dup_trfuns name cs =  | 
| 
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
80  | 
  error ("More than one " ^ name ^ " for " ^ commas_quote cs);
 | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
81  | 
|
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
82  | 
fun extend_trtab tab trfuns name =  | 
| 5692 | 83  | 
Symtab.extend (tab, map mk_trfun trfuns)  | 
| 
383
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
84  | 
handle Symtab.DUPS cs => err_dup_trfuns name cs;  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
85  | 
|
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
86  | 
fun merge_trtabs tab1 tab2 name =  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
87  | 
Symtab.merge eq_snd (tab1, tab2)  | 
| 
383
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
88  | 
handle Symtab.DUPS cs => err_dup_trfuns name cs;  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
89  | 
|
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
90  | 
|
| 5692 | 91  | 
(* print (ast) translations *)  | 
92  | 
||
93  | 
fun lookup_tr' tab c = map fst (Symtab.lookup_multi (tab, c));  | 
|
| 12292 | 94  | 
fun extend_tr'tab tab trfuns = foldr Symtab.update_multi (map mk_trfun trfuns, tab);  | 
95  | 
fun merge_tr'tabs tab1 tab2 = Symtab.merge_multi' eq_trfuns (tab1, tab2);  | 
|
| 5692 | 96  | 
|
97  | 
||
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
98  | 
|
| 2700 | 99  | 
(** tables of token translation functions **)  | 
100  | 
||
101  | 
fun lookup_tokentr tabs modes =  | 
|
| 4496 | 102  | 
let val trs = gen_distinct eq_fst (flat (map (assocs tabs) (modes @ [""])))  | 
| 2700 | 103  | 
in fn c => apsome fst (assoc (trs, c)) end;  | 
104  | 
||
105  | 
fun merge_tokentrtabs tabs1 tabs2 =  | 
|
106  | 
let  | 
|
107  | 
fun eq_tr ((c1, (_, s1)), (c2, (_, s2))) = c1 = c2 andalso s1 = s2;  | 
|
108  | 
||
| 4703 | 109  | 
fun name (s, _) = implode (tl (Symbol.explode s));  | 
| 2706 | 110  | 
|
| 2700 | 111  | 
fun merge mode =  | 
112  | 
let  | 
|
113  | 
val trs1 = assocs tabs1 mode;  | 
|
114  | 
val trs2 = assocs tabs2 mode;  | 
|
115  | 
val trs = gen_distinct eq_tr (trs1 @ trs2);  | 
|
116  | 
in  | 
|
117  | 
(case gen_duplicates eq_fst trs of  | 
|
118  | 
[] => (mode, trs)  | 
|
119  | 
        | dups => error ("More than one token translation function in mode " ^
 | 
|
| 2706 | 120  | 
quote mode ^ " for " ^ commas_quote (map name dups)))  | 
| 2700 | 121  | 
end;  | 
122  | 
in  | 
|
123  | 
map merge (distinct (map fst (tabs1 @ tabs2)))  | 
|
124  | 
end;  | 
|
125  | 
||
126  | 
fun extend_tokentrtab tabs tokentrs =  | 
|
127  | 
let  | 
|
128  | 
fun ins_tokentr (ts, (m, c, f)) =  | 
|
129  | 
      overwrite (ts, (m, ("_" ^ c, (f, stamp ())) :: assocs ts m));
 | 
|
130  | 
in  | 
|
131  | 
merge_tokentrtabs tabs (foldl ins_tokentr ([], tokentrs))  | 
|
132  | 
end;  | 
|
133  | 
||
134  | 
||
135  | 
||
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
136  | 
(** tables of translation rules **)  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
137  | 
|
| 5692 | 138  | 
type ruletab = (Ast.ast * Ast.ast) list Symtab.table;  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
139  | 
|
| 
383
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
140  | 
fun dest_ruletab tab = flat (map snd (Symtab.dest tab));  | 
| 
9372
 
7834e56e2277
AST translation rules no longer require constant head on LHS;
 
wenzelm 
parents: 
8894 
diff
changeset
 | 
141  | 
fun lookup_ruletab tab a = Symtab.lookup_multi (tab, a);  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
142  | 
|
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
143  | 
|
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
144  | 
(* empty, extend, merge ruletabs *)  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
145  | 
|
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
146  | 
fun extend_ruletab tab rules =  | 
| 12292 | 147  | 
foldr Symtab.update_multi (map (fn r => (Ast.head_of_rule r, r)) rules, tab);  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
148  | 
|
| 12292 | 149  | 
fun merge_ruletabs tab1 tab2 = Symtab.merge_multi' (op =) (tab1, tab2);  | 
| 0 | 150  | 
|
151  | 
||
152  | 
||
153  | 
(** datatype syntax **)  | 
|
154  | 
||
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
155  | 
datatype syntax =  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
156  | 
  Syntax of {
 | 
| 4703 | 157  | 
lexicon: Scan.lexicon,  | 
| 
764
 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 
clasohm 
parents: 
624 
diff
changeset
 | 
158  | 
logtypes: string list,  | 
| 5692 | 159  | 
gram: Parser.gram,  | 
| 18 | 160  | 
consts: string list,  | 
| 2913 | 161  | 
prmodes: string list,  | 
| 5692 | 162  | 
parse_ast_trtab: ((Ast.ast list -> Ast.ast) * stamp) Symtab.table,  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
163  | 
parse_ruletab: ruletab,  | 
| 5692 | 164  | 
parse_trtab: ((term list -> term) * stamp) Symtab.table,  | 
165  | 
print_trtab: ((bool -> typ -> term list -> term) * stamp) list Symtab.table,  | 
|
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
166  | 
print_ruletab: ruletab,  | 
| 5692 | 167  | 
print_ast_trtab: ((Ast.ast list -> Ast.ast) * stamp) list Symtab.table,  | 
| 6322 | 168  | 
tokentrtab: (string * (string * ((string -> string * real) * stamp)) list) list,  | 
| 5692 | 169  | 
prtabs: Printer.prtabs}  | 
| 0 | 170  | 
|
| 18 | 171  | 
|
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
172  | 
(* empty_syntax *)  | 
| 18 | 173  | 
|
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
174  | 
val empty_syntax =  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
175  | 
  Syntax {
 | 
| 4703 | 176  | 
lexicon = Scan.empty_lexicon,  | 
| 
764
 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 
clasohm 
parents: 
624 
diff
changeset
 | 
177  | 
logtypes = [],  | 
| 5692 | 178  | 
gram = Parser.empty_gram,  | 
| 167 | 179  | 
consts = [],  | 
| 2913 | 180  | 
prmodes = [],  | 
| 5692 | 181  | 
parse_ast_trtab = Symtab.empty,  | 
182  | 
parse_ruletab = Symtab.empty,  | 
|
183  | 
parse_trtab = Symtab.empty,  | 
|
184  | 
print_trtab = Symtab.empty,  | 
|
185  | 
print_ruletab = Symtab.empty,  | 
|
186  | 
print_ast_trtab = Symtab.empty,  | 
|
| 2700 | 187  | 
tokentrtab = [],  | 
| 5692 | 188  | 
prtabs = Printer.empty_prtabs}  | 
| 167 | 189  | 
|
190  | 
||
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
191  | 
(* extend_syntax *)  | 
| 167 | 192  | 
|
| 2366 | 193  | 
fun extend_syntax (mode, inout) (Syntax tabs) syn_ext =  | 
| 167 | 194  | 
let  | 
| 2913 | 195  | 
    val {lexicon, logtypes = logtypes1, gram, consts = consts1, prmodes = prmodes1,
 | 
| 2366 | 196  | 
parse_ast_trtab, parse_ruletab, parse_trtab, print_trtab, print_ruletab,  | 
| 2700 | 197  | 
print_ast_trtab, tokentrtab, prtabs} = tabs;  | 
| 5692 | 198  | 
    val SynExt.SynExt {logtypes = logtypes2, xprods, consts = consts2, prmodes = prmodes2,
 | 
| 2913 | 199  | 
parse_ast_translation, parse_rules, parse_translation, print_translation, print_rules,  | 
| 2700 | 200  | 
print_ast_translation, token_translation} = syn_ext;  | 
| 167 | 201  | 
in  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
202  | 
    Syntax {
 | 
| 5692 | 203  | 
lexicon = if inout then Scan.extend_lexicon lexicon (SynExt.delims_of xprods) else lexicon,  | 
| 12292 | 204  | 
logtypes = merge_lists logtypes1 logtypes2,  | 
| 5692 | 205  | 
gram = if inout then Parser.extend_gram gram xprods else gram,  | 
| 11528 | 206  | 
consts = consts2 @ consts1,  | 
| 11546 | 207  | 
prmodes = (mode ins_string prmodes2) union_string prmodes1,  | 
| 167 | 208  | 
parse_ast_trtab =  | 
209  | 
extend_trtab parse_ast_trtab parse_ast_translation "parse ast translation",  | 
|
210  | 
parse_ruletab = extend_ruletab parse_ruletab parse_rules,  | 
|
211  | 
parse_trtab = extend_trtab parse_trtab parse_translation "parse translation",  | 
|
| 5692 | 212  | 
print_trtab = extend_tr'tab print_trtab print_translation,  | 
| 167 | 213  | 
print_ruletab = extend_ruletab print_ruletab print_rules,  | 
| 5692 | 214  | 
print_ast_trtab = extend_tr'tab print_ast_trtab print_ast_translation,  | 
| 2700 | 215  | 
tokentrtab = extend_tokentrtab tokentrtab token_translation,  | 
| 5692 | 216  | 
prtabs = Printer.extend_prtabs prtabs mode xprods}  | 
| 18 | 217  | 
end;  | 
218  | 
||
219  | 
||
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
220  | 
(* merge_syntaxes *)  | 
| 0 | 221  | 
|
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
222  | 
fun merge_syntaxes (Syntax tabs1) (Syntax tabs2) =  | 
| 0 | 223  | 
let  | 
| 2913 | 224  | 
    val {lexicon = lexicon1, logtypes = logtypes1, gram = gram1, consts = consts1,
 | 
225  | 
prmodes = prmodes1, parse_ast_trtab = parse_ast_trtab1, parse_ruletab = parse_ruletab1,  | 
|
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
226  | 
parse_trtab = parse_trtab1, print_trtab = print_trtab1,  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
227  | 
print_ruletab = print_ruletab1, print_ast_trtab = print_ast_trtab1,  | 
| 2700 | 228  | 
tokentrtab = tokentrtab1, prtabs = prtabs1} = tabs1;  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
229  | 
|
| 2913 | 230  | 
    val {lexicon = lexicon2, logtypes = logtypes2, gram = gram2, consts = consts2,
 | 
231  | 
prmodes = prmodes2, parse_ast_trtab = parse_ast_trtab2, parse_ruletab = parse_ruletab2,  | 
|
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
232  | 
parse_trtab = parse_trtab2, print_trtab = print_trtab2,  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
233  | 
print_ruletab = print_ruletab2, print_ast_trtab = print_ast_trtab2,  | 
| 2700 | 234  | 
tokentrtab = tokentrtab2, prtabs = prtabs2} = tabs2;  | 
| 0 | 235  | 
in  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
236  | 
    Syntax {
 | 
| 4703 | 237  | 
lexicon = Scan.merge_lexicons lexicon1 lexicon2,  | 
| 
764
 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 
clasohm 
parents: 
624 
diff
changeset
 | 
238  | 
logtypes = merge_lists logtypes1 logtypes2,  | 
| 5692 | 239  | 
gram = Parser.merge_grams gram1 gram2,  | 
| 11528 | 240  | 
consts = unique_strings (sort_strings (consts1 @ consts2)),  | 
| 2913 | 241  | 
prmodes = merge_lists prmodes1 prmodes2,  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
242  | 
parse_ast_trtab =  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
243  | 
merge_trtabs parse_ast_trtab1 parse_ast_trtab2 "parse ast translation",  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
244  | 
parse_ruletab = merge_ruletabs parse_ruletab1 parse_ruletab2,  | 
| 
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
245  | 
parse_trtab = merge_trtabs parse_trtab1 parse_trtab2 "parse translation",  | 
| 5692 | 246  | 
print_trtab = merge_tr'tabs print_trtab1 print_trtab2,  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
247  | 
print_ruletab = merge_ruletabs print_ruletab1 print_ruletab2,  | 
| 5692 | 248  | 
print_ast_trtab = merge_tr'tabs print_ast_trtab1 print_ast_trtab2,  | 
| 2700 | 249  | 
tokentrtab = merge_tokentrtabs tokentrtab1 tokentrtab2,  | 
| 5692 | 250  | 
prtabs = Printer.merge_prtabs prtabs1 prtabs2}  | 
| 0 | 251  | 
end;  | 
252  | 
||
253  | 
||
| 260 | 254  | 
(* type_syn *)  | 
255  | 
||
| 5692 | 256  | 
val type_syn = extend_syntax ("", true) empty_syntax TypeExt.type_ext;
 | 
257  | 
val pure_syn = extend_syntax ("", true) type_syn SynExt.pure_ext;
 | 
|
| 260 | 258  | 
|
| 0 | 259  | 
|
| 4887 | 260  | 
|
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
261  | 
(** inspect syntax **)  | 
| 0 | 262  | 
|
| 260 | 263  | 
fun pretty_strs_qs name strs =  | 
264  | 
Pretty.strs (name :: map quote (sort_strings strs));  | 
|
| 0 | 265  | 
|
| 18 | 266  | 
|
267  | 
(* print_gram *)  | 
|
| 0 | 268  | 
|
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
269  | 
fun print_gram (Syntax tabs) =  | 
| 0 | 270  | 
let  | 
| 2913 | 271  | 
    val {lexicon, logtypes, prmodes, gram, prtabs, ...} = tabs;
 | 
272  | 
val prmodes' = sort_strings (filter_out (equal "") prmodes);  | 
|
| 0 | 273  | 
in  | 
| 8720 | 274  | 
[pretty_strs_qs "lexicon:" (Scan.dest_lexicon lexicon),  | 
275  | 
      Pretty.strs ("logtypes:" :: logtypes),
 | 
|
276  | 
Pretty.big_list "prods:" (Parser.pretty_gram gram),  | 
|
277  | 
pretty_strs_qs "print modes:" prmodes']  | 
|
278  | 
|> Pretty.chunks |> Pretty.writeln  | 
|
| 0 | 279  | 
end;  | 
280  | 
||
281  | 
||
| 18 | 282  | 
(* print_trans *)  | 
| 0 | 283  | 
|
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
284  | 
fun print_trans (Syntax tabs) =  | 
| 0 | 285  | 
let  | 
| 260 | 286  | 
fun pretty_trtab name tab =  | 
| 5692 | 287  | 
pretty_strs_qs name (Symtab.keys tab);  | 
| 0 | 288  | 
|
| 260 | 289  | 
fun pretty_ruletab name tab =  | 
| 5692 | 290  | 
Pretty.big_list name (map Ast.pretty_rule (dest_ruletab tab));  | 
| 0 | 291  | 
|
| 4703 | 292  | 
fun pretty_tokentr (mode, trs) = Pretty.strs (quote mode ^ ":" :: map fst trs);  | 
293  | 
||
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
294  | 
    val {consts, parse_ast_trtab, parse_ruletab, parse_trtab, print_trtab,
 | 
| 4703 | 295  | 
print_ruletab, print_ast_trtab, tokentrtab, ...} = tabs;  | 
| 0 | 296  | 
in  | 
| 8720 | 297  | 
[pretty_strs_qs "consts:" consts,  | 
298  | 
pretty_trtab "parse_ast_translation:" parse_ast_trtab,  | 
|
299  | 
pretty_ruletab "parse_rules:" parse_ruletab,  | 
|
300  | 
pretty_trtab "parse_translation:" parse_trtab,  | 
|
301  | 
pretty_trtab "print_translation:" print_trtab,  | 
|
302  | 
pretty_ruletab "print_rules:" print_ruletab,  | 
|
303  | 
pretty_trtab "print_ast_translation:" print_ast_trtab,  | 
|
304  | 
Pretty.big_list "token_translation:" (map pretty_tokentr tokentrtab)]  | 
|
305  | 
|> Pretty.chunks |> Pretty.writeln  | 
|
| 0 | 306  | 
end;  | 
307  | 
||
308  | 
||
309  | 
(* print_syntax *)  | 
|
310  | 
||
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
311  | 
fun print_syntax syn = (print_gram syn; print_trans syn);  | 
| 0 | 312  | 
|
313  | 
||
314  | 
||
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
315  | 
(** read **)  | 
| 18 | 316  | 
|
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
317  | 
(* test_read *)  | 
| 18 | 318  | 
|
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
319  | 
fun test_read (Syntax tabs) root str =  | 
| 18 | 320  | 
let  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
321  | 
    val {lexicon, gram, parse_ast_trtab, parse_ruletab, ...} = tabs;
 | 
| 18 | 322  | 
|
| 4703 | 323  | 
val chars = Symbol.explode str;  | 
| 5692 | 324  | 
val toks = Lexicon.tokenize lexicon false chars;  | 
325  | 
    val _ = writeln ("tokens: " ^ space_implode " " (map Lexicon.display_token toks));
 | 
|
| 18 | 326  | 
|
| 
383
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
327  | 
fun show_pt pt =  | 
| 
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
328  | 
let  | 
| 5692 | 329  | 
val raw_ast = SynTrans.pt_to_ast (K None) pt;  | 
330  | 
        val _ = writeln ("raw: " ^ Ast.str_of_ast raw_ast);
 | 
|
331  | 
val pre_ast = SynTrans.pt_to_ast (lookup_tr parse_ast_trtab) pt;  | 
|
332  | 
val _ = Ast.normalize true true (lookup_ruletab parse_ruletab) pre_ast;  | 
|
| 
383
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
333  | 
in () end;  | 
| 5692 | 334  | 
in seq show_pt (Parser.parse gram root toks) end;  | 
| 18 | 335  | 
|
336  | 
||
| 260 | 337  | 
(* read_ast *)  | 
338  | 
||
| 
882
 
b118d1ea0dfd
moved ambiguity_level from sign.ML to Syntax/syntax.ML
 
clasohm 
parents: 
865 
diff
changeset
 | 
339  | 
val ambiguity_level = ref 1;  | 
| 
 
b118d1ea0dfd
moved ambiguity_level from sign.ML to Syntax/syntax.ML
 
clasohm 
parents: 
865 
diff
changeset
 | 
340  | 
|
| 865 | 341  | 
fun read_asts (Syntax tabs) xids root str =  | 
| 260 | 342  | 
let  | 
| 
764
 
b60e77395d1a
changed Pure's grammar and the way types are converted to nonterminals
 
clasohm 
parents: 
624 
diff
changeset
 | 
343  | 
    val {lexicon, gram, parse_ast_trtab, logtypes, ...} = tabs;
 | 
| 5692 | 344  | 
val root' = if root mem logtypes then SynExt.logic else root;  | 
| 4703 | 345  | 
val chars = Symbol.explode str;  | 
| 5692 | 346  | 
val pts = Parser.parse gram root' (Lexicon.tokenize lexicon xids chars);  | 
| 
330
 
2fda15dd1e0f
changed the way a grammar is generated to allow the new parser to work;
 
clasohm 
parents: 
260 
diff
changeset
 | 
347  | 
|
| 12292 | 348  | 
fun show_pt pt =  | 
349  | 
warning (Pretty.string_of (Ast.pretty_ast (SynTrans.pt_to_ast (K None) pt)));  | 
|
| 260 | 350  | 
in  | 
| 
888
 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 
wenzelm 
parents: 
882 
diff
changeset
 | 
351  | 
if length pts > ! ambiguity_level then  | 
| 
7944
 
cc1930ad1a88
symbols in (error) messages now consistently with single backslash
 
oheimb 
parents: 
7025 
diff
changeset
 | 
352  | 
      (warning ("Ambiguous input " ^ quote str);
 | 
| 3526 | 353  | 
warning "produces the following parse trees:";  | 
| 
882
 
b118d1ea0dfd
moved ambiguity_level from sign.ML to Syntax/syntax.ML
 
clasohm 
parents: 
865 
diff
changeset
 | 
354  | 
seq show_pt pts)  | 
| 624 | 355  | 
else ();  | 
| 5692 | 356  | 
map (SynTrans.pt_to_ast (lookup_tr parse_ast_trtab)) pts  | 
| 260 | 357  | 
end;  | 
358  | 
||
359  | 
||
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
360  | 
(* read *)  | 
| 0 | 361  | 
|
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
362  | 
fun read (syn as Syntax tabs) ty str =  | 
| 0 | 363  | 
let  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
364  | 
    val {parse_ruletab, parse_trtab, ...} = tabs;
 | 
| 5692 | 365  | 
val asts = read_asts syn false (SynExt.typ_to_nonterm ty) str;  | 
| 0 | 366  | 
in  | 
| 5692 | 367  | 
map (SynTrans.ast_to_term (lookup_tr parse_trtab))  | 
368  | 
(map (Ast.normalize_ast (lookup_ruletab parse_ruletab)) asts)  | 
|
| 0 | 369  | 
end;  | 
370  | 
||
371  | 
||
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
372  | 
(* read types *)  | 
| 0 | 373  | 
|
| 12316 | 374  | 
fun read_typ syn get_sort map_sort str =  | 
| 5692 | 375  | 
(case read syn SynExt.typeT str of  | 
| 12316 | 376  | 
[t] => TypeExt.typ_of_term (get_sort (TypeExt.raw_term_sorts t)) map_sort t  | 
| 8894 | 377  | 
| _ => error "read_typ: ambiguous syntax");  | 
| 144 | 378  | 
|
379  | 
||
| 8894 | 380  | 
(* read sorts *)  | 
381  | 
||
382  | 
fun read_sort syn str =  | 
|
383  | 
(case read syn TypeExt.sortT str of  | 
|
384  | 
[t] => TypeExt.sort_of_term t  | 
|
385  | 
| _ => error "read_sort: ambiguous syntax");  | 
|
386  | 
||
387  | 
||
| 18 | 388  | 
|
| 1158 | 389  | 
(** prepare translation rules **)  | 
390  | 
||
391  | 
datatype 'a trrule =  | 
|
| 3526 | 392  | 
ParseRule of 'a * 'a |  | 
393  | 
PrintRule of 'a * 'a |  | 
|
394  | 
ParsePrintRule of 'a * 'a;  | 
|
| 
888
 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 
wenzelm 
parents: 
882 
diff
changeset
 | 
395  | 
|
| 4618 | 396  | 
fun map_trrule f (ParseRule (x, y)) = ParseRule (f x, f y)  | 
397  | 
| map_trrule f (PrintRule (x, y)) = PrintRule (f x, f y)  | 
|
398  | 
| map_trrule f (ParsePrintRule (x, y)) = ParsePrintRule (f x, f y);  | 
|
| 1158 | 399  | 
|
| 3526 | 400  | 
fun parse_rule (ParseRule pats) = Some pats  | 
401  | 
| parse_rule (PrintRule _) = None  | 
|
402  | 
| parse_rule (ParsePrintRule pats) = Some pats;  | 
|
| 1158 | 403  | 
|
| 3526 | 404  | 
fun print_rule (ParseRule _) = None  | 
405  | 
| print_rule (PrintRule pats) = Some (swap pats)  | 
|
406  | 
| print_rule (ParsePrintRule pats) = Some (swap pats);  | 
|
| 1158 | 407  | 
|
408  | 
||
409  | 
fun check_rule (rule as (lhs, rhs)) =  | 
|
| 5692 | 410  | 
(case Ast.rule_error rule of  | 
| 1158 | 411  | 
Some msg =>  | 
412  | 
      error ("Error in syntax translation rule: " ^ msg ^ "\n" ^
 | 
|
| 5692 | 413  | 
Ast.str_of_ast lhs ^ " -> " ^ Ast.str_of_ast rhs)  | 
| 1158 | 414  | 
| None => rule);  | 
| 
888
 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 
wenzelm 
parents: 
882 
diff
changeset
 | 
415  | 
|
| 
 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 
wenzelm 
parents: 
882 
diff
changeset
 | 
416  | 
|
| 
 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 
wenzelm 
parents: 
882 
diff
changeset
 | 
417  | 
fun read_pattern syn (root, str) =  | 
| 18 | 418  | 
let  | 
| 
237
 
a7d3e712767a
MAJOR INTERNAL CHANGE: extend and merge operations of syntax tables
 
wenzelm 
parents: 
175 
diff
changeset
 | 
419  | 
    val Syntax {consts, ...} = syn;
 | 
| 18 | 420  | 
|
| 5692 | 421  | 
fun constify (ast as Ast.Constant _) = ast  | 
422  | 
| constify (ast as Ast.Variable x) =  | 
|
| 8720 | 423  | 
if x mem consts orelse NameSpace.is_qualified x then Ast.Constant x  | 
| 3830 | 424  | 
else ast  | 
| 5692 | 425  | 
| constify (Ast.Appl asts) = Ast.Appl (map constify asts);  | 
| 18 | 426  | 
in  | 
| 
888
 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 
wenzelm 
parents: 
882 
diff
changeset
 | 
427  | 
(case read_asts syn true root str of  | 
| 
 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 
wenzelm 
parents: 
882 
diff
changeset
 | 
428  | 
[ast] => constify ast  | 
| 
 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 
wenzelm 
parents: 
882 
diff
changeset
 | 
429  | 
    | _ => error ("Syntactically ambiguous input: " ^ quote str))
 | 
| 
 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 
wenzelm 
parents: 
882 
diff
changeset
 | 
430  | 
end handle ERROR =>  | 
| 
 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 
wenzelm 
parents: 
882 
diff
changeset
 | 
431  | 
    error ("The error(s) above occurred in translation pattern " ^
 | 
| 
 
3a1de9454d13
improved read_xrules: patterns no longer read twice;
 
wenzelm 
parents: 
882 
diff
changeset
 | 
432  | 
quote str);  | 
| 0 | 433  | 
|
| 556 | 434  | 
|
| 1158 | 435  | 
fun prep_rules rd_pat raw_rules =  | 
| 4618 | 436  | 
let val rules = map (map_trrule rd_pat) raw_rules in  | 
| 3526 | 437  | 
(map check_rule (mapfilter parse_rule rules),  | 
438  | 
map check_rule (mapfilter print_rule rules))  | 
|
| 1158 | 439  | 
end  | 
| 18 | 440  | 
|
441  | 
||
442  | 
||
| 3779 | 443  | 
(** pretty terms, typs, sorts **)  | 
| 18 | 444  | 
|
| 3779 | 445  | 
fun pretty_t t_to_ast prt_t (syn as Syntax tabs) curried t =  | 
| 0 | 446  | 
let  | 
| 2700 | 447  | 
    val {print_trtab, print_ruletab, print_ast_trtab, tokentrtab, prtabs, ...} = tabs;
 | 
| 5692 | 448  | 
val ast = t_to_ast (lookup_tr' print_trtab) t;  | 
| 0 | 449  | 
in  | 
| 5692 | 450  | 
prt_t curried prtabs (lookup_tr' print_ast_trtab)  | 
| 
6167
 
2f354020efc3
corrected output of symbols for several (probably not all) relevant functions
 
oheimb 
parents: 
5702 
diff
changeset
 | 
451  | 
(lookup_tokentr tokentrtab (! print_mode))  | 
| 5692 | 452  | 
(Ast.normalize_ast (lookup_ruletab print_ruletab) ast)  | 
| 0 | 453  | 
end;  | 
454  | 
||
| 5692 | 455  | 
val pretty_term = pretty_t Printer.term_to_ast Printer.pretty_term_ast;  | 
456  | 
fun pretty_typ syn = pretty_t Printer.typ_to_ast Printer.pretty_typ_ast syn false;  | 
|
457  | 
fun pretty_sort syn = pretty_t Printer.sort_to_ast Printer.pretty_typ_ast syn false;  | 
|
| 0 | 458  | 
|
| 3782 | 459  | 
val simple_str_of_sort = Pretty.str_of o pretty_sort type_syn;  | 
| 3779 | 460  | 
val simple_string_of_typ = Pretty.string_of o (pretty_typ type_syn);  | 
| 260 | 461  | 
val simple_pprint_typ = Pretty.pprint o Pretty.quote o (pretty_typ type_syn);  | 
| 0 | 462  | 
|
463  | 
||
464  | 
||
| 
383
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
465  | 
(** extend syntax (external interfaces) **)  | 
| 
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
466  | 
|
| 
12073
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
467  | 
fun ext_syntax mk_syn_ext prmode decls (syn as Syntax {logtypes, ...}) =
 | 
| 
2202
 
cc15a7bfbe12
extend_const_gram now supports multiple disjoint printer tables;
 
wenzelm 
parents: 
1813 
diff
changeset
 | 
468  | 
extend_syntax prmode syn (mk_syn_ext logtypes decls);  | 
| 
383
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
469  | 
|
| 167 | 470  | 
|
| 
12073
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
471  | 
fun extend_log_types logtypes syn =  | 
| 5692 | 472  | 
  extend_syntax ("", true) syn (SynExt.syn_ext_logtypes logtypes);
 | 
| 
383
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
473  | 
|
| 5692 | 474  | 
val extend_type_gram = ext_syntax Mixfix.syn_ext_types ("", true);
 | 
| 
383
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
475  | 
|
| 
12073
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
476  | 
fun extend_const_gram prmode = ext_syntax Mixfix.syn_ext_consts prmode;  | 
| 
383
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
477  | 
|
| 5692 | 478  | 
val extend_consts = ext_syntax SynExt.syn_ext_const_names ("", true);
 | 
| 
383
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
479  | 
|
| 5692 | 480  | 
val extend_trfuns = ext_syntax SynExt.syn_ext_trfuns ("", true);
 | 
| 
383
 
fcea89074e4c
added incremental extension functions: extend_log_types, extend_type_gram,
 
wenzelm 
parents: 
330 
diff
changeset
 | 
481  | 
|
| 5692 | 482  | 
val extend_trfunsT = ext_syntax SynExt.syn_ext_trfunsT ("", true);
 | 
| 2383 | 483  | 
|
| 5692 | 484  | 
val extend_tokentrfuns = ext_syntax SynExt.syn_ext_tokentrfuns ("", true);
 | 
| 2700 | 485  | 
|
| 
12073
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
486  | 
fun extend_trrules rules syn =  | 
| 
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
487  | 
  ext_syntax SynExt.syn_ext_rules ("", true) (prep_rules (read_pattern syn) rules) syn;
 | 
| 1158 | 488  | 
|
| 
12073
 
b4401452928e
extend_XXX: sane argument order ... -> syntax -> syntax;
 
wenzelm 
parents: 
11546 
diff
changeset
 | 
489  | 
fun extend_trrules_i rules = ext_syntax SynExt.syn_ext_rules ("", true) (prep_rules I rules);
 | 
| 5692 | 490  | 
|
491  | 
||
492  | 
||
493  | 
(** export parts of internal Syntax structures **)  | 
|
494  | 
||
| 6322 | 495  | 
open TokenTrans Lexicon SynExt Ast Parser TypeExt SynTrans Mixfix Printer;  | 
| 2366 | 496  | 
|
497  | 
||
| 0 | 498  | 
end;  | 
| 5692 | 499  | 
|
500  | 
||
501  | 
structure BasicSyntax: BASIC_SYNTAX = Syntax;  | 
|
502  | 
open BasicSyntax;  |