39 include LEXICON0 |
39 include LEXICON0 |
40 val is_xid: string -> bool |
40 val is_xid: string -> bool |
41 datatype token_kind = |
41 datatype token_kind = |
42 Literal | IdentSy | LongIdentSy | VarSy | TFreeSy | TVarSy | NumSy | XNumSy | StrSy | EOF |
42 Literal | IdentSy | LongIdentSy | VarSy | TFreeSy | TVarSy | NumSy | XNumSy | StrSy | EOF |
43 datatype token = Token of token_kind * string * Position.range |
43 datatype token = Token of token_kind * string * Position.range |
|
44 val str_of_token: token -> string |
|
45 val pos_of_token: token -> Position.T |
44 val mk_eof: Position.T -> token |
46 val mk_eof: Position.T -> token |
45 val eof: token |
47 val eof: token |
46 val is_eof: token -> bool |
48 val is_eof: token -> bool |
47 val stopper: token Scan.stopper |
49 val stopper: token Scan.stopper |
48 val idT: typ |
50 val idT: typ |
50 val varT: typ |
52 val varT: typ |
51 val tidT: typ |
53 val tidT: typ |
52 val tvarT: typ |
54 val tvarT: typ |
53 val terminals: string list |
55 val terminals: string list |
54 val is_terminal: string -> bool |
56 val is_terminal: string -> bool |
55 val str_of_token: token -> string |
|
56 val pos_of_token: token -> string |
|
57 val display_token: token -> string |
|
58 val matching_tokens: token * token -> bool |
57 val matching_tokens: token * token -> bool |
59 val valued_token: token -> bool |
58 val valued_token: token -> bool |
60 val predef_term: string -> token option |
59 val predef_term: string -> token option |
61 val tokenize: Scan.lexicon -> bool -> SymbolPos.T list -> token list |
60 val tokenize: Scan.lexicon -> bool -> SymbolPos.T list -> token list |
62 end; |
61 end; |
109 |
108 |
110 datatype token_kind = |
109 datatype token_kind = |
111 Literal | IdentSy | LongIdentSy | VarSy | TFreeSy | TVarSy | NumSy | XNumSy | StrSy | EOF; |
110 Literal | IdentSy | LongIdentSy | VarSy | TFreeSy | TVarSy | NumSy | XNumSy | StrSy | EOF; |
112 |
111 |
113 datatype token = Token of token_kind * string * Position.range; |
112 datatype token = Token of token_kind * string * Position.range; |
|
113 |
|
114 fun str_of_token (Token (_, s, _)) = s; |
|
115 fun pos_of_token (Token (_, _, (pos, _))) = pos; |
114 |
116 |
115 |
117 |
116 (* stopper *) |
118 (* stopper *) |
117 |
119 |
118 fun mk_eof pos = Token (EOF, "", (pos, Position.none)); |
120 fun mk_eof pos = Token (EOF, "", (pos, Position.none)); |
133 val tidT = Type ("tid", []); |
135 val tidT = Type ("tid", []); |
134 val tvarT = Type ("tvar", []); |
136 val tvarT = Type ("tvar", []); |
135 |
137 |
136 val terminals = ["id", "longid", "var", "tid", "tvar", "num", "xnum", "xstr"]; |
138 val terminals = ["id", "longid", "var", "tid", "tvar", "num", "xnum", "xstr"]; |
137 val is_terminal = member (op =) terminals; |
139 val is_terminal = member (op =) terminals; |
138 |
|
139 |
|
140 (* str_of_token *) |
|
141 |
|
142 fun str_of_token (Token (_, s, _)) = s; |
|
143 |
|
144 fun pos_of_token (Token (_, _, (pos, _))) = Position.str_of pos; |
|
145 |
|
146 |
|
147 (* display_token *) |
|
148 |
|
149 fun display_token (Token (Literal, s, _)) = quote s |
|
150 | display_token (Token (IdentSy, s, _)) = "id(" ^ s ^ ")" |
|
151 | display_token (Token (LongIdentSy, s, _)) = "longid(" ^ s ^ ")" |
|
152 | display_token (Token (VarSy, s, _)) = "var(" ^ s ^ ")" |
|
153 | display_token (Token (TFreeSy, s, _)) = "tid(" ^ s ^ ")" |
|
154 | display_token (Token (TVarSy, s, _)) = "tvar(" ^ s ^ ")" |
|
155 | display_token (Token (NumSy, s, _)) = "num(" ^ s ^ ")" |
|
156 | display_token (Token (XNumSy, s, _)) = "xnum(" ^ s ^ ")" |
|
157 | display_token (Token (StrSy, s, _)) = "xstr(" ^ s ^ ")" |
|
158 | display_token (Token (EOF, _, _)) = ""; |
|
159 |
140 |
160 |
141 |
161 (* matching_tokens *) |
142 (* matching_tokens *) |
162 |
143 |
163 fun matching_tokens (Token (Literal, x, _), Token (Literal, y, _)) = x = y |
144 fun matching_tokens (Token (Literal, x, _), Token (Literal, y, _)) = x = y |
204 |
185 |
205 fun explode_xstr str = |
186 fun explode_xstr str = |
206 (case Scan.read SymbolPos.stopper scan_str_body (SymbolPos.explode (str, Position.none)) of |
187 (case Scan.read SymbolPos.stopper scan_str_body (SymbolPos.explode (str, Position.none)) of |
207 SOME cs => map symbol cs |
188 SOME cs => map symbol cs |
208 | _ => error ("Inner lexical error: literal string expected at " ^ quote str)); |
189 | _ => error ("Inner lexical error: literal string expected at " ^ quote str)); |
|
190 |
209 |
191 |
210 |
192 |
211 (** tokenize **) |
193 (** tokenize **) |
212 |
194 |
213 fun token_leq (Token (_, s1, _), Token (_, s2, _)) = s1 <= s2; |
195 fun token_leq (Token (_, s1, _), Token (_, s2, _)) = s1 <= s2; |