1<lexer>
2 <config>
3 <name>Python</name>
4 <alias>python</alias>
5 <alias>py</alias>
6 <alias>sage</alias>
7 <alias>python3</alias>
8 <alias>py3</alias>
9 <filename>*.py</filename>
10 <filename>*.pyi</filename>
11 <filename>*.pyw</filename>
12 <filename>*.jy</filename>
13 <filename>*.sage</filename>
14 <filename>*.sc</filename>
15 <filename>SConstruct</filename>
16 <filename>SConscript</filename>
17 <filename>*.bzl</filename>
18 <filename>BUCK</filename>
19 <filename>BUILD</filename>
20 <filename>BUILD.bazel</filename>
21 <filename>WORKSPACE</filename>
22 <filename>WORKSPACE.bzlmod</filename>
23 <filename>WORKSPACE.bazel</filename>
24 <filename>MODULE.bazel</filename>
25 <filename>REPO.bazel</filename>
26 <filename>*.tac</filename>
27 <mime_type>text/x-python</mime_type>
28 <mime_type>application/x-python</mime_type>
29 <mime_type>text/x-python3</mime_type>
30 <mime_type>application/x-python3</mime_type>
31 </config>
32 <rules>
33 <state name="numbers">
34 <rule pattern="(\d(?:_?\d)*\.(?:\d(?:_?\d)*)?|(?:\d(?:_?\d)*)?\.\d(?:_?\d)*)([eE][+-]?\d(?:_?\d)*)?">
35 <token type="LiteralNumberFloat"/>
36 </rule>
37 <rule pattern="\d(?:_?\d)*[eE][+-]?\d(?:_?\d)*j?">
38 <token type="LiteralNumberFloat"/>
39 </rule>
40 <rule pattern="0[oO](?:_?[0-7])+">
41 <token type="LiteralNumberOct"/>
42 </rule>
43 <rule pattern="0[bB](?:_?[01])+">
44 <token type="LiteralNumberBin"/>
45 </rule>
46 <rule pattern="0[xX](?:_?[a-fA-F0-9])+">
47 <token type="LiteralNumberHex"/>
48 </rule>
49 <rule pattern="\d(?:_?\d)*">
50 <token type="LiteralNumberInteger"/>
51 </rule>
52 </state>
53 <state name="expr">
54 <rule pattern="(?i)(rf|fr)(""")">
55 <bygroups>
56 <token type="LiteralStringAffix"/>
57 <token type="LiteralStringDouble"/>
58 </bygroups>
59 <combined state="rfstringescape" state="tdqf"/>
60 </rule>
61 <rule pattern="(?i)(rf|fr)(''')">
62 <bygroups>
63 <token type="LiteralStringAffix"/>
64 <token type="LiteralStringSingle"/>
65 </bygroups>
66 <combined state="rfstringescape" state="tsqf"/>
67 </rule>
68 <rule pattern="(?i)(rf|fr)(")">
69 <bygroups>
70 <token type="LiteralStringAffix"/>
71 <token type="LiteralStringDouble"/>
72 </bygroups>
73 <combined state="rfstringescape" state="dqf"/>
74 </rule>
75 <rule pattern="(?i)(rf|fr)(')">
76 <bygroups>
77 <token type="LiteralStringAffix"/>
78 <token type="LiteralStringSingle"/>
79 </bygroups>
80 <combined state="rfstringescape" state="sqf"/>
81 </rule>
82 <rule pattern="([fF])(""")">
83 <bygroups>
84 <token type="LiteralStringAffix"/>
85 <token type="LiteralStringDouble"/>
86 </bygroups>
87 <combined state="fstringescape" state="tdqf"/>
88 </rule>
89 <rule pattern="([fF])(''')">
90 <bygroups>
91 <token type="LiteralStringAffix"/>
92 <token type="LiteralStringSingle"/>
93 </bygroups>
94 <combined state="fstringescape" state="tsqf"/>
95 </rule>
96 <rule pattern="([fF])(")">
97 <bygroups>
98 <token type="LiteralStringAffix"/>
99 <token type="LiteralStringDouble"/>
100 </bygroups>
101 <combined state="fstringescape" state="dqf"/>
102 </rule>
103 <rule pattern="([fF])(')">
104 <bygroups>
105 <token type="LiteralStringAffix"/>
106 <token type="LiteralStringSingle"/>
107 </bygroups>
108 <combined state="fstringescape" state="sqf"/>
109 </rule>
110 <rule pattern="(?i)(rb|br|r)(""")">
111 <bygroups>
112 <token type="LiteralStringAffix"/>
113 <token type="LiteralStringDouble"/>
114 </bygroups>
115 <push state="tdqs"/>
116 </rule>
117 <rule pattern="(?i)(rb|br|r)(''')">
118 <bygroups>
119 <token type="LiteralStringAffix"/>
120 <token type="LiteralStringSingle"/>
121 </bygroups>
122 <push state="tsqs"/>
123 </rule>
124 <rule pattern="(?i)(rb|br|r)(")">
125 <bygroups>
126 <token type="LiteralStringAffix"/>
127 <token type="LiteralStringDouble"/>
128 </bygroups>
129 <push state="dqs"/>
130 </rule>
131 <rule pattern="(?i)(rb|br|r)(')">
132 <bygroups>
133 <token type="LiteralStringAffix"/>
134 <token type="LiteralStringSingle"/>
135 </bygroups>
136 <push state="sqs"/>
137 </rule>
138 <rule pattern="([uUbB]?)(""")">
139 <bygroups>
140 <token type="LiteralStringAffix"/>
141 <token type="LiteralStringDouble"/>
142 </bygroups>
143 <combined state="stringescape" state="tdqs"/>
144 </rule>
145 <rule pattern="([uUbB]?)(''')">
146 <bygroups>
147 <token type="LiteralStringAffix"/>
148 <token type="LiteralStringSingle"/>
149 </bygroups>
150 <combined state="stringescape" state="tsqs"/>
151 </rule>
152 <rule pattern="([uUbB]?)(")">
153 <bygroups>
154 <token type="LiteralStringAffix"/>
155 <token type="LiteralStringDouble"/>
156 </bygroups>
157 <combined state="stringescape" state="dqs"/>
158 </rule>
159 <rule pattern="([uUbB]?)(')">
160 <bygroups>
161 <token type="LiteralStringAffix"/>
162 <token type="LiteralStringSingle"/>
163 </bygroups>
164 <combined state="stringescape" state="sqs"/>
165 </rule>
166 <rule pattern="[^\S\n]+">
167 <token type="Text"/>
168 </rule>
169 <rule>
170 <include state="numbers"/>
171 </rule>
172 <rule pattern="!=|==|<<|>>|:=|[-~+/*%=<>&^|.]">
173 <token type="Operator"/>
174 </rule>
175 <rule pattern="[]{}:(),;[]">
176 <token type="Punctuation"/>
177 </rule>
178 <rule pattern="(in|is|and|or|not)\b">
179 <token type="OperatorWord"/>
180 </rule>
181 <rule>
182 <include state="expr-keywords"/>
183 </rule>
184 <rule>
185 <include state="builtins"/>
186 </rule>
187 <rule>
188 <include state="magicfuncs"/>
189 </rule>
190 <rule>
191 <include state="magicvars"/>
192 </rule>
193 <rule>
194 <include state="name"/>
195 </rule>
196 </state>
197 <state name="fstrings-double">
198 <rule pattern="\}">
199 <token type="LiteralStringInterpol"/>
200 </rule>
201 <rule pattern="\{">
202 <token type="LiteralStringInterpol"/>
203 <push state="expr-inside-fstring"/>
204 </rule>
205 <rule pattern="[^\\\'"{}\n]+">
206 <token type="LiteralStringDouble"/>
207 </rule>
208 <rule pattern="[\'"\\]">
209 <token type="LiteralStringDouble"/>
210 </rule>
211 </state>
212 <state name="keywords">
213 <rule pattern="(yield from|nonlocal|continue|finally|except|lambda|assert|global|return|raise|yield|while|break|await|async|pass|else|elif|with|try|for|del|as|if|match|case)\b">
214 <token type="Keyword"/>
215 </rule>
216 <rule pattern="(False|True|None)\b">
217 <token type="KeywordConstant"/>
218 </rule>
219 </state>
220 <state name="dqs">
221 <rule pattern=""">
222 <token type="LiteralStringDouble"/>
223 <pop depth="1"/>
224 </rule>
225 <rule pattern="\\\\|\\"|\\\n">
226 <token type="LiteralStringEscape"/>
227 </rule>
228 <rule>
229 <include state="strings-double"/>
230 </rule>
231 </state>
232 <state name="fromimport">
233 <rule pattern="(\s+)(import)\b">
234 <bygroups>
235 <token type="Text"/>
236 <token type="KeywordNamespace"/>
237 </bygroups>
238 <pop depth="1"/>
239 </rule>
240 <rule pattern="\.">
241 <token type="NameNamespace"/>
242 </rule>
243 <rule pattern="None\b">
244 <token type="NameBuiltinPseudo"/>
245 <pop depth="1"/>
246 </rule>
247 <rule pattern="[_\p{L}][_\p{L}\p{N}]*">
248 <token type="NameNamespace"/>
249 </rule>
250 <rule>
251 <pop depth="1"/>
252 </rule>
253 </state>
254 <state name="builtins">
255 <rule pattern="(?<!\.)(staticmethod|classmethod|memoryview|__import__|issubclass|isinstance|frozenset|bytearray|enumerate|reversed|property|compile|complex|delattr|hasattr|setattr|globals|getattr|divmod|filter|locals|format|object|sorted|slice|print|bytes|range|input|tuple|round|super|float|eval|list|dict|repr|type|vars|hash|next|bool|open|iter|oct|pow|min|zip|max|map|bin|len|set|any|dir|all|abs|str|sum|chr|int|hex|ord|id)\b">
256 <token type="NameBuiltin"/>
257 </rule>
258 <rule pattern="(?<!\.)(self|Ellipsis|NotImplemented|cls)\b">
259 <token type="NameBuiltinPseudo"/>
260 </rule>
261 <rule pattern="(?<!\.)(PendingDeprecationWarning|ConnectionAbortedError|ConnectionRefusedError|UnicodeTranslateError|ConnectionResetError|ModuleNotFoundError|NotImplementedError|FloatingPointError|StopAsyncIteration|UnicodeDecodeError|DeprecationWarning|UnicodeEncodeError|NotADirectoryError|ProcessLookupError|ZeroDivisionError|IsADirectoryError|FileNotFoundError|UnboundLocalError|KeyboardInterrupt|ChildProcessError|EnvironmentError|IndentationError|InterruptedError|BlockingIOError|ArithmeticError|ConnectionError|BrokenPipeError|FileExistsError|ResourceWarning|PermissionError|RuntimeWarning|ReferenceError|AttributeError|AssertionError|UnicodeWarning|RecursionError|StopIteration|BaseException|OverflowError|SyntaxWarning|FutureWarning|GeneratorExit|ImportWarning|UnicodeError|TimeoutError|WindowsError|RuntimeError|BytesWarning|SystemError|UserWarning|MemoryError|ImportError|LookupError|BufferError|SyntaxError|SystemExit|ValueError|IndexError|NameError|Exception|TypeError|TabError|EOFError|KeyError|VMSError|Warning|OSError|IOError)\b">
262 <token type="NameException"/>
263 </rule>
264 </state>
265 <state name="classname">
266 <rule pattern="[_\p{L}][_\p{L}\p{N}]*">
267 <token type="NameClass"/>
268 <pop depth="1"/>
269 </rule>
270 </state>
271 <state name="import">
272 <rule pattern="(\s+)(as)(\s+)">
273 <bygroups>
274 <token type="Text"/>
275 <token type="Keyword"/>
276 <token type="Text"/>
277 </bygroups>
278 </rule>
279 <rule pattern="\.">
280 <token type="NameNamespace"/>
281 </rule>
282 <rule pattern="[_\p{L}][_\p{L}\p{N}]*">
283 <token type="NameNamespace"/>
284 </rule>
285 <rule pattern="(\s*)(,)(\s*)">
286 <bygroups>
287 <token type="Text"/>
288 <token type="Operator"/>
289 <token type="Text"/>
290 </bygroups>
291 </rule>
292 <rule>
293 <pop depth="1"/>
294 </rule>
295 </state>
296 <state name="tsqs">
297 <rule pattern="'''">
298 <token type="LiteralStringSingle"/>
299 <pop depth="1"/>
300 </rule>
301 <rule>
302 <include state="strings-single"/>
303 </rule>
304 <rule pattern="\n">
305 <token type="LiteralStringSingle"/>
306 </rule>
307 </state>
308 <state name="strings-double">
309 <rule pattern="%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?[hlL]?[E-GXc-giorsaux%]">
310 <token type="LiteralStringInterpol"/>
311 </rule>
312 <rule pattern="\{((\w+)((\.\w+)|(\[[^\]]+\]))*)?(\![sra])?(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[E-GXb-gnosx%]?)?\}">
313 <token type="LiteralStringInterpol"/>
314 </rule>
315 <rule pattern="[^\\\'"%{\n]+">
316 <token type="LiteralStringDouble"/>
317 </rule>
318 <rule pattern="[\'"\\]">
319 <token type="LiteralStringDouble"/>
320 </rule>
321 <rule pattern="%|(\{{1,2})">
322 <token type="LiteralStringDouble"/>
323 </rule>
324 </state>
325 <state name="tdqf">
326 <rule pattern=""""">
327 <token type="LiteralStringDouble"/>
328 <pop depth="1"/>
329 </rule>
330 <rule>
331 <include state="fstrings-double"/>
332 </rule>
333 <rule pattern="\n">
334 <token type="LiteralStringDouble"/>
335 </rule>
336 </state>
337 <state name="expr-inside-fstring-inner">
338 <rule pattern="[{([]">
339 <token type="Punctuation"/>
340 <push state="expr-inside-fstring-inner"/>
341 </rule>
342 <rule pattern="[])}]">
343 <token type="Punctuation"/>
344 <pop depth="1"/>
345 </rule>
346 <rule pattern="\s+">
347 <token type="Text"/>
348 </rule>
349 <rule>
350 <include state="expr"/>
351 </rule>
352 </state>
353 <state name="sqs">
354 <rule pattern="'">
355 <token type="LiteralStringSingle"/>
356 <pop depth="1"/>
357 </rule>
358 <rule pattern="\\\\|\\'|\\\n">
359 <token type="LiteralStringEscape"/>
360 </rule>
361 <rule>
362 <include state="strings-single"/>
363 </rule>
364 </state>
365 <state name="funcname">
366 <rule>
367 <include state="magicfuncs"/>
368 </rule>
369 <rule pattern="[_\p{L}][_\p{L}\p{N}]*">
370 <token type="NameFunction"/>
371 <pop depth="1"/>
372 </rule>
373 <rule>
374 <pop depth="1"/>
375 </rule>
376 </state>
377 <state name="expr-keywords">
378 <rule pattern="(yield from|async for|lambda|yield|await|else|for|if)\b">
379 <token type="Keyword"/>
380 </rule>
381 <rule pattern="(False|True|None)\b">
382 <token type="KeywordConstant"/>
383 </rule>
384 </state>
385 <state name="name">
386 <rule pattern="@[_\p{L}][_\p{L}\p{N}]*(\s*\.\s*[_\p{L}][_\p{L}\p{N}]*)*">
387 <token type="NameDecorator"/>
388 </rule>
389 <rule pattern="@">
390 <token type="Operator"/>
391 </rule>
392 <rule pattern="[_\p{L}][_\p{L}\p{N}]*">
393 <token type="Name"/>
394 </rule>
395 </state>
396 <state name="magicfuncs">
397 <rule pattern="(__instancecheck__|__subclasscheck__|__getattribute__|__length_hint__|__rfloordiv__|__ifloordiv__|__itruediv__|__contains__|__floordiv__|__rtruediv__|__reversed__|__setitem__|__complex__|__rdivmod__|__delattr__|__rmatmul__|__ilshift__|__prepare__|__delitem__|__rrshift__|__imatmul__|__rlshift__|__setattr__|__truediv__|__getitem__|__missing__|__getattr__|__irshift__|__rshift__|__format__|__invert__|__matmul__|__divmod__|__delete__|__aenter__|__lshift__|__await__|__bytes__|__anext__|__aiter__|__aexit__|__round__|__float__|__enter__|__index__|__iadd__|__ipow__|__rpow__|__iter__|__init__|__ixor__|__rmul__|__rmod__|__imul__|__imod__|__iand__|__hash__|__rsub__|__exit__|__rxor__|__bool__|__call__|__rand__|__next__|__radd__|__isub__|__repr__|__set__|__add__|__new__|__neg__|__xor__|__and__|__mul__|__mod__|__sub__|__len__|__str__|__ror__|__ior__|__pos__|__del__|__get__|__dir__|__abs__|__int__|__pow__|__eq__|__gt__|__le__|__lt__|__ne__|__or__|__ge__)\b">
398 <token type="NameFunctionMagic"/>
399 </rule>
400 </state>
401 <state name="root">
402 <rule pattern="\n">
403 <token type="Text"/>
404 </rule>
405 <rule pattern="^(\s*)([rRuUbB]{,2})("""(?:.|\n)*?""")">
406 <bygroups>
407 <token type="Text"/>
408 <token type="LiteralStringAffix"/>
409 <token type="LiteralStringDoc"/>
410 </bygroups>
411 </rule>
412 <rule pattern="^(\s*)([rRuUbB]{,2})('''(?:.|\n)*?''')">
413 <bygroups>
414 <token type="Text"/>
415 <token type="LiteralStringAffix"/>
416 <token type="LiteralStringDoc"/>
417 </bygroups>
418 </rule>
419 <rule pattern="\A#!.+$">
420 <token type="CommentHashbang"/>
421 </rule>
422 <rule pattern="#.*$">
423 <token type="CommentSingle"/>
424 </rule>
425 <rule pattern="\\\n">
426 <token type="Text"/>
427 </rule>
428 <rule pattern="\\">
429 <token type="Text"/>
430 </rule>
431 <rule>
432 <include state="keywords"/>
433 </rule>
434 <rule pattern="(def)((?:\s|\\\s)+)">
435 <bygroups>
436 <token type="Keyword"/>
437 <token type="Text"/>
438 </bygroups>
439 <push state="funcname"/>
440 </rule>
441 <rule pattern="(class)((?:\s|\\\s)+)">
442 <bygroups>
443 <token type="Keyword"/>
444 <token type="Text"/>
445 </bygroups>
446 <push state="classname"/>
447 </rule>
448 <rule pattern="(from)((?:\s|\\\s)+)">
449 <bygroups>
450 <token type="KeywordNamespace"/>
451 <token type="Text"/>
452 </bygroups>
453 <push state="fromimport"/>
454 </rule>
455 <rule pattern="(import)((?:\s|\\\s)+)">
456 <bygroups>
457 <token type="KeywordNamespace"/>
458 <token type="Text"/>
459 </bygroups>
460 <push state="import"/>
461 </rule>
462 <rule>
463 <include state="expr"/>
464 </rule>
465 </state>
466 <state name="fstrings-single">
467 <rule pattern="\}">
468 <token type="LiteralStringInterpol"/>
469 </rule>
470 <rule pattern="\{">
471 <token type="LiteralStringInterpol"/>
472 <push state="expr-inside-fstring"/>
473 </rule>
474 <rule pattern="[^\\\'"{}\n]+">
475 <token type="LiteralStringSingle"/>
476 </rule>
477 <rule pattern="[\'"\\]">
478 <token type="LiteralStringSingle"/>
479 </rule>
480 </state>
481 <state name="magicvars">
482 <rule pattern="(__annotations__|__kwdefaults__|__qualname__|__objclass__|__defaults__|__closure__|__globals__|__weakref__|__module__|__class__|__bases__|__slots__|__file__|__code__|__name__|__func__|__dict__|__self__|__mro__|__doc__)\b">
483 <token type="NameVariableMagic"/>
484 </rule>
485 </state>
486 <state name="tsqf">
487 <rule pattern="'''">
488 <token type="LiteralStringSingle"/>
489 <pop depth="1"/>
490 </rule>
491 <rule>
492 <include state="fstrings-single"/>
493 </rule>
494 <rule pattern="\n">
495 <token type="LiteralStringSingle"/>
496 </rule>
497 </state>
498 <state name="strings-single">
499 <rule pattern="%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?[hlL]?[E-GXc-giorsaux%]">
500 <token type="LiteralStringInterpol"/>
501 </rule>
502 <rule pattern="\{((\w+)((\.\w+)|(\[[^\]]+\]))*)?(\![sra])?(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[E-GXb-gnosx%]?)?\}">
503 <token type="LiteralStringInterpol"/>
504 </rule>
505 <rule pattern="[^\\\'"%{\n]+">
506 <token type="LiteralStringSingle"/>
507 </rule>
508 <rule pattern="[\'"\\]">
509 <token type="LiteralStringSingle"/>
510 </rule>
511 <rule pattern="%|(\{{1,2})">
512 <token type="LiteralStringSingle"/>
513 </rule>
514 </state>
515 <state name="rfstringescape">
516 <rule pattern="\{\{">
517 <token type="LiteralStringEscape"/>
518 </rule>
519 <rule pattern="\}\}">
520 <token type="LiteralStringEscape"/>
521 </rule>
522 </state>
523 <state name="sqf">
524 <rule pattern="'">
525 <token type="LiteralStringSingle"/>
526 <pop depth="1"/>
527 </rule>
528 <rule pattern="\\\\|\\'|\\\n">
529 <token type="LiteralStringEscape"/>
530 </rule>
531 <rule>
532 <include state="fstrings-single"/>
533 </rule>
534 </state>
535 <state name="dqf">
536 <rule pattern=""">
537 <token type="LiteralStringDouble"/>
538 <pop depth="1"/>
539 </rule>
540 <rule pattern="\\\\|\\"|\\\n">
541 <token type="LiteralStringEscape"/>
542 </rule>
543 <rule>
544 <include state="fstrings-double"/>
545 </rule>
546 </state>
547 <state name="expr-inside-fstring">
548 <rule pattern="[{([]">
549 <token type="Punctuation"/>
550 <push state="expr-inside-fstring-inner"/>
551 </rule>
552 <rule pattern="(=\s*)?(\![sraf])?\}">
553 <token type="LiteralStringInterpol"/>
554 <pop depth="1"/>
555 </rule>
556 <rule pattern="(=\s*)?(\![sraf])?:">
557 <token type="LiteralStringInterpol"/>
558 <pop depth="1"/>
559 </rule>
560 <rule pattern="\s+">
561 <token type="Text"/>
562 </rule>
563 <rule>
564 <include state="expr"/>
565 </rule>
566 </state>
567 <state name="tdqs">
568 <rule pattern=""""">
569 <token type="LiteralStringDouble"/>
570 <pop depth="1"/>
571 </rule>
572 <rule>
573 <include state="strings-double"/>
574 </rule>
575 <rule pattern="\n">
576 <token type="LiteralStringDouble"/>
577 </rule>
578 </state>
579 <state name="fstringescape">
580 <rule>
581 <include state="rfstringescape"/>
582 </rule>
583 <rule>
584 <include state="stringescape"/>
585 </rule>
586 </state>
587 <state name="stringescape">
588 <rule pattern="\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})">
589 <token type="LiteralStringEscape"/>
590 </rule>
591 </state>
592 </rules>
593</lexer>