1 (* Title: Pure/Isar/outer_parse.ML |
1 (* Title: Pure/Isar/outer_parse.ML |
2 ID: $Id$ |
|
3 Author: Markus Wenzel, TU Muenchen |
2 Author: Markus Wenzel, TU Muenchen |
4 |
3 |
5 Generic parsers for Isabelle/Isar outer syntax. |
4 Generic parsers for Isabelle/Isar outer syntax. |
6 *) |
5 *) |
7 |
6 |
8 signature OUTER_PARSE = |
7 signature OUTER_PARSE = |
9 sig |
8 sig |
10 type token = OuterLex.token |
9 type token = OuterLex.token |
|
10 type 'a parser = token list -> 'a * token list |
11 val group: string -> (token list -> 'a) -> token list -> 'a |
11 val group: string -> (token list -> 'a) -> token list -> 'a |
12 val !!! : (token list -> 'a) -> token list -> 'a |
12 val !!! : (token list -> 'a) -> token list -> 'a |
13 val !!!! : (token list -> 'a) -> token list -> 'a |
13 val !!!! : (token list -> 'a) -> token list -> 'a |
14 val triple1: ('a * 'b) * 'c -> 'a * 'b * 'c |
14 val triple1: ('a * 'b) * 'c -> 'a * 'b * 'c |
15 val triple2: 'a * ('b * 'c) -> 'a * 'b * 'c |
15 val triple2: 'a * ('b * 'c) -> 'a * 'b * 'c |
16 val triple_swap: ('a * 'b) * 'c -> ('a * 'c) * 'b |
16 val triple_swap: ('a * 'b) * 'c -> ('a * 'c) * 'b |
17 val not_eof: token list -> token * token list |
17 val not_eof: token parser |
18 val position: (token list -> 'a * 'b) -> token list -> ('a * Position.T) * 'b |
18 val position: (token list -> 'a * 'b) -> token list -> ('a * Position.T) * 'b |
19 val command: token list -> string * token list |
19 val command: string parser |
20 val keyword: token list -> string * token list |
20 val keyword: string parser |
21 val short_ident: token list -> string * token list |
21 val short_ident: string parser |
22 val long_ident: token list -> string * token list |
22 val long_ident: string parser |
23 val sym_ident: token list -> string * token list |
23 val sym_ident: string parser |
24 val minus: token list -> string * token list |
24 val minus: string parser |
25 val term_var: token list -> string * token list |
25 val term_var: string parser |
26 val type_ident: token list -> string * token list |
26 val type_ident: string parser |
27 val type_var: token list -> string * token list |
27 val type_var: string parser |
28 val number: token list -> string * token list |
28 val number: string parser |
29 val string: token list -> string * token list |
29 val string: string parser |
30 val alt_string: token list -> string * token list |
30 val alt_string: string parser |
31 val verbatim: token list -> string * token list |
31 val verbatim: string parser |
32 val sync: token list -> string * token list |
32 val sync: string parser |
33 val eof: token list -> string * token list |
33 val eof: string parser |
34 val keyword_with: (string -> bool) -> token list -> string * token list |
34 val keyword_with: (string -> bool) -> string parser |
35 val keyword_ident_or_symbolic: token list -> string * token list |
35 val keyword_ident_or_symbolic: string parser |
36 val $$$ : string -> token list -> string * token list |
36 val $$$ : string -> string parser |
37 val reserved: string -> token list -> string * token list |
37 val reserved: string -> string parser |
38 val semicolon: token list -> string * token list |
38 val semicolon: string parser |
39 val underscore: token list -> string * token list |
39 val underscore: string parser |
40 val maybe: (token list -> 'a * token list) -> token list -> 'a option * token list |
40 val maybe: 'a parser -> 'a option parser |
41 val tag_name: token list -> string * token list |
41 val tag_name: string parser |
42 val tags: token list -> string list * token list |
42 val tags: string list parser |
43 val opt_unit: token list -> unit * token list |
43 val opt_unit: unit parser |
44 val opt_keyword: string -> token list -> bool * token list |
44 val opt_keyword: string -> bool parser |
45 val begin: token list -> string * token list |
45 val begin: string parser |
46 val opt_begin: token list -> bool * token list |
46 val opt_begin: bool parser |
47 val nat: token list -> int * token list |
47 val nat: int parser |
48 val int: token list -> int * token list |
48 val int: int parser |
49 val enum: string -> (token list -> 'a * token list) -> token list -> 'a list * token list |
49 val enum: string -> 'a parser -> 'a list parser |
50 val enum1: string -> (token list -> 'a * token list) -> token list -> 'a list * token list |
50 val enum1: string -> 'a parser -> 'a list parser |
51 val and_list: (token list -> 'a * token list) -> token list -> 'a list * token list |
51 val and_list: 'a parser -> 'a list parser |
52 val and_list1: (token list -> 'a * token list) -> token list -> 'a list * token list |
52 val and_list1: 'a parser -> 'a list parser |
53 val enum': string -> ('a * token list -> 'b * ('a * token list)) -> |
53 val enum': string -> ('a * token list -> 'b * ('a * token list)) -> |
54 'a * token list -> 'b list * ('a * token list) |
54 'a * token list -> 'b list * ('a * token list) |
55 val enum1': string -> ('a * token list -> 'b * ('a * token list)) -> |
55 val enum1': string -> ('a * token list -> 'b * ('a * token list)) -> |
56 'a * token list -> 'b list * ('a * token list) |
56 'a * token list -> 'b list * ('a * token list) |
57 val and_list': ('a * token list -> 'b * ('a * token list)) -> |
57 val and_list': ('a * token list -> 'b * ('a * token list)) -> |
58 'a * token list -> 'b list * ('a * token list) |
58 'a * token list -> 'b list * ('a * token list) |
59 val and_list1': ('a * token list -> 'b * ('a * token list)) -> |
59 val and_list1': ('a * token list -> 'b * ('a * token list)) -> |
60 'a * token list -> 'b list * ('a * token list) |
60 'a * token list -> 'b list * ('a * token list) |
61 val list: (token list -> 'a * token list) -> token list -> 'a list * token list |
61 val list: 'a parser -> 'a list parser |
62 val list1: (token list -> 'a * token list) -> token list -> 'a list * token list |
62 val list1: 'a parser -> 'a list parser |
63 val name: token list -> bstring * token list |
63 val name: bstring parser |
64 val binding: token list -> Binding.T * token list |
64 val binding: Binding.T parser |
65 val xname: token list -> xstring * token list |
65 val xname: xstring parser |
66 val text: token list -> string * token list |
66 val text: string parser |
67 val path: token list -> Path.T * token list |
67 val path: Path.T parser |
68 val parname: token list -> string * token list |
68 val parname: string parser |
69 val parbinding: token list -> Binding.T * token list |
69 val parbinding: Binding.T parser |
70 val sort: token list -> string * token list |
70 val sort: string parser |
71 val arity: token list -> (string * string list * string) * token list |
71 val arity: (string * string list * string) parser |
72 val multi_arity: token list -> (string list * string list * string) * token list |
72 val multi_arity: (string list * string list * string) parser |
73 val type_args: token list -> string list * token list |
73 val type_args: string list parser |
74 val typ_group: token list -> string * token list |
74 val typ_group: string parser |
75 val typ: token list -> string * token list |
75 val typ: string parser |
76 val mixfix: token list -> mixfix * token list |
76 val mixfix: mixfix parser |
77 val mixfix': token list -> mixfix * token list |
77 val mixfix': mixfix parser |
78 val opt_infix: token list -> mixfix * token list |
78 val opt_infix: mixfix parser |
79 val opt_infix': token list -> mixfix * token list |
79 val opt_infix': mixfix parser |
80 val opt_mixfix: token list -> mixfix * token list |
80 val opt_mixfix: mixfix parser |
81 val opt_mixfix': token list -> mixfix * token list |
81 val opt_mixfix': mixfix parser |
82 val where_: token list -> string * token list |
82 val where_: string parser |
83 val const: token list -> (string * string * mixfix) * token list |
83 val const: (string * string * mixfix) parser |
84 val params: token list -> (Binding.T * string option) list * token list |
84 val params: (Binding.T * string option) list parser |
85 val simple_fixes: token list -> (Binding.T * string option) list * token list |
85 val simple_fixes: (Binding.T * string option) list parser |
86 val fixes: token list -> (Binding.T * string option * mixfix) list * token list |
86 val fixes: (Binding.T * string option * mixfix) list parser |
87 val for_fixes: token list -> (Binding.T * string option * mixfix) list * token list |
87 val for_fixes: (Binding.T * string option * mixfix) list parser |
88 val for_simple_fixes: token list -> (Binding.T * string option) list * token list |
88 val for_simple_fixes: (Binding.T * string option) list parser |
89 val ML_source: token list -> (SymbolPos.text * Position.T) * token list |
89 val ML_source: (SymbolPos.text * Position.T) parser |
90 val doc_source: token list -> (SymbolPos.text * Position.T) * token list |
90 val doc_source: (SymbolPos.text * Position.T) parser |
91 val properties: token list -> Properties.T * token list |
91 val term_group: string parser |
92 val props_text: token list -> (Position.T * string) * token list |
92 val prop_group: string parser |
93 val term_group: token list -> string * token list |
93 val term: string parser |
94 val prop_group: token list -> string * token list |
94 val prop: string parser |
95 val term: token list -> string * token list |
95 val propp: (string * string list) parser |
96 val prop: token list -> string * token list |
96 val termp: (string * string list) parser |
97 val propp: token list -> (string * string list) * token list |
97 val target: xstring parser |
98 val termp: token list -> (string * string list) * token list |
98 val opt_target: xstring option parser |
99 val target: token list -> xstring * token list |
|
100 val opt_target: token list -> xstring option * token list |
|
101 end; |
99 end; |
102 |
100 |
103 structure OuterParse: OUTER_PARSE = |
101 structure OuterParse: OUTER_PARSE = |
104 struct |
102 struct |
105 |
103 |
106 structure T = OuterLex; |
104 structure T = OuterLex; |
107 type token = T.token; |
105 type token = T.token; |
|
106 |
|
107 type 'a parser = token list -> 'a * token list; |
108 |
108 |
109 |
109 |
110 (** error handling **) |
110 (** error handling **) |
111 |
111 |
112 (* group atomic parsers (no cuts!) *) |
112 (* group atomic parsers (no cuts!) *) |