equal
deleted
inserted
replaced
4 Lexer for the inner Isabelle syntax (terms and types). |
4 Lexer for the inner Isabelle syntax (terms and types). |
5 *) |
5 *) |
6 |
6 |
7 signature LEXICON = |
7 signature LEXICON = |
8 sig |
8 sig |
|
9 structure Syntax: |
|
10 sig |
|
11 val const: string -> term |
|
12 val free: string -> term |
|
13 val var: indexname -> term |
|
14 end |
9 val is_identifier: string -> bool |
15 val is_identifier: string -> bool |
10 val is_ascii_identifier: string -> bool |
16 val is_ascii_identifier: string -> bool |
11 val is_xid: string -> bool |
17 val is_xid: string -> bool |
12 val is_tid: string -> bool |
18 val is_tid: string -> bool |
13 val scan_id: Symbol_Pos.T list -> Symbol_Pos.T list * Symbol_Pos.T list |
19 val scan_id: Symbol_Pos.T list -> Symbol_Pos.T list * Symbol_Pos.T list |
45 val predef_term: string -> token option |
51 val predef_term: string -> token option |
46 val implode_xstr: string list -> string |
52 val implode_xstr: string list -> string |
47 val explode_xstr: string -> string list |
53 val explode_xstr: string -> string list |
48 val tokenize: Scan.lexicon -> bool -> Symbol_Pos.T list -> token list |
54 val tokenize: Scan.lexicon -> bool -> Symbol_Pos.T list -> token list |
49 val read_indexname: string -> indexname |
55 val read_indexname: string -> indexname |
50 val const: string -> term |
|
51 val free: string -> term |
|
52 val var: indexname -> term |
|
53 val read_var: string -> term |
56 val read_var: string -> term |
54 val read_variable: string -> indexname option |
57 val read_variable: string -> indexname option |
55 val read_nat: string -> int option |
58 val read_nat: string -> int option |
56 val read_int: string -> int option |
59 val read_int: string -> int option |
57 val read_xnum: string -> {radix: int, leading_zeros: int, value: int} |
60 val read_xnum: string -> {radix: int, leading_zeros: int, value: int} |
72 end; |
75 end; |
73 |
76 |
74 structure Lexicon: LEXICON = |
77 structure Lexicon: LEXICON = |
75 struct |
78 struct |
76 |
79 |
|
80 (** syntaxtic terms **) |
|
81 |
|
82 structure Syntax = |
|
83 struct |
|
84 |
|
85 fun const c = Const (c, dummyT); |
|
86 fun free x = Free (x, dummyT); |
|
87 fun var xi = Var (xi, dummyT); |
|
88 |
|
89 end; |
|
90 |
|
91 |
|
92 |
77 (** is_identifier etc. **) |
93 (** is_identifier etc. **) |
78 |
94 |
79 val is_identifier = Symbol.is_ident o Symbol.explode; |
95 val is_identifier = Symbol.is_ident o Symbol.explode; |
80 |
96 |
81 fun is_ascii_identifier s = |
97 fun is_ascii_identifier s = |
326 | _ => error ("Lexical error in variable name: " ^ quote s)); |
342 | _ => error ("Lexical error in variable name: " ^ quote s)); |
327 |
343 |
328 |
344 |
329 (* read_var *) |
345 (* read_var *) |
330 |
346 |
331 fun const c = Const (c, dummyT); |
|
332 fun free x = Free (x, dummyT); |
|
333 fun var xi = Var (xi, dummyT); |
|
334 |
|
335 fun read_var str = |
347 fun read_var str = |
336 let |
348 let |
337 val scan = |
349 val scan = |
338 $$$ "?" |-- scan_indexname --| Scan.ahead (Scan.one Symbol_Pos.is_eof) >> var || |
350 $$$ "?" |-- scan_indexname --| Scan.ahead (Scan.one Symbol_Pos.is_eof) |
339 Scan.many (Symbol.is_regular o Symbol_Pos.symbol) >> (free o implode o map Symbol_Pos.symbol); |
351 >> Syntax.var || |
|
352 Scan.many (Symbol.is_regular o Symbol_Pos.symbol) |
|
353 >> (Syntax.free o implode o map Symbol_Pos.symbol); |
340 in the (Scan.read Symbol_Pos.stopper scan (Symbol_Pos.explode (str, Position.none))) end; |
354 in the (Scan.read Symbol_Pos.stopper scan (Symbol_Pos.explode (str, Position.none))) end; |
341 |
355 |
342 |
356 |
343 (* read_variable *) |
357 (* read_variable *) |
344 |
358 |
446 |
460 |
447 val is_marked = |
461 val is_marked = |
448 unmark {case_class = K true, case_type = K true, case_const = K true, |
462 unmark {case_class = K true, case_type = K true, case_const = K true, |
449 case_fixed = K true, case_default = K false}; |
463 case_fixed = K true, case_default = K false}; |
450 |
464 |
451 val dummy_type = const (mark_type "dummy"); |
465 val dummy_type = Syntax.const (mark_type "dummy"); |
452 val fun_type = const (mark_type "fun"); |
466 val fun_type = Syntax.const (mark_type "fun"); |
453 |
467 |
454 end; |
468 end; |