26 val type_ident: string parser |
26 val type_ident: string parser |
27 val type_var: string parser |
27 val type_var: string parser |
28 val number: string parser |
28 val number: string parser |
29 val float_number: string parser |
29 val float_number: string parser |
30 val string: string parser |
30 val string: string parser |
|
31 val string_position: (string * Position.T) parser |
31 val alt_string: string parser |
32 val alt_string: string parser |
32 val verbatim: string parser |
33 val verbatim: string parser |
33 val cartouche: string parser |
34 val cartouche: string parser |
34 val eof: string parser |
35 val eof: string parser |
35 val command_name: string -> string parser |
36 val command_name: string -> string parser |
38 val keyword_improper: string -> string parser |
39 val keyword_improper: string -> string parser |
39 val $$$ : string -> string parser |
40 val $$$ : string -> string parser |
40 val reserved: string -> string parser |
41 val reserved: string -> string parser |
41 val underscore: string parser |
42 val underscore: string parser |
42 val maybe: 'a parser -> 'a option parser |
43 val maybe: 'a parser -> 'a option parser |
|
44 val maybe_position: ('a * Position.T) parser -> ('a option * Position.T) parser |
43 val tag_name: string parser |
45 val tag_name: string parser |
44 val tags: string list parser |
46 val tags: string list parser |
45 val opt_keyword: string -> bool parser |
47 val opt_keyword: string -> bool parser |
46 val opt_bang: bool parser |
48 val opt_bang: bool parser |
47 val begin: string parser |
49 val begin: string parser |
61 val and_list1': 'a context_parser -> 'a list context_parser |
63 val and_list1': 'a context_parser -> 'a list context_parser |
62 val list: 'a parser -> 'a list parser |
64 val list: 'a parser -> 'a list parser |
63 val list1: 'a parser -> 'a list parser |
65 val list1: 'a parser -> 'a list parser |
64 val properties: Properties.T parser |
66 val properties: Properties.T parser |
65 val name: string parser |
67 val name: string parser |
|
68 val name_range: (string * Position.range) parser |
|
69 val name_position: (string * Position.T) parser |
66 val binding: binding parser |
70 val binding: binding parser |
67 val embedded: string parser |
71 val embedded: string parser |
|
72 val embedded_position: (string * Position.T) parser |
68 val text: string parser |
73 val text: string parser |
69 val path: string parser |
74 val path: string parser |
70 val session_name: string parser |
75 val session_name: (string * Position.T) parser |
71 val theory_name: string parser |
76 val theory_name: (string * Position.T) parser |
72 val liberal_name: string parser |
77 val liberal_name: string parser |
73 val parname: string parser |
78 val parname: string parser |
74 val parbinding: binding parser |
79 val parbinding: binding parser |
75 val class: string parser |
80 val class: string parser |
76 val sort: string parser |
81 val sort: string parser |
108 val attribs: Token.src list parser |
113 val attribs: Token.src list parser |
109 val opt_attribs: Token.src list parser |
114 val opt_attribs: Token.src list parser |
110 val thm_sel: Facts.interval list parser |
115 val thm_sel: Facts.interval list parser |
111 val thm: (Facts.ref * Token.src list) parser |
116 val thm: (Facts.ref * Token.src list) parser |
112 val thms1: (Facts.ref * Token.src list) list parser |
117 val thms1: (Facts.ref * Token.src list) list parser |
113 val option_name: string parser |
|
114 val option_value: string parser |
|
115 val options: ((string * Position.T) * (string * Position.T)) list parser |
118 val options: ((string * Position.T) * (string * Position.T)) list parser |
116 end; |
119 end; |
117 |
120 |
118 structure Parse: PARSE = |
121 structure Parse: PARSE = |
119 struct |
122 struct |
216 |
219 |
217 val minus = sym_ident :-- (fn "-" => Scan.succeed () | _ => Scan.fail) >> #1; |
220 val minus = sym_ident :-- (fn "-" => Scan.succeed () | _ => Scan.fail) >> #1; |
218 |
221 |
219 val underscore = sym_ident :-- (fn "_" => Scan.succeed () | _ => Scan.fail) >> #1; |
222 val underscore = sym_ident :-- (fn "_" => Scan.succeed () | _ => Scan.fail) >> #1; |
220 fun maybe scan = underscore >> K NONE || scan >> SOME; |
223 fun maybe scan = underscore >> K NONE || scan >> SOME; |
|
224 fun maybe_position scan = position (underscore >> K NONE) || scan >> apfst SOME; |
221 |
225 |
222 val nat = number >> (#1 o Library.read_int o Symbol.explode); |
226 val nat = number >> (#1 o Library.read_int o Symbol.explode); |
223 val int = Scan.optional (minus >> K ~1) 1 -- nat >> op *; |
227 val int = Scan.optional (minus >> K ~1) 1 -- nat >> op *; |
224 val real = float_number >> Value.parse_real || int >> Real.fromInt; |
228 val real = float_number >> Value.parse_real || int >> Real.fromInt; |
225 |
229 |
263 |
267 |
264 val name = |
268 val name = |
265 group (fn () => "name") |
269 group (fn () => "name") |
266 (short_ident || long_ident || sym_ident || number || string); |
270 (short_ident || long_ident || sym_ident || number || string); |
267 |
271 |
268 val binding = position name >> Binding.make; |
272 val name_range = input name >> Input.source_content_range; |
|
273 val name_position = input name >> Input.source_content; |
|
274 |
|
275 val string_position = input string >> Input.source_content; |
|
276 |
|
277 val binding = name_position >> Binding.make; |
269 |
278 |
270 val embedded = |
279 val embedded = |
271 group (fn () => "embedded content") |
280 group (fn () => "embedded content") |
272 (cartouche || string || short_ident || long_ident || sym_ident || |
281 (cartouche || string || short_ident || long_ident || sym_ident || |
273 term_var || type_ident || type_var || number); |
282 term_var || type_ident || type_var || number); |
274 |
283 |
|
284 val embedded_position = input embedded >> Input.source_content; |
|
285 |
275 val text = group (fn () => "text") (embedded || verbatim); |
286 val text = group (fn () => "text") (embedded || verbatim); |
276 |
287 |
277 val path = group (fn () => "file name/path specification") embedded; |
288 val path = group (fn () => "file name/path specification") embedded; |
278 |
289 |
279 val session_name = group (fn () => "session name") name; |
290 val session_name = group (fn () => "session name") name_position; |
280 val theory_name = group (fn () => "theory name") name; |
291 val theory_name = group (fn () => "theory name") name_position; |
281 |
292 |
282 val liberal_name = keyword_with Token.ident_or_symbolic || name; |
293 val liberal_name = keyword_with Token.ident_or_symbolic || name; |
283 |
294 |
284 val parname = Scan.optional ($$$ "(" |-- name --| $$$ ")") ""; |
295 val parname = Scan.optional ($$$ "(" |-- name --| $$$ ")") ""; |
285 val parbinding = Scan.optional ($$$ "(" |-- binding --| $$$ ")") Binding.empty; |
296 val parbinding = Scan.optional ($$$ "(" |-- binding --| $$$ ")") Binding.empty; |
411 (* target information *) |
422 (* target information *) |
412 |
423 |
413 val private = position ($$$ "private") >> #2; |
424 val private = position ($$$ "private") >> #2; |
414 val qualified = position ($$$ "qualified") >> #2; |
425 val qualified = position ($$$ "qualified") >> #2; |
415 |
426 |
416 val target = ($$$ "(" -- $$$ "in") |-- !!! (position name --| $$$ ")"); |
427 val target = ($$$ "(" -- $$$ "in") |-- !!! (name_position --| $$$ ")"); |
417 val opt_target = Scan.option target; |
428 val opt_target = Scan.option target; |
418 |
429 |
419 |
430 |
420 (* arguments within outer syntax *) |
431 (* arguments within outer syntax *) |
421 |
432 |
465 nat >> Facts.Single) --| $$$ ")"; |
476 nat >> Facts.Single) --| $$$ ")"; |
466 |
477 |
467 val thm = |
478 val thm = |
468 $$$ "[" |-- attribs --| $$$ "]" >> pair (Facts.named "") || |
479 $$$ "[" |-- attribs --| $$$ "]" >> pair (Facts.named "") || |
469 (literal_fact >> Facts.Fact || |
480 (literal_fact >> Facts.Fact || |
470 position name -- Scan.option thm_sel >> Facts.Named) -- opt_attribs; |
481 name_position -- Scan.option thm_sel >> Facts.Named) -- opt_attribs; |
471 |
482 |
472 val thms1 = Scan.repeat1 thm; |
483 val thms1 = Scan.repeat1 thm; |
473 |
484 |
474 |
485 |
475 (* options *) |
486 (* options *) |
476 |
487 |
477 val option_name = group (fn () => "option name") name; |
488 val option_name = group (fn () => "option name") name_position; |
478 val option_value = group (fn () => "option value") ((token real || token name) >> Token.content_of); |
489 val option_value = group (fn () => "option value") ((token real || token name) >> Token.content_of); |
479 |
490 |
480 val option = |
491 val option = |
481 position option_name :-- (fn (_, pos) => |
492 option_name :-- (fn (_, pos) => |
482 Scan.optional ($$$ "=" |-- !!! (position option_value)) ("true", pos)); |
493 Scan.optional ($$$ "=" |-- !!! (position option_value)) ("true", pos)); |
483 |
494 |
484 val options = $$$ "[" |-- list1 option --| $$$ "]"; |
495 val options = $$$ "[" |-- list1 option --| $$$ "]"; |
485 |
496 |
486 end; |
497 end; |