1<lexer>
 2  <config>
 3    <name>Hare</name>
 4    <alias>hare</alias>
 5    <filename>*.ha</filename>
 6    <mime_type>text/x-hare</mime_type>
 7  </config>
 8  <rules>
 9    <state name="string">
10      <rule pattern=""">
11        <token type="LiteralString"/>
12        <pop depth="1"/>
13      </rule>
14      <rule pattern="\\([\\0abfnrtv"']|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8})">
15        <token type="LiteralStringEscape"/>
16      </rule>
17      <rule pattern="[^\\"\n]+">
18        <token type="LiteralString"/>
19      </rule>
20      <rule pattern="\\">
21        <token type="LiteralString"/>
22      </rule>
23    </state>
24    <state name="root">
25      <rule pattern="[\s\n]+">
26        <token type="TextWhitespace"/>
27      </rule>
28      <rule pattern="@[a-z]+">
29        <token type="NameDecorator"/>
30      </rule>
31      <rule pattern="//.*\n">
32        <token type="CommentSingle"/>
33      </rule>
34      <rule pattern=""">
35        <token type="LiteralString"/>
36        <push state="string"/>
37      </rule>
38      <rule pattern="`[^`]*`">
39        <token type="LiteralString"/>
40      </rule>
41      <rule pattern="'(\\[\\0abfnrtv"']||\\(x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8})|[^\\'])'">
42        <token type="LiteralStringChar"/>
43      </rule>
44      <rule pattern="(0|[1-9]\d*)\.\d+([eE][+-]?\d+)?(f32|f64)?">
45        <token type="LiteralNumberFloat"/>
46      </rule>
47      <rule pattern="(0|[1-9]\d*)([eE][+-]?\d+)?(f32|f64)">
48        <token type="LiteralNumberFloat"/>
49      </rule>
50      <rule pattern="0x[0-9a-fA-F]+\.[0-9a-fA-F]+([pP][+-]?\d+(f32|f64)?)?">
51        <token type="LiteralNumberFloat"/>
52      </rule>
53      <rule pattern="0x[0-9a-fA-F]+[pP][+-]?\d+(f32|f64)">
54        <token type="LiteralNumberFloat"/>
55      </rule>
56      <rule pattern="0x[0-9a-fA-F]+(z|[iu](8|16|32|64)?)?">
57        <token type="LiteralNumberHex"/>
58      </rule>
59      <rule pattern="0o[0-7]+(z|[iu](8|16|32|64)?)?">
60        <token type="LiteralNumberOct"/>
61      </rule>
62      <rule pattern="0b[01]+(z|[iu](8|16|32|64)?)?">
63        <token type="LiteralNumberBin"/>
64      </rule>
65      <rule pattern="(0|[1-9]\d*)([eE][+-]?\d+)?(z|[iu](8|16|32|64)?)?">
66        <token type="LiteralNumberInteger"/>
67      </rule>
68      <rule pattern="[~!%^&*+=|?:<>/-]|[ai]s\b|\.\.\.">
69        <token type="Operator"/>
70      </rule>
71      <rule pattern="[()\[\],.{};]">
72        <token type="Punctuation"/>
73      </rule>
74      <rule pattern="use\b">
75        <token type="KeywordNamespace"/>
76      </rule>
77      <rule pattern="(_|align|break|const|continue|else|enum|export|for|if|return|static|struct|offset|union|fn|free|assert|abort|alloc|let|len|def|type|match|switch|case|append|delete|insert|defer|yield|vastart|vaarg|vaend)\b">
78        <token type="Keyword"/>
79      </rule>
80      <rule pattern="(size)([\s\n]*)(\()">
81        <bygroups>
82          <token type="Keyword" />
83          <token type="TextWhitespace" />
84          <token type="Punctuation" />
85        </bygroups>
86      </rule>
87      <rule pattern="(str|size|rune|bool|int|uint|uintptr|u8|u16|u32|u64|i8|i16|i32|i64|f32|f64|null|void|done|nullable|valist|opaque|never)\b">
88        <token type="KeywordType"/>
89      </rule>
90      <rule pattern="(true|false)\b">
91        <token type="NameBuiltin"/>
92      </rule>
93      <rule pattern="[a-zA-Z_]\w*">
94        <token type="Name"/>
95      </rule>
96    </state>
97  </rules>
98</lexer>