equal
deleted
inserted
replaced
32 val verbatim: token list -> string * token list |
32 val verbatim: token list -> string * token list |
33 val sync: token list -> string * token list |
33 val sync: token list -> string * token list |
34 val eof: token list -> string * token list |
34 val eof: token list -> string * token list |
35 val not_eof: token list -> token * token list |
35 val not_eof: token list -> token * token list |
36 val opt_unit: token list -> unit * token list |
36 val opt_unit: token list -> unit * token list |
|
37 val opt_keyword: string -> token list -> bool * token list |
37 val nat: token list -> int * token list |
38 val nat: token list -> int * token list |
38 val enum: string -> (token list -> 'a * token list) -> token list -> 'a list * token list |
39 val enum: string -> (token list -> 'a * token list) -> token list -> 'a list * token list |
39 val enum1: string -> (token list -> 'a * token list) -> token list -> 'a list * token list |
40 val enum1: string -> (token list -> 'a * token list) -> token list -> 'a list * token list |
40 val list: (token list -> 'a * token list) -> token list -> 'a list * token list |
41 val list: (token list -> 'a * token list) -> token list -> 'a list * token list |
41 val list1: (token list -> 'a * token list) -> token list -> 'a list * token list |
42 val list1: (token list -> 'a * token list) -> token list -> 'a list * token list |
51 val typ: token list -> string * token list |
52 val typ: token list -> string * token list |
52 val opt_infix: token list -> Syntax.mixfix * token list |
53 val opt_infix: token list -> Syntax.mixfix * token list |
53 val opt_mixfix: token list -> Syntax.mixfix * token list |
54 val opt_mixfix: token list -> Syntax.mixfix * token list |
54 val opt_infix': token list -> Syntax.mixfix * token list |
55 val opt_infix': token list -> Syntax.mixfix * token list |
55 val opt_mixfix': token list -> Syntax.mixfix * token list |
56 val opt_mixfix': token list -> Syntax.mixfix * token list |
|
57 val mixfix': token list -> Syntax.mixfix * token list |
56 val const: token list -> (bstring * string * Syntax.mixfix) * token list |
58 val const: token list -> (bstring * string * Syntax.mixfix) * token list |
57 val term: token list -> string * token list |
59 val term: token list -> string * token list |
58 val prop: token list -> string * token list |
60 val prop: token list -> string * token list |
59 val propp: token list -> (string * (string list * string list)) * token list |
61 val propp: token list -> (string * (string list * string list)) * token list |
60 val termp: token list -> (string * string list) * token list |
62 val termp: token list -> (string * string list) * token list |
151 |
153 |
152 val not_eof = Scan.one T.not_eof; |
154 val not_eof = Scan.one T.not_eof; |
153 |
155 |
154 val opt_unit = Scan.optional ($$$ "(" -- $$$ ")" >> (K ())) (); |
156 val opt_unit = Scan.optional ($$$ "(" -- $$$ ")" >> (K ())) (); |
155 |
157 |
|
158 fun opt_keyword s = Scan.optional ($$$ "(" |-- !!! (($$$ s >> K true) --| $$$ ")")) false; |
|
159 |
156 |
160 |
157 (* enumerations *) |
161 (* enumerations *) |
158 |
162 |
159 fun enum1 sep scan = scan -- Scan.repeat ($$$ sep |-- !!! scan) >> op ::; |
163 fun enum1 sep scan = scan -- Scan.repeat ($$$ sep |-- !!! scan) >> op ::; |
160 fun enum sep scan = enum1 sep scan || Scan.succeed []; |
164 fun enum sep scan = enum1 sep scan || Scan.succeed []; |
171 val name = group "name declaration" (short_ident || sym_ident || string || number); |
175 val name = group "name declaration" (short_ident || sym_ident || string || number); |
172 val xname = group "name reference" (short_ident || long_ident || sym_ident || string || number); |
176 val xname = group "name reference" (short_ident || long_ident || sym_ident || string || number); |
173 val text = group "text" (short_ident || long_ident || sym_ident || string || number || verbatim); |
177 val text = group "text" (short_ident || long_ident || sym_ident || string || number || verbatim); |
174 |
178 |
175 val uname = underscore >> K None || name >> Some; |
179 val uname = underscore >> K None || name >> Some; |
176 (* CB: underscore yields None, any other name Some with that string. |
180 |
177 Used, for example, in the renaming of locale parameters. *) |
|
178 |
181 |
179 (* sorts and arities *) |
182 (* sorts and arities *) |
180 |
183 |
181 val sort = group "sort" xname; |
184 val sort = group "sort" xname; |
182 |
185 |
213 |
216 |
214 val mixfix = |
217 val mixfix = |
215 (string -- !!! (opt_pris -- Scan.optional nat Syntax.max_pri)) |
218 (string -- !!! (opt_pris -- Scan.optional nat Syntax.max_pri)) |
216 >> (Syntax.Mixfix o triple2); |
219 >> (Syntax.Mixfix o triple2); |
217 |
220 |
218 fun opt_fix guard fix = |
221 fun fix_decl guard fix = $$$ "(" |-- guard (fix --| $$$ ")"); |
219 Scan.optional ($$$ "(" |-- guard (fix --| $$$ ")")) Syntax.NoSyn; |
222 fun opt_fix guard fix = Scan.optional (fix_decl guard fix) Syntax.NoSyn; |
220 |
223 |
221 val opt_infix = opt_fix !!! (infxl || infxr || infx); |
224 val opt_infix = opt_fix !!! (infxl || infxr || infx); |
222 val opt_mixfix = opt_fix !!! (mixfix || binder || infxl || infxr || infx); |
225 val opt_mixfix = opt_fix !!! (mixfix || binder || infxl || infxr || infx); |
223 |
|
224 val opt_infix' = opt_fix I (infxl || infxr || infx); |
226 val opt_infix' = opt_fix I (infxl || infxr || infx); |
225 val opt_mixfix' = opt_fix I (mixfix || binder || infxl || infxr || infx); |
227 val opt_mixfix' = opt_fix I (mixfix || binder || infxl || infxr || infx); |
|
228 val mixfix' = fix_decl !!! (mixfix || binder || infxl || infxr || infx); |
226 |
229 |
227 |
230 |
228 (* consts *) |
231 (* consts *) |
229 |
232 |
230 val const = |
233 val const = |