23 val scan_var: Symbol_Pos.T list -> Symbol_Pos.T list * Symbol_Pos.T list |
23 val scan_var: Symbol_Pos.T list -> Symbol_Pos.T list * Symbol_Pos.T list |
24 val scan_tvar: Symbol_Pos.T list -> Symbol_Pos.T list * Symbol_Pos.T list |
24 val scan_tvar: Symbol_Pos.T list -> Symbol_Pos.T list * Symbol_Pos.T list |
25 val is_tid: string -> bool |
25 val is_tid: string -> bool |
26 datatype token_kind = |
26 datatype token_kind = |
27 Literal | IdentSy | LongIdentSy | VarSy | TFreeSy | TVarSy | |
27 Literal | IdentSy | LongIdentSy | VarSy | TFreeSy | TVarSy | |
28 NumSy | FloatSy | XNumSy | StrSy | Space | Comment | EOF |
28 NumSy | FloatSy | XNumSy | StrSy | Cartouche | Space | Comment | EOF |
29 datatype token = Token of token_kind * string * Position.range |
29 datatype token = Token of token_kind * string * Position.range |
30 val str_of_token: token -> string |
30 val str_of_token: token -> string |
31 val pos_of_token: token -> Position.T |
31 val pos_of_token: token -> Position.T |
32 val is_proper: token -> bool |
32 val is_proper: token -> bool |
33 val mk_eof: Position.T -> token |
33 val mk_eof: Position.T -> token |
118 |
118 |
119 (** datatype token **) |
119 (** datatype token **) |
120 |
120 |
121 datatype token_kind = |
121 datatype token_kind = |
122 Literal | IdentSy | LongIdentSy | VarSy | TFreeSy | TVarSy | |
122 Literal | IdentSy | LongIdentSy | VarSy | TFreeSy | TVarSy | |
123 NumSy | FloatSy | XNumSy | StrSy | Space | Comment | EOF; |
123 NumSy | FloatSy | XNumSy | StrSy | Cartouche | Space | Comment | EOF; |
124 |
124 |
125 datatype token = Token of token_kind * string * Position.range; |
125 datatype token = Token of token_kind * string * Position.range; |
126 |
126 |
127 fun str_of_token (Token (_, s, _)) = s; |
127 fun str_of_token (Token (_, s, _)) = s; |
128 fun pos_of_token (Token (_, _, (pos, _))) = pos; |
128 fun pos_of_token (Token (_, _, (pos, _))) = pos; |
158 ("tid", TFreeSy), |
158 ("tid", TFreeSy), |
159 ("tvar", TVarSy), |
159 ("tvar", TVarSy), |
160 ("num_token", NumSy), |
160 ("num_token", NumSy), |
161 ("float_token", FloatSy), |
161 ("float_token", FloatSy), |
162 ("xnum_token", XNumSy), |
162 ("xnum_token", XNumSy), |
163 ("str_token", StrSy)]; |
163 ("str_token", StrSy), |
|
164 ("cartouche", Cartouche)]; |
164 |
165 |
165 val terminals = map #1 terminal_kinds; |
166 val terminals = map #1 terminal_kinds; |
166 val is_terminal = member (op =) terminals; |
167 val is_terminal = member (op =) terminals; |
167 |
168 |
168 |
169 |
173 then Markup.literal |
174 then Markup.literal |
174 else Markup.delimiter; |
175 else Markup.delimiter; |
175 |
176 |
176 val token_kind_markup = |
177 val token_kind_markup = |
177 fn TFreeSy => Markup.tfree |
178 fn TFreeSy => Markup.tfree |
178 | TVarSy => Markup.tvar |
179 | TVarSy => Markup.tvar |
179 | NumSy => Markup.numeral |
180 | NumSy => Markup.numeral |
180 | FloatSy => Markup.numeral |
181 | FloatSy => Markup.numeral |
181 | XNumSy => Markup.numeral |
182 | XNumSy => Markup.numeral |
182 | StrSy => Markup.inner_string |
183 | StrSy => Markup.inner_string |
|
184 | Cartouche => Markup.inner_cartouche |
183 | Comment => Markup.inner_comment |
185 | Comment => Markup.inner_comment |
184 | _ => Markup.empty; |
186 | _ => Markup.empty; |
185 |
187 |
186 fun report_of_token (Token (kind, s, (pos, _))) = |
188 fun report_of_token (Token (kind, s, (pos, _))) = |
187 let val markup = if kind = Literal then literal_markup s else token_kind_markup kind |
189 let val markup = if kind = Literal then literal_markup s else token_kind_markup kind |
188 in (pos, markup) end; |
190 in (pos, markup) end; |
189 |
191 |
265 scan_xid >> token IdentSy; |
267 scan_xid >> token IdentSy; |
266 |
268 |
267 val scan_lit = Scan.literal lex >> token Literal; |
269 val scan_lit = Scan.literal lex >> token Literal; |
268 |
270 |
269 val scan_token = |
271 val scan_token = |
|
272 Symbol_Pos.scan_cartouche !!! >> token Cartouche || |
270 Symbol_Pos.scan_comment !!! >> token Comment || |
273 Symbol_Pos.scan_comment !!! >> token Comment || |
271 Scan.max token_leq scan_lit scan_val || |
274 Scan.max token_leq scan_lit scan_val || |
272 scan_str >> token StrSy || |
275 scan_str >> token StrSy || |
273 Scan.many1 (Symbol.is_blank o Symbol_Pos.symbol) >> token Space; |
276 Scan.many1 (Symbol.is_blank o Symbol_Pos.symbol) >> token Space; |
274 in |
277 in |