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>