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