1<lexer>
 2  <config>
 3    <name>Lean4</name>
 4    <alias>lean4</alias>
 5    <alias>lean</alias>
 6    <filename>*.lean</filename>
 7    <mime_type>text/x-lean4</mime_type>
 8    <mime_type>text/x-lean</mime_type>
 9  </config>
10  <rules>
11    <state name="expression">
12      <rule pattern="\s+"><token type="TextWhitespace"/></rule>
13      <rule pattern="/--"><token type="LiteralStringDoc"/><push state="docstring"/></rule>
14      <rule pattern="/-"><token type="Comment"/><push state="comment"/></rule>
15      <rule pattern="--.*$"><token type="CommentSingle"/></rule>
16      <rule pattern="\b(Type|Prop|Sort)\b"><token type="KeywordType"/></rule>
17      <rule pattern="\b(sorry|admit)\b"><token type="GenericError"/></rule>
18      <rule pattern="(!=|\#|\&amp;|\&amp;\&amp;|\*|\+|\-|/|@|!|\-\.|\-&gt;|\.|\.\.|\.\.\.|::|:&gt;|;|;;|&lt;|&lt;\-|=|==|&gt;|_|\||\|\||\~|=&gt;|&lt;=|&gt;=|/\\|\\/|∀|Π|λ|↔|∧|∨|≠|≤|≥|¬|⁻¹|⬝|▸|→|∃|≈|×|⌞|⌟|≡|⟨|⟩|↦)"><token type="NameBuiltinPseudo"/></rule>
19      <rule pattern="(\(|\)|:|\{|\}|\[|\]|⦃|⦄|:=|,)"><token type="Operator"/></rule>
20      <rule pattern="(?![λΠΣ])[_a-zA-Zα-ωΑ-Ωϊ-ϻἀ-῾℀-⅏𝒜-𝖟](?:(?![λΠΣ])[_a-zA-Zα-ωΑ-Ωϊ-ϻἀ-῾℀-⅏𝒜-𝖟0-9&#x27;ⁿ-₉ₐ-ₜᵢ-ᵪ!?])*"><token type="Name"/></rule>
21      <rule pattern="``?(?![λΠΣ])[_a-zA-Zα-ωΑ-Ωϊ-ϻἀ-῾℀-⅏𝒜-𝖟](?:(?![λΠΣ])[_a-zA-Zα-ωΑ-Ωϊ-ϻἀ-῾℀-⅏𝒜-𝖟0-9&#x27;ⁿ-₉ₐ-ₜᵢ-ᵪ!?])*(\.(?![λΠΣ])[_a-zA-Zα-ωΑ-Ωϊ-ϻἀ-῾℀-⅏𝒜-𝖟](?:(?![λΠΣ])[_a-zA-Zα-ωΑ-Ωϊ-ϻἀ-῾℀-⅏𝒜-𝖟0-9&#x27;ⁿ-₉ₐ-ₜᵢ-ᵪ!?])*)*"><token type="LiteralStringSymbol"/></rule>
22      <rule pattern="(?&lt;=\.)\d+"><token type="LiteralNumber"/></rule>
23      <rule pattern="(\d+\.\d*)([eE][+-]?[0-9]+)?"><token type="LiteralNumberFloat"/></rule>
24      <rule pattern="\d+"><token type="LiteralNumberInteger"/></rule>
25      <rule pattern="&quot;"><token type="LiteralStringDouble"/><push state="string"/></rule>
26      <rule pattern="[~?][a-z][\w\&#x27;]*:"><token type="NameVariable"/></rule>
27      <rule pattern="\S"><token type="NameBuiltinPseudo"/></rule>
28    </state>
29    <state name="root">
30      <rule pattern="\b(import|unif_hint|renaming|inline|hiding|lemma|variable|theorem|axiom|inductive|structure|universe|alias|\#help|precedence|postfix|prefix|infix|infixl|infixr|notation|\#eval|\#check|\#reduce|\#exit|end|private|using|namespace|instance|section|protected|export|set_option|extends|open|example|\#print|opaque|def|macro|elab|syntax|macro_rules|\#reduce|where|abbrev|noncomputable|class|attribute|\#synth|mutual|scoped|local)\b"><token type="KeywordNamespace"/></rule>
31      <rule pattern="\b(forall|fun|obtain|from|have|show|assume|let|if|else|then|by|in|with|calc|match|nomatch|do|at)\b"><token type="Keyword"/></rule>
32      <rule pattern="@\["><token type="KeywordDeclaration"/><push state="attribute"/></rule>
33      <rule><include state="expression"/></rule>
34    </state>
35    <state name="attribute">
36      <rule pattern="\]"><token type="KeywordDeclaration"/><pop depth="1"/></rule>
37      <rule><include state="expression"/></rule>
38    </state>
39    <state name="comment">
40      <rule pattern="[^/-]+"><token type="CommentMultiline"/></rule>
41      <rule pattern="/-"><token type="CommentMultiline"/><push/></rule>
42      <rule pattern="-/"><token type="CommentMultiline"/><pop depth="1"/></rule>
43      <rule pattern="[/-]"><token type="CommentMultiline"/></rule>
44    </state>
45    <state name="docstring">
46      <rule pattern="[^/-]+"><token type="LiteralStringDoc"/></rule>
47      <rule pattern="-/"><token type="LiteralStringDoc"/><pop depth="1"/></rule>
48      <rule pattern="[/-]"><token type="LiteralStringDoc"/></rule>
49    </state>
50    <state name="string">
51      <rule pattern="[^\\&quot;]+"><token type="LiteralStringDouble"/></rule>
52      <rule pattern="\\[n&quot;\\\n]"><token type="LiteralStringEscape"/></rule>
53      <rule pattern="&quot;"><token type="LiteralStringDouble"/><pop depth="1"/></rule>
54    </state>
55  </rules>
56</lexer>