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>