...
1<lexer>
2 <config>
3 <name>Standard ML</name>
4 <alias>sml</alias>
5 <filename>*.sml</filename>
6 <filename>*.sig</filename>
7 <filename>*.fun</filename>
8 <mime_type>text/x-standardml</mime_type>
9 <mime_type>application/x-standardml</mime_type>
10 </config>
11 <rules>
12 <state name="delimiters">
13 <rule pattern="\(|\[|\{">
14 <token type="Punctuation"/>
15 <push state="main"/>
16 </rule>
17 <rule pattern="\)|\]|\}">
18 <token type="Punctuation"/>
19 <pop depth="1"/>
20 </rule>
21 <rule pattern="\b(let|if|local)\b(?!\')">
22 <token type="KeywordReserved"/>
23 <push state="main" state="main"/>
24 </rule>
25 <rule pattern="\b(struct|sig|while)\b(?!\')">
26 <token type="KeywordReserved"/>
27 <push state="main"/>
28 </rule>
29 <rule pattern="\b(do|else|end|in|then)\b(?!\')">
30 <token type="KeywordReserved"/>
31 <pop depth="1"/>
32 </rule>
33 </state>
34 <state name="root">
35 <rule>
36 <push state="main"/>
37 </rule>
38 </state>
39 <state name="breakout">
40 <rule pattern="(?=\b(where|do|handle|if|sig|op|while|case|as|else|signature|andalso|struct|infixr|functor|in|structure|then|local|rec|end|fun|of|orelse|val|include|fn|with|exception|let|and|infix|sharing|datatype|type|abstype|withtype|eqtype|nonfix|raise|open)\b(?!\'))">
41 <token type="Text"/>
42 <pop depth="1"/>
43 </rule>
44 </state>
45 <state name="tyvarseq">
46 <rule pattern="\s">
47 <token type="Text"/>
48 </rule>
49 <rule pattern="\(\*">
50 <token type="CommentMultiline"/>
51 <push state="comment"/>
52 </rule>
53 <rule pattern="\'[\w\']*">
54 <token type="NameDecorator"/>
55 </rule>
56 <rule pattern="[a-zA-Z][\w']*">
57 <token type="Name"/>
58 </rule>
59 <rule pattern=",">
60 <token type="Punctuation"/>
61 </rule>
62 <rule pattern="\)">
63 <token type="Punctuation"/>
64 <pop depth="1"/>
65 </rule>
66 <rule pattern="[!%&$#+\-/:<=>?@\\~`^|*]+">
67 <token type="Name"/>
68 </rule>
69 </state>
70 <state name="char">
71 <rule pattern="[^"\\]">
72 <token type="LiteralStringChar"/>
73 </rule>
74 <rule pattern="\\[\\"abtnvfr]">
75 <token type="LiteralStringEscape"/>
76 </rule>
77 <rule pattern="\\\^[\x40-\x5e]">
78 <token type="LiteralStringEscape"/>
79 </rule>
80 <rule pattern="\\[0-9]{3}">
81 <token type="LiteralStringEscape"/>
82 </rule>
83 <rule pattern="\\u[0-9a-fA-F]{4}">
84 <token type="LiteralStringEscape"/>
85 </rule>
86 <rule pattern="\\\s+\\">
87 <token type="LiteralStringInterpol"/>
88 </rule>
89 <rule pattern=""">
90 <token type="LiteralStringChar"/>
91 <pop depth="1"/>
92 </rule>
93 </state>
94 <state name="datbind">
95 <rule>
96 <include state="whitespace"/>
97 </rule>
98 <rule pattern="\b(and)\b(?!\')">
99 <token type="KeywordReserved"/>
100 <push state="#pop" state="dname"/>
101 </rule>
102 <rule pattern="\b(withtype)\b(?!\')">
103 <token type="KeywordReserved"/>
104 <push state="#pop" state="tname"/>
105 </rule>
106 <rule pattern="\b(of)\b(?!\')">
107 <token type="KeywordReserved"/>
108 </rule>
109 <rule pattern="(\|)(\s*)([a-zA-Z][\w']*)">
110 <bygroups>
111 <token type="Punctuation"/>
112 <token type="Text"/>
113 <token type="NameClass"/>
114 </bygroups>
115 </rule>
116 <rule pattern="(\|)(\s+)([!%&$#+\-/:<=>?@\\~`^|*]+)">
117 <bygroups>
118 <token type="Punctuation"/>
119 <token type="Text"/>
120 <token type="NameClass"/>
121 </bygroups>
122 </rule>
123 <rule>
124 <include state="breakout"/>
125 </rule>
126 <rule>
127 <include state="core"/>
128 </rule>
129 <rule pattern="\S+">
130 <token type="Error"/>
131 </rule>
132 </state>
133 <state name="string">
134 <rule pattern="[^"\\]">
135 <token type="LiteralStringDouble"/>
136 </rule>
137 <rule pattern="\\[\\"abtnvfr]">
138 <token type="LiteralStringEscape"/>
139 </rule>
140 <rule pattern="\\\^[\x40-\x5e]">
141 <token type="LiteralStringEscape"/>
142 </rule>
143 <rule pattern="\\[0-9]{3}">
144 <token type="LiteralStringEscape"/>
145 </rule>
146 <rule pattern="\\u[0-9a-fA-F]{4}">
147 <token type="LiteralStringEscape"/>
148 </rule>
149 <rule pattern="\\\s+\\">
150 <token type="LiteralStringInterpol"/>
151 </rule>
152 <rule pattern=""">
153 <token type="LiteralStringDouble"/>
154 <pop depth="1"/>
155 </rule>
156 </state>
157 <state name="tname">
158 <rule>
159 <include state="whitespace"/>
160 </rule>
161 <rule>
162 <include state="breakout"/>
163 </rule>
164 <rule pattern="\'[\w\']*">
165 <token type="NameDecorator"/>
166 </rule>
167 <rule pattern="\(">
168 <token type="Punctuation"/>
169 <push state="tyvarseq"/>
170 </rule>
171 <rule pattern="=(?![!%&$#+\-/:<=>?@\\~`^|*]+)">
172 <token type="Punctuation"/>
173 <push state="#pop" state="typbind"/>
174 </rule>
175 <rule pattern="([a-zA-Z][\w']*)">
176 <token type="KeywordType"/>
177 </rule>
178 <rule pattern="([!%&$#+\-/:<=>?@\\~`^|*]+)">
179 <token type="KeywordType"/>
180 </rule>
181 <rule pattern="\S+">
182 <token type="Error"/>
183 <pop depth="1"/>
184 </rule>
185 </state>
186 <state name="dname">
187 <rule>
188 <include state="whitespace"/>
189 </rule>
190 <rule>
191 <include state="breakout"/>
192 </rule>
193 <rule pattern="\'[\w\']*">
194 <token type="NameDecorator"/>
195 </rule>
196 <rule pattern="\(">
197 <token type="Punctuation"/>
198 <push state="tyvarseq"/>
199 </rule>
200 <rule pattern="(=)(\s*)(datatype)">
201 <bygroups>
202 <token type="Punctuation"/>
203 <token type="Text"/>
204 <token type="KeywordReserved"/>
205 </bygroups>
206 <pop depth="1"/>
207 </rule>
208 <rule pattern="=(?![!%&$#+\-/:<=>?@\\~`^|*]+)">
209 <token type="Punctuation"/>
210 <push state="#pop" state="datbind" state="datcon"/>
211 </rule>
212 <rule pattern="([a-zA-Z][\w']*)">
213 <token type="KeywordType"/>
214 </rule>
215 <rule pattern="([!%&$#+\-/:<=>?@\\~`^|*]+)">
216 <token type="KeywordType"/>
217 </rule>
218 <rule pattern="\S+">
219 <token type="Error"/>
220 <pop depth="1"/>
221 </rule>
222 </state>
223 <state name="typbind">
224 <rule>
225 <include state="whitespace"/>
226 </rule>
227 <rule pattern="\b(and)\b(?!\')">
228 <token type="KeywordReserved"/>
229 <push state="#pop" state="tname"/>
230 </rule>
231 <rule>
232 <include state="breakout"/>
233 </rule>
234 <rule>
235 <include state="core"/>
236 </rule>
237 <rule pattern="\S+">
238 <token type="Error"/>
239 <pop depth="1"/>
240 </rule>
241 </state>
242 <state name="ename">
243 <rule>
244 <include state="whitespace"/>
245 </rule>
246 <rule pattern="(exception|and)\b(\s+)([a-zA-Z][\w']*)">
247 <bygroups>
248 <token type="KeywordReserved"/>
249 <token type="Text"/>
250 <token type="NameClass"/>
251 </bygroups>
252 </rule>
253 <rule pattern="(exception|and)\b(\s*)([!%&$#+\-/:<=>?@\\~`^|*]+)">
254 <bygroups>
255 <token type="KeywordReserved"/>
256 <token type="Text"/>
257 <token type="NameClass"/>
258 </bygroups>
259 </rule>
260 <rule pattern="\b(of)\b(?!\')">
261 <token type="KeywordReserved"/>
262 </rule>
263 <rule>
264 <include state="breakout"/>
265 </rule>
266 <rule>
267 <include state="core"/>
268 </rule>
269 <rule pattern="\S+">
270 <token type="Error"/>
271 </rule>
272 </state>
273 <state name="vname">
274 <rule>
275 <include state="whitespace"/>
276 </rule>
277 <rule pattern="\'[\w\']*">
278 <token type="NameDecorator"/>
279 </rule>
280 <rule pattern="\(">
281 <token type="Punctuation"/>
282 <push state="tyvarseq"/>
283 </rule>
284 <rule pattern="([a-zA-Z][\w']*)(\s*)(=(?![!%&$#+\-/:<=>?@\\~`^|*]+))">
285 <bygroups>
286 <token type="NameVariable"/>
287 <token type="Text"/>
288 <token type="Punctuation"/>
289 </bygroups>
290 <pop depth="1"/>
291 </rule>
292 <rule pattern="([!%&$#+\-/:<=>?@\\~`^|*]+)(\s*)(=(?![!%&$#+\-/:<=>?@\\~`^|*]+))">
293 <bygroups>
294 <token type="NameVariable"/>
295 <token type="Text"/>
296 <token type="Punctuation"/>
297 </bygroups>
298 <pop depth="1"/>
299 </rule>
300 <rule pattern="([a-zA-Z][\w']*)">
301 <token type="NameVariable"/>
302 <pop depth="1"/>
303 </rule>
304 <rule pattern="([!%&$#+\-/:<=>?@\\~`^|*]+)">
305 <token type="NameVariable"/>
306 <pop depth="1"/>
307 </rule>
308 <rule>
309 <pop depth="1"/>
310 </rule>
311 </state>
312 <state name="sname">
313 <rule>
314 <include state="whitespace"/>
315 </rule>
316 <rule>
317 <include state="breakout"/>
318 </rule>
319 <rule pattern="([a-zA-Z][\w']*)">
320 <token type="NameNamespace"/>
321 </rule>
322 <rule>
323 <pop depth="1"/>
324 </rule>
325 </state>
326 <state name="main-fun">
327 <rule>
328 <include state="whitespace"/>
329 </rule>
330 <rule pattern="\s">
331 <token type="Text"/>
332 </rule>
333 <rule pattern="\(\*">
334 <token type="CommentMultiline"/>
335 <push state="comment"/>
336 </rule>
337 <rule pattern="\b(fun|and)\b(?!\')">
338 <token type="KeywordReserved"/>
339 <push state="fname"/>
340 </rule>
341 <rule pattern="\b(val)\b(?!\')">
342 <token type="KeywordReserved"/>
343 <push state="#pop" state="main" state="vname"/>
344 </rule>
345 <rule pattern="\|">
346 <token type="Punctuation"/>
347 <push state="fname"/>
348 </rule>
349 <rule pattern="\b(case|handle)\b(?!\')">
350 <token type="KeywordReserved"/>
351 <push state="#pop" state="main"/>
352 </rule>
353 <rule>
354 <include state="delimiters"/>
355 </rule>
356 <rule>
357 <include state="core"/>
358 </rule>
359 <rule pattern="\S+">
360 <token type="Error"/>
361 </rule>
362 </state>
363 <state name="datcon">
364 <rule>
365 <include state="whitespace"/>
366 </rule>
367 <rule pattern="([a-zA-Z][\w']*)">
368 <token type="NameClass"/>
369 <pop depth="1"/>
370 </rule>
371 <rule pattern="([!%&$#+\-/:<=>?@\\~`^|*]+)">
372 <token type="NameClass"/>
373 <pop depth="1"/>
374 </rule>
375 <rule pattern="\S+">
376 <token type="Error"/>
377 <pop depth="1"/>
378 </rule>
379 </state>
380 <state name="dotted">
381 <rule pattern="([a-zA-Z][\w']*)(\.)">
382 <token type="NameNamespace"/>
383 </rule>
384 <rule pattern="([a-zA-Z][\w']*)">
385 <token type="Name"/>
386 <pop depth="1"/>
387 </rule>
388 <rule pattern="([!%&$#+\-/:<=>?@\\~`^|*]+)">
389 <token type="Name"/>
390 <pop depth="1"/>
391 </rule>
392 <rule pattern="\s+">
393 <token type="Error"/>
394 </rule>
395 <rule pattern="\S+">
396 <token type="Error"/>
397 </rule>
398 </state>
399 <state name="main">
400 <rule>
401 <include state="whitespace"/>
402 </rule>
403 <rule pattern="\b(val|and)\b(?!\')">
404 <token type="KeywordReserved"/>
405 <push state="vname"/>
406 </rule>
407 <rule pattern="\b(fun)\b(?!\')">
408 <token type="KeywordReserved"/>
409 <push state="#pop" state="main-fun" state="fname"/>
410 </rule>
411 <rule>
412 <include state="delimiters"/>
413 </rule>
414 <rule>
415 <include state="core"/>
416 </rule>
417 <rule pattern="\S+">
418 <token type="Error"/>
419 </rule>
420 </state>
421 <state name="comment">
422 <rule pattern="[^(*)]">
423 <token type="CommentMultiline"/>
424 </rule>
425 <rule pattern="\(\*">
426 <token type="CommentMultiline"/>
427 <push/>
428 </rule>
429 <rule pattern="\*\)">
430 <token type="CommentMultiline"/>
431 <pop depth="1"/>
432 </rule>
433 <rule pattern="[(*)]">
434 <token type="CommentMultiline"/>
435 </rule>
436 </state>
437 <state name="whitespace">
438 <rule pattern="\s+">
439 <token type="Text"/>
440 </rule>
441 <rule pattern="\(\*">
442 <token type="CommentMultiline"/>
443 <push state="comment"/>
444 </rule>
445 </state>
446 <state name="core">
447 <rule pattern="(_|\}|\{|\)|;|,|\[|\(|\]|\.\.\.)">
448 <token type="Punctuation"/>
449 </rule>
450 <rule pattern="#"">
451 <token type="LiteralStringChar"/>
452 <push state="char"/>
453 </rule>
454 <rule pattern=""">
455 <token type="LiteralStringDouble"/>
456 <push state="string"/>
457 </rule>
458 <rule pattern="~?0x[0-9a-fA-F]+">
459 <token type="LiteralNumberHex"/>
460 </rule>
461 <rule pattern="0wx[0-9a-fA-F]+">
462 <token type="LiteralNumberHex"/>
463 </rule>
464 <rule pattern="0w\d+">
465 <token type="LiteralNumberInteger"/>
466 </rule>
467 <rule pattern="~?\d+\.\d+[eE]~?\d+">
468 <token type="LiteralNumberFloat"/>
469 </rule>
470 <rule pattern="~?\d+\.\d+">
471 <token type="LiteralNumberFloat"/>
472 </rule>
473 <rule pattern="~?\d+[eE]~?\d+">
474 <token type="LiteralNumberFloat"/>
475 </rule>
476 <rule pattern="~?\d+">
477 <token type="LiteralNumberInteger"/>
478 </rule>
479 <rule pattern="#\s*[1-9][0-9]*">
480 <token type="NameLabel"/>
481 </rule>
482 <rule pattern="#\s*([a-zA-Z][\w']*)">
483 <token type="NameLabel"/>
484 </rule>
485 <rule pattern="#\s+([!%&$#+\-/:<=>?@\\~`^|*]+)">
486 <token type="NameLabel"/>
487 </rule>
488 <rule pattern="\b(datatype|abstype)\b(?!\')">
489 <token type="KeywordReserved"/>
490 <push state="dname"/>
491 </rule>
492 <rule pattern="(?=\b(exception)\b(?!\'))">
493 <token type="Text"/>
494 <push state="ename"/>
495 </rule>
496 <rule pattern="\b(functor|include|open|signature|structure)\b(?!\')">
497 <token type="KeywordReserved"/>
498 <push state="sname"/>
499 </rule>
500 <rule pattern="\b(type|eqtype)\b(?!\')">
501 <token type="KeywordReserved"/>
502 <push state="tname"/>
503 </rule>
504 <rule pattern="\'[\w\']*">
505 <token type="NameDecorator"/>
506 </rule>
507 <rule pattern="([a-zA-Z][\w']*)(\.)">
508 <token type="NameNamespace"/>
509 <push state="dotted"/>
510 </rule>
511 <rule pattern="\b(abstype|and|andalso|as|case|datatype|do|else|end|exception|fn|fun|handle|if|in|infix|infixr|let|local|nonfix|of|op|open|orelse|raise|rec|then|type|val|with|withtype|while|eqtype|functor|include|sharing|sig|signature|struct|structure|where)\b">
512 <token type="KeywordReserved"/>
513 </rule>
514 <rule pattern="([a-zA-Z][\w']*)">
515 <token type="Name"/>
516 </rule>
517 <rule pattern="\b(:|\|,=|=>|->|#|:>)\b">
518 <token type="KeywordReserved"/>
519 </rule>
520 <rule pattern="([!%&$#+\-/:<=>?@\\~`^|*]+)">
521 <token type="Name"/>
522 </rule>
523 </state>
524 <state name="fname">
525 <rule>
526 <include state="whitespace"/>
527 </rule>
528 <rule pattern="\'[\w\']*">
529 <token type="NameDecorator"/>
530 </rule>
531 <rule pattern="\(">
532 <token type="Punctuation"/>
533 <push state="tyvarseq"/>
534 </rule>
535 <rule pattern="([a-zA-Z][\w']*)">
536 <token type="NameFunction"/>
537 <pop depth="1"/>
538 </rule>
539 <rule pattern="([!%&$#+\-/:<=>?@\\~`^|*]+)">
540 <token type="NameFunction"/>
541 <pop depth="1"/>
542 </rule>
543 <rule>
544 <pop depth="1"/>
545 </rule>
546 </state>
547 </rules>
548</lexer>
View as plain text