12 Attribute of theory attribute * ProofContext.context attribute |
12 Attribute of theory attribute * ProofContext.context attribute |
13 type T |
13 type T |
14 val string_of: T -> string |
14 val string_of: T -> string |
15 val mk_ident: string * Position.T -> T |
15 val mk_ident: string * Position.T -> T |
16 val mk_string: string * Position.T -> T |
16 val mk_string: string * Position.T -> T |
|
17 val mk_alt_string: string * Position.T -> T |
17 val mk_keyword: string * Position.T -> T |
18 val mk_keyword: string * Position.T -> T |
18 val mk_name: string -> T |
19 val mk_name: string -> T |
19 val mk_typ: typ -> T |
20 val mk_typ: typ -> T |
20 val mk_term: term -> T |
21 val mk_term: term -> T |
21 val mk_fact: thm list -> T |
22 val mk_fact: thm list -> T |
44 val parens: (T list -> 'a * T list) -> T list -> 'a * T list |
45 val parens: (T list -> 'a * T list) -> T list -> 'a * T list |
45 val bracks: (T list -> 'a * T list) -> T list -> 'a * T list |
46 val bracks: (T list -> 'a * T list) -> T list -> 'a * T list |
46 val mode: string -> 'a * T list -> bool * ('a * T list) |
47 val mode: string -> 'a * T list -> bool * ('a * T list) |
47 val maybe: (T list -> 'a * T list) -> T list -> 'a option * T list |
48 val maybe: (T list -> 'a * T list) -> T list -> 'a option * T list |
48 val name: T list -> string * T list |
49 val name: T list -> string * T list |
|
50 val alt_name: T list -> string * T list |
49 val symbol: T list -> string * T list |
51 val symbol: T list -> string * T list |
50 val liberal_name: T list -> string * T list |
52 val liberal_name: T list -> string * T list |
51 val nat: T list -> int * T list |
53 val nat: T list -> int * T list |
52 val int: T list -> int * T list |
54 val int: T list -> int * T list |
53 val var: T list -> indexname * T list |
55 val var: T list -> indexname * T list |
100 (*An argument token is a symbol (with raw string value), together with |
102 (*An argument token is a symbol (with raw string value), together with |
101 an optional assigned internal value. Note that an assignable ref |
103 an optional assigned internal value. Note that an assignable ref |
102 designates an intermediate state of internalization -- it is NOT |
104 designates an intermediate state of internalization -- it is NOT |
103 meant to persist.*) |
105 meant to persist.*) |
104 |
106 |
105 datatype kind = Ident | String | Keyword | EOF; |
107 datatype kind = Ident | String | AltString | Keyword | EOF; |
106 |
108 |
107 type symbol = kind * string * Position.T; |
109 type symbol = kind * string * Position.T; |
108 |
110 |
109 datatype value = |
111 datatype value = |
110 Name of string | |
112 Name of string | |
119 Assignable of value option ref; |
121 Assignable of value option ref; |
120 |
122 |
121 datatype T = Arg of symbol * slot; |
123 datatype T = Arg of symbol * slot; |
122 |
124 |
123 fun string_of (Arg ((Ident, x, _), _)) = x |
125 fun string_of (Arg ((Ident, x, _), _)) = x |
124 | string_of (Arg ((String, x, _), _)) = Library.quote x |
126 | string_of (Arg ((String, x, _), _)) = quote x |
|
127 | string_of (Arg ((AltString, x, _), _)) = enclose "`" "`" x |
125 | string_of (Arg ((Keyword, x, _), _)) = x |
128 | string_of (Arg ((Keyword, x, _), _)) = x |
126 | string_of (Arg ((EOF, _, _), _)) = ""; |
129 | string_of (Arg ((EOF, _, _), _)) = ""; |
127 |
130 |
128 fun sym_of (Arg ((_, x, _), _)) = x; |
131 fun sym_of (Arg ((_, x, _), _)) = x; |
129 fun pos_of (Arg ((_, _, pos), _)) = pos; |
132 fun pos_of (Arg ((_, _, pos), _)) = pos; |
134 fun mk_symbol k (x, p) = Arg ((k, x, p), Empty); |
137 fun mk_symbol k (x, p) = Arg ((k, x, p), Empty); |
135 fun mk_value k v = Arg ((Keyword, k, Position.none), Value (SOME v)); |
138 fun mk_value k v = Arg ((Keyword, k, Position.none), Value (SOME v)); |
136 |
139 |
137 val mk_ident = mk_symbol Ident; |
140 val mk_ident = mk_symbol Ident; |
138 val mk_string = mk_symbol String; |
141 val mk_string = mk_symbol String; |
|
142 val mk_alt_string = mk_symbol AltString; |
139 val mk_keyword = mk_symbol Keyword; |
143 val mk_keyword = mk_symbol Keyword; |
140 val mk_name = mk_value "<name>" o Name; |
144 val mk_name = mk_value "<name>" o Name; |
141 val mk_typ = mk_value "<typ>" o Typ; |
145 val mk_typ = mk_value "<typ>" o Typ; |
142 val mk_term = mk_value "<term>" o Term; |
146 val mk_term = mk_value "<term>" o Term; |
143 val mk_fact = mk_value "<fact>" o Fact; |
147 val mk_fact = mk_value "<fact>" o Fact; |
224 fun some_ident f = |
228 fun some_ident f = |
225 touch (Scan.some (fn Arg ((Ident, x, _), _) => f x | _ => NONE)); |
229 touch (Scan.some (fn Arg ((Ident, x, _), _) => f x | _ => NONE)); |
226 |
230 |
227 val named = |
231 val named = |
228 touch (Scan.one (fn Arg ((k, _, _), _) => k = Ident orelse k = String)); |
232 touch (Scan.one (fn Arg ((k, _, _), _) => k = Ident orelse k = String)); |
|
233 |
|
234 val alt_string = |
|
235 touch (Scan.one (fn Arg ((k, _, _), _) => k = AltString)); |
229 |
236 |
230 val symbolic = |
237 val symbolic = |
231 touch (Scan.one (fn Arg ((k, x, _), _) => k = Keyword andalso OuterLex.is_sid x)); |
238 touch (Scan.one (fn Arg ((k, x, _), _) => k = Keyword andalso OuterLex.is_sid x)); |
232 |
239 |
233 fun &&& x = |
240 fun &&& x = |
249 fun bracks scan = $$$ "[" |-- scan --| $$$ "]"; |
256 fun bracks scan = $$$ "[" |-- scan --| $$$ "]"; |
250 fun mode s = Scan.lift (Scan.optional (parens ($$$ s) >> K true) false); |
257 fun mode s = Scan.lift (Scan.optional (parens ($$$ s) >> K true) false); |
251 fun maybe scan = $$$ "_" >> K NONE || scan >> SOME; |
258 fun maybe scan = $$$ "_" >> K NONE || scan >> SOME; |
252 |
259 |
253 val name = named >> sym_of; |
260 val name = named >> sym_of; |
|
261 val alt_name = alt_string >> sym_of; |
254 val symbol = symbolic >> sym_of; |
262 val symbol = symbolic >> sym_of; |
255 val liberal_name = symbol || name; |
263 val liberal_name = symbol || name; |
256 |
264 |
257 val nat = some_ident Syntax.read_nat; |
265 val nat = some_ident Syntax.read_nat; |
258 val int = Scan.optional ($$$ "-" >> K ~1) 1 -- nat >> op *; |
266 val int = Scan.optional ($$$ "-" >> K ~1) 1 -- nat >> op *; |
287 val internal_attribute = value (fn Attribute att => att); |
295 val internal_attribute = value (fn Attribute att => att); |
288 |
296 |
289 fun named_name intern = internal_name || named >> evaluate Name intern; |
297 fun named_name intern = internal_name || named >> evaluate Name intern; |
290 fun named_typ readT = internal_typ || named >> evaluate Typ readT; |
298 fun named_typ readT = internal_typ || named >> evaluate Typ readT; |
291 fun named_term read = internal_term || named >> evaluate Term read; |
299 fun named_term read = internal_term || named >> evaluate Term read; |
292 fun named_fact get = internal_fact || named >> evaluate Fact get; |
300 fun named_fact get = internal_fact || (alt_string || named) >> evaluate Fact get; |
293 |
301 |
294 |
302 |
295 (* terms and types *) |
303 (* terms and types *) |
296 |
304 |
297 val global_typ_abbrev = Scan.peek (named_typ o ProofContext.read_typ_abbrev o ProofContext.init); |
305 val global_typ_abbrev = Scan.peek (named_typ o ProofContext.read_typ_abbrev o ProofContext.init); |