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 <alias>starlark</alias>
10 <filename>*.py</filename>
11 <filename>*.pyi</filename>
12 <filename>*.pyw</filename>
13 <filename>*.jy</filename>
14 <filename>*.sage</filename>
15 <filename>*.sc</filename>
16 <filename>SConstruct</filename>
17 <filename>SConscript</filename>
18 <filename>*.bzl</filename>
19 <filename>BUCK</filename>
20 <filename>BUILD</filename>
21 <filename>BUILD.bazel</filename>
22 <filename>WORKSPACE</filename>
23 <filename>WORKSPACE.bzlmod</filename>
24 <filename>WORKSPACE.bazel</filename>
25 <filename>MODULE.bazel</filename>
26 <filename>REPO.bazel</filename>
27 <filename>*.star</filename>
28 <filename>*.tac</filename>
29 <mime_type>text/x-python</mime_type>
30 <mime_type>application/x-python</mime_type>
31 <mime_type>text/x-python3</mime_type>
32 <mime_type>application/x-python3</mime_type>
33 </config>
34 <rules>
35 <state name="numbers">
36 <rule pattern="(\d(?:_?\d)*\.(?:\d(?:_?\d)*)?|(?:\d(?:_?\d)*)?\.\d(?:_?\d)*)([eE][+-]?\d(?:_?\d)*)?">
37 <token type="LiteralNumberFloat"/>
38 </rule>
39 <rule pattern="\d(?:_?\d)*[eE][+-]?\d(?:_?\d)*j?">
40 <token type="LiteralNumberFloat"/>
41 </rule>
42 <rule pattern="0[oO](?:_?[0-7])+">
43 <token type="LiteralNumberOct"/>
44 </rule>
45 <rule pattern="0[bB](?:_?[01])+">
46 <token type="LiteralNumberBin"/>
47 </rule>
48 <rule pattern="0[xX](?:_?[a-fA-F0-9])+">
49 <token type="LiteralNumberHex"/>
50 </rule>
51 <rule pattern="\d(?:_?\d)*">
52 <token type="LiteralNumberInteger"/>
53 </rule>
54 </state>
55 <state name="expr">
56 <rule pattern="(?i)(rf|fr)(""")">
57 <bygroups>
58 <token type="LiteralStringAffix"/>
59 <token type="LiteralStringDouble"/>
60 </bygroups>
61 <combined state="rfstringescape" state="tdqf"/>
62 </rule>
63 <rule pattern="(?i)(rf|fr)(''')">
64 <bygroups>
65 <token type="LiteralStringAffix"/>
66 <token type="LiteralStringSingle"/>
67 </bygroups>
68 <combined state="rfstringescape" state="tsqf"/>
69 </rule>
70 <rule pattern="(?i)(rf|fr)(")">
71 <bygroups>
72 <token type="LiteralStringAffix"/>
73 <token type="LiteralStringDouble"/>
74 </bygroups>
75 <combined state="rfstringescape" state="dqf"/>
76 </rule>
77 <rule pattern="(?i)(rf|fr)(')">
78 <bygroups>
79 <token type="LiteralStringAffix"/>
80 <token type="LiteralStringSingle"/>
81 </bygroups>
82 <combined state="rfstringescape" state="sqf"/>
83 </rule>
84 <rule pattern="([fF])(""")">
85 <bygroups>
86 <token type="LiteralStringAffix"/>
87 <token type="LiteralStringDouble"/>
88 </bygroups>
89 <combined state="fstringescape" state="tdqf"/>
90 </rule>
91 <rule pattern="([fF])(''')">
92 <bygroups>
93 <token type="LiteralStringAffix"/>
94 <token type="LiteralStringSingle"/>
95 </bygroups>
96 <combined state="fstringescape" state="tsqf"/>
97 </rule>
98 <rule pattern="([fF])(")">
99 <bygroups>
100 <token type="LiteralStringAffix"/>
101 <token type="LiteralStringDouble"/>
102 </bygroups>
103 <combined state="fstringescape" state="dqf"/>
104 </rule>
105 <rule pattern="([fF])(')">
106 <bygroups>
107 <token type="LiteralStringAffix"/>
108 <token type="LiteralStringSingle"/>
109 </bygroups>
110 <combined state="fstringescape" state="sqf"/>
111 </rule>
112 <rule pattern="(?i)(rb|br|r)(""")">
113 <bygroups>
114 <token type="LiteralStringAffix"/>
115 <token type="LiteralStringDouble"/>
116 </bygroups>
117 <push state="tdqs"/>
118 </rule>
119 <rule pattern="(?i)(rb|br|r)(''')">
120 <bygroups>
121 <token type="LiteralStringAffix"/>
122 <token type="LiteralStringSingle"/>
123 </bygroups>
124 <push state="tsqs"/>
125 </rule>
126 <rule pattern="(?i)(rb|br|r)(")">
127 <bygroups>
128 <token type="LiteralStringAffix"/>
129 <token type="LiteralStringDouble"/>
130 </bygroups>
131 <push state="dqs"/>
132 </rule>
133 <rule pattern="(?i)(rb|br|r)(')">
134 <bygroups>
135 <token type="LiteralStringAffix"/>
136 <token type="LiteralStringSingle"/>
137 </bygroups>
138 <push state="sqs"/>
139 </rule>
140 <rule pattern="([uUbB]?)(""")">
141 <bygroups>
142 <token type="LiteralStringAffix"/>
143 <token type="LiteralStringDouble"/>
144 </bygroups>
145 <combined state="stringescape" state="tdqs"/>
146 </rule>
147 <rule pattern="([uUbB]?)(''')">
148 <bygroups>
149 <token type="LiteralStringAffix"/>
150 <token type="LiteralStringSingle"/>
151 </bygroups>
152 <combined state="stringescape" state="tsqs"/>
153 </rule>
154 <rule pattern="([uUbB]?)(")">
155 <bygroups>
156 <token type="LiteralStringAffix"/>
157 <token type="LiteralStringDouble"/>
158 </bygroups>
159 <combined state="stringescape" state="dqs"/>
160 </rule>
161 <rule pattern="([uUbB]?)(')">
162 <bygroups>
163 <token type="LiteralStringAffix"/>
164 <token type="LiteralStringSingle"/>
165 </bygroups>
166 <combined state="stringescape" state="sqs"/>
167 </rule>
168 <rule pattern="[^\S\n]+">
169 <token type="Text"/>
170 </rule>
171 <rule>
172 <include state="numbers"/>
173 </rule>
174 <rule pattern="!=|==|<<|>>|:=|[-~+/*%=<>&^|.]">
175 <token type="Operator"/>
176 </rule>
177 <rule pattern="[]{}:(),;[]">
178 <token type="Punctuation"/>
179 </rule>
180 <rule pattern="(in|is|and|or|not)\b">
181 <token type="OperatorWord"/>
182 </rule>
183 <rule>
184 <include state="expr-keywords"/>
185 </rule>
186 <rule>
187 <include state="builtins"/>
188 </rule>
189 <rule>
190 <include state="magicfuncs"/>
191 </rule>
192 <rule>
193 <include state="magicvars"/>
194 </rule>
195 <rule>
196 <include state="name"/>
197 </rule>
198 </state>
199 <state name="fstrings-double">
200 <rule pattern="\}">
201 <token type="LiteralStringInterpol"/>
202 </rule>
203 <rule pattern="\{">
204 <token type="LiteralStringInterpol"/>
205 <push state="expr-inside-fstring"/>
206 </rule>
207 <rule pattern="[^\\\'"{}\n]+">
208 <token type="LiteralStringDouble"/>
209 </rule>
210 <rule pattern="[\'"\\]">
211 <token type="LiteralStringDouble"/>
212 </rule>
213 </state>
214 <state name="keywords">
215 <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">
216 <token type="Keyword"/>
217 </rule>
218 <rule pattern="(False|True|None)\b">
219 <token type="KeywordConstant"/>
220 </rule>
221 </state>
222 <state name="dqs">
223 <rule pattern=""">
224 <token type="LiteralStringDouble"/>
225 <pop depth="1"/>
226 </rule>
227 <rule pattern="\\\\|\\"|\\\n">
228 <token type="LiteralStringEscape"/>
229 </rule>
230 <rule>
231 <include state="strings-double"/>
232 </rule>
233 </state>
234 <state name="fromimport">
235 <rule pattern="(\s+)(import)\b">
236 <bygroups>
237 <token type="Text"/>
238 <token type="KeywordNamespace"/>
239 </bygroups>
240 <pop depth="1"/>
241 </rule>
242 <rule pattern="\.">
243 <token type="NameNamespace"/>
244 </rule>
245 <rule pattern="None\b">
246 <token type="NameBuiltinPseudo"/>
247 <pop depth="1"/>
248 </rule>
249 <rule pattern="[_\p{L}][_\p{L}\p{N}]*">
250 <token type="NameNamespace"/>
251 </rule>
252 <rule>
253 <pop depth="1"/>
254 </rule>
255 </state>
256 <state name="builtins">
257 <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">
258 <token type="NameBuiltin"/>
259 </rule>
260 <rule pattern="(?<!\.)(self|Ellipsis|NotImplemented|cls)\b">
261 <token type="NameBuiltinPseudo"/>
262 </rule>
263 <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">
264 <token type="NameException"/>
265 </rule>
266 </state>
267 <state name="classname">
268 <rule pattern="[_\p{L}][_\p{L}\p{N}]*">
269 <token type="NameClass"/>
270 <pop depth="1"/>
271 </rule>
272 </state>
273 <state name="import">
274 <rule pattern="(\s+)(as)(\s+)">
275 <bygroups>
276 <token type="Text"/>
277 <token type="Keyword"/>
278 <token type="Text"/>
279 </bygroups>
280 </rule>
281 <rule pattern="\.">
282 <token type="NameNamespace"/>
283 </rule>
284 <rule pattern="[_\p{L}][_\p{L}\p{N}]*">
285 <token type="NameNamespace"/>
286 </rule>
287 <rule pattern="(\s*)(,)(\s*)">
288 <bygroups>
289 <token type="Text"/>
290 <token type="Operator"/>
291 <token type="Text"/>
292 </bygroups>
293 </rule>
294 <rule>
295 <pop depth="1"/>
296 </rule>
297 </state>
298 <state name="tsqs">
299 <rule pattern="'''">
300 <token type="LiteralStringSingle"/>
301 <pop depth="1"/>
302 </rule>
303 <rule>
304 <include state="strings-single"/>
305 </rule>
306 <rule pattern="\n">
307 <token type="LiteralStringSingle"/>
308 </rule>
309 </state>
310 <state name="strings-double">
311 <rule pattern="%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?[hlL]?[E-GXc-giorsaux%]">
312 <token type="LiteralStringInterpol"/>
313 </rule>
314 <rule pattern="\{((\w+)((\.\w+)|(\[[^\]]+\]))*)?(\![sra])?(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[E-GXb-gnosx%]?)?\}">
315 <token type="LiteralStringInterpol"/>
316 </rule>
317 <rule pattern="[^\\\'"%{\n]+">
318 <token type="LiteralStringDouble"/>
319 </rule>
320 <rule pattern="[\'"\\]">
321 <token type="LiteralStringDouble"/>
322 </rule>
323 <rule pattern="%|(\{{1,2})">
324 <token type="LiteralStringDouble"/>
325 </rule>
326 </state>
327 <state name="tdqf">
328 <rule pattern=""""">
329 <token type="LiteralStringDouble"/>
330 <pop depth="1"/>
331 </rule>
332 <rule>
333 <include state="fstrings-double"/>
334 </rule>
335 <rule pattern="\n">
336 <token type="LiteralStringDouble"/>
337 </rule>
338 </state>
339 <state name="expr-inside-fstring-inner">
340 <rule pattern="[{([]">
341 <token type="Punctuation"/>
342 <push state="expr-inside-fstring-inner"/>
343 </rule>
344 <rule pattern="[])}]">
345 <token type="Punctuation"/>
346 <pop depth="1"/>
347 </rule>
348 <rule pattern="\s+">
349 <token type="Text"/>
350 </rule>
351 <rule>
352 <include state="expr"/>
353 </rule>
354 </state>
355 <state name="sqs">
356 <rule pattern="'">
357 <token type="LiteralStringSingle"/>
358 <pop depth="1"/>
359 </rule>
360 <rule pattern="\\\\|\\'|\\\n">
361 <token type="LiteralStringEscape"/>
362 </rule>
363 <rule>
364 <include state="strings-single"/>
365 </rule>
366 </state>
367 <state name="funcname">
368 <rule>
369 <include state="magicfuncs"/>
370 </rule>
371 <rule pattern="[_\p{L}][_\p{L}\p{N}]*">
372 <token type="NameFunction"/>
373 <pop depth="1"/>
374 </rule>
375 <rule>
376 <pop depth="1"/>
377 </rule>
378 </state>
379 <state name="expr-keywords">
380 <rule pattern="(yield from|async for|lambda|yield|await|else|for|if)\b">
381 <token type="Keyword"/>
382 </rule>
383 <rule pattern="(False|True|None)\b">
384 <token type="KeywordConstant"/>
385 </rule>
386 </state>
387 <state name="name">
388 <rule pattern="@[_\p{L}][_\p{L}\p{N}]*(\s*\.\s*[_\p{L}][_\p{L}\p{N}]*)*">
389 <token type="NameDecorator"/>
390 </rule>
391 <rule pattern="@">
392 <token type="Operator"/>
393 </rule>
394 <rule pattern="[_\p{L}][_\p{L}\p{N}]*">
395 <token type="Name"/>
396 </rule>
397 </state>
398 <state name="magicfuncs">
399 <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">
400 <token type="NameFunctionMagic"/>
401 </rule>
402 </state>
403 <state name="root">
404 <rule pattern="\n">
405 <token type="Text"/>
406 </rule>
407 <rule pattern="^(\s*)([rRuUbB]{,2})("""(?:.|\n)*?""")">
408 <bygroups>
409 <token type="Text"/>
410 <token type="LiteralStringAffix"/>
411 <token type="LiteralStringDoc"/>
412 </bygroups>
413 </rule>
414 <rule pattern="^(\s*)([rRuUbB]{,2})('''(?:.|\n)*?''')">
415 <bygroups>
416 <token type="Text"/>
417 <token type="LiteralStringAffix"/>
418 <token type="LiteralStringDoc"/>
419 </bygroups>
420 </rule>
421 <rule pattern="\A#!.+$">
422 <token type="CommentHashbang"/>
423 </rule>
424 <rule pattern="#.*$">
425 <token type="CommentSingle"/>
426 </rule>
427 <rule pattern="\\\n">
428 <token type="Text"/>
429 </rule>
430 <rule pattern="\\">
431 <token type="Text"/>
432 </rule>
433 <rule>
434 <include state="keywords"/>
435 </rule>
436 <rule pattern="(def)((?:\s|\\\s)+)">
437 <bygroups>
438 <token type="Keyword"/>
439 <token type="Text"/>
440 </bygroups>
441 <push state="funcname"/>
442 </rule>
443 <rule pattern="(class)((?:\s|\\\s)+)">
444 <bygroups>
445 <token type="Keyword"/>
446 <token type="Text"/>
447 </bygroups>
448 <push state="classname"/>
449 </rule>
450 <rule pattern="(from)((?:\s|\\\s)+)">
451 <bygroups>
452 <token type="KeywordNamespace"/>
453 <token type="Text"/>
454 </bygroups>
455 <push state="fromimport"/>
456 </rule>
457 <rule pattern="(import)((?:\s|\\\s)+)">
458 <bygroups>
459 <token type="KeywordNamespace"/>
460 <token type="Text"/>
461 </bygroups>
462 <push state="import"/>
463 </rule>
464 <rule>
465 <include state="expr"/>
466 </rule>
467 </state>
468 <state name="fstrings-single">
469 <rule pattern="\}">
470 <token type="LiteralStringInterpol"/>
471 </rule>
472 <rule pattern="\{">
473 <token type="LiteralStringInterpol"/>
474 <push state="expr-inside-fstring"/>
475 </rule>
476 <rule pattern="[^\\\'"{}\n]+">
477 <token type="LiteralStringSingle"/>
478 </rule>
479 <rule pattern="[\'"\\]">
480 <token type="LiteralStringSingle"/>
481 </rule>
482 </state>
483 <state name="magicvars">
484 <rule pattern="(__annotations__|__kwdefaults__|__qualname__|__objclass__|__defaults__|__closure__|__globals__|__weakref__|__module__|__class__|__bases__|__slots__|__file__|__code__|__name__|__func__|__dict__|__self__|__mro__|__doc__)\b">
485 <token type="NameVariableMagic"/>
486 </rule>
487 </state>
488 <state name="tsqf">
489 <rule pattern="'''">
490 <token type="LiteralStringSingle"/>
491 <pop depth="1"/>
492 </rule>
493 <rule>
494 <include state="fstrings-single"/>
495 </rule>
496 <rule pattern="\n">
497 <token type="LiteralStringSingle"/>
498 </rule>
499 </state>
500 <state name="strings-single">
501 <rule pattern="%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?[hlL]?[E-GXc-giorsaux%]">
502 <token type="LiteralStringInterpol"/>
503 </rule>
504 <rule pattern="\{((\w+)((\.\w+)|(\[[^\]]+\]))*)?(\![sra])?(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[E-GXb-gnosx%]?)?\}">
505 <token type="LiteralStringInterpol"/>
506 </rule>
507 <rule pattern="[^\\\'"%{\n]+">
508 <token type="LiteralStringSingle"/>
509 </rule>
510 <rule pattern="[\'"\\]">
511 <token type="LiteralStringSingle"/>
512 </rule>
513 <rule pattern="%|(\{{1,2})">
514 <token type="LiteralStringSingle"/>
515 </rule>
516 </state>
517 <state name="rfstringescape">
518 <rule pattern="\{\{">
519 <token type="LiteralStringEscape"/>
520 </rule>
521 <rule pattern="\}\}">
522 <token type="LiteralStringEscape"/>
523 </rule>
524 </state>
525 <state name="sqf">
526 <rule pattern="'">
527 <token type="LiteralStringSingle"/>
528 <pop depth="1"/>
529 </rule>
530 <rule pattern="\\\\|\\'|\\\n">
531 <token type="LiteralStringEscape"/>
532 </rule>
533 <rule>
534 <include state="fstrings-single"/>
535 </rule>
536 </state>
537 <state name="dqf">
538 <rule pattern=""">
539 <token type="LiteralStringDouble"/>
540 <pop depth="1"/>
541 </rule>
542 <rule pattern="\\\\|\\"|\\\n">
543 <token type="LiteralStringEscape"/>
544 </rule>
545 <rule>
546 <include state="fstrings-double"/>
547 </rule>
548 </state>
549 <state name="expr-inside-fstring">
550 <rule pattern="[{([]">
551 <token type="Punctuation"/>
552 <push state="expr-inside-fstring-inner"/>
553 </rule>
554 <rule pattern="(=\s*)?(\![sraf])?\}">
555 <token type="LiteralStringInterpol"/>
556 <pop depth="1"/>
557 </rule>
558 <rule pattern="(=\s*)?(\![sraf])?:">
559 <token type="LiteralStringInterpol"/>
560 <pop depth="1"/>
561 </rule>
562 <rule pattern="\s+">
563 <token type="Text"/>
564 </rule>
565 <rule>
566 <include state="expr"/>
567 </rule>
568 </state>
569 <state name="tdqs">
570 <rule pattern=""""">
571 <token type="LiteralStringDouble"/>
572 <pop depth="1"/>
573 </rule>
574 <rule>
575 <include state="strings-double"/>
576 </rule>
577 <rule pattern="\n">
578 <token type="LiteralStringDouble"/>
579 </rule>
580 </state>
581 <state name="fstringescape">
582 <rule>
583 <include state="rfstringescape"/>
584 </rule>
585 <rule>
586 <include state="stringescape"/>
587 </rule>
588 </state>
589 <state name="stringescape">
590 <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})">
591 <token type="LiteralStringEscape"/>
592 </rule>
593 </state>
594 </rules>
595</lexer>