1<lexer>
  2  <config>
  3    <name>Zig</name>
  4    <alias>zig</alias>
  5    <filename>*.zig</filename>
  6    <filename>*.zon</filename>
  7    <mime_type>text/zig</mime_type>
  8  </config>
  9  <rules>
 10    <state name="string">
 11      <rule pattern="\\x[0-9a-fA-F]{2}">
 12        <token type="LiteralStringEscape"/>
 13      </rule>
 14      <rule pattern="\\u\{[0-9a-fA-F]+\}">
 15        <token type="LiteralStringEscape"/>
 16      </rule>
 17      <rule pattern="\\[nrt&#39;&#34;\\]">
 18        <token type="LiteralStringEscape"/>
 19      </rule>
 20      <rule pattern="[^\\&#34;\n]+">
 21        <token type="LiteralString"/>
 22      </rule>
 23      <rule pattern="&#34;">
 24        <token type="LiteralString"/>
 25        <pop depth="1"/>
 26      </rule>
 27      <rule pattern="\\">
 28        <token type="LiteralString"/>
 29      </rule>
 30    </state>
 31    <state name="quoted_ident">
 32      <rule pattern="\\x[0-9a-fA-F]{2}">
 33        <token type="LiteralStringEscape"/>
 34      </rule>
 35      <rule pattern="\\u\{[0-9a-fA-F]+\}">
 36        <token type="LiteralStringEscape"/>
 37      </rule>
 38      <rule pattern="\\[nrt&#39;&#34;\\]">
 39        <token type="LiteralStringEscape"/>
 40      </rule>
 41      <rule pattern="[^\\&#34;\n]+">
 42        <token type="Name"/>
 43      </rule>
 44      <rule pattern="&#34;">
 45        <token type="Name"/>
 46        <pop depth="1"/>
 47      </rule>
 48      <rule pattern="\\">
 49        <token type="Name"/>
 50      </rule>
 51    </state>
 52    <state name="root">
 53      <!-- Whitespace -->
 54      <rule pattern="\n">
 55        <token type="TextWhitespace"/>
 56      </rule>
 57      <rule pattern="\s+">
 58        <token type="TextWhitespace"/>
 59      </rule>
 60      <!-- Comments -->
 61      <rule pattern="//!.*$">
 62        <token type="CommentSpecial"/>
 63      </rule>
 64      <rule pattern="///.*$">
 65        <token type="CommentSpecial"/>
 66      </rule>
 67      <rule pattern="//.*$">
 68        <token type="CommentSingle"/>
 69      </rule>
 70      <!-- Statement keywords -->
 71      <rule pattern="(break|return|continue|asm|defer|errdefer|unreachable|try|catch|suspend|resume|nosuspend)\b">
 72        <token type="Keyword"/>
 73      </rule>
 74      <!-- Storage/reserved keywords -->
 75      <rule pattern="(const|var|extern|packed|export|pub|noalias|inline|noinline|comptime|volatile|allowzero|align|addrspace|linksection|threadlocal|callconv)\b">
 76        <token type="KeywordReserved"/>
 77      </rule>
 78      <!-- Structure keywords -->
 79      <rule pattern="(struct|enum|union|error|opaque)\b">
 80        <token type="Keyword"/>
 81      </rule>
 82      <!-- Repeat keywords -->
 83      <rule pattern="(while|for)\b">
 84        <token type="Keyword"/>
 85      </rule>
 86      <!-- Type keywords -->
 87      <rule pattern="(bool|void|noreturn|type|anyerror|anyopaque|f16|f32|f64|f80|f128|i8|u8|i16|u16|i32|u32|i64|u64|i128|u128|isize|usize|comptime_int|comptime_float|c_char|c_short|c_ushort|c_int|c_uint|c_long|c_ulong|c_longlong|c_ulonglong|c_longdouble)\b">
 88        <token type="KeywordType"/>
 89      </rule>
 90      <!-- Constant keywords -->
 91      <rule pattern="(true|false|null|undefined)\b">
 92        <token type="KeywordConstant"/>
 93      </rule>
 94      <!-- Conditional keywords -->
 95      <rule pattern="(if|else|switch|and|or|orelse)\b">
 96        <token type="Keyword"/>
 97      </rule>
 98      <!-- Other keywords -->
 99      <rule pattern="(fn|test|anyframe|anytype)\b">
100        <token type="Keyword"/>
101      </rule>
102      <!-- Hex float -->
103      <rule pattern="0x[0-9a-fA-F][0-9a-fA-F_]*(?:\.[0-9a-fA-F][0-9a-fA-F_]*(?:[pP][-+]?[0-9][0-9_]*)?|[pP][-+]?[0-9][0-9_]*)">
104        <token type="LiteralNumberFloat"/>
105      </rule>
106      <!-- Decimal float -->
107      <rule pattern="[0-9][0-9_]*(?:\.[0-9][0-9_]*(?:[eE][-+]?[0-9][0-9_]*)?|[eE][-+]?[0-9][0-9_]*)">
108        <token type="LiteralNumberFloat"/>
109      </rule>
110      <!-- Binary -->
111      <rule pattern="0b[01][01_]*">
112        <token type="LiteralNumberBin"/>
113      </rule>
114      <!-- Octal -->
115      <rule pattern="0o[0-7][0-7_]*">
116        <token type="LiteralNumberOct"/>
117      </rule>
118      <!-- Hex integer -->
119      <rule pattern="0x[0-9a-fA-F][0-9a-fA-F_]*">
120        <token type="LiteralNumberHex"/>
121      </rule>
122      <!-- Decimal integer -->
123      <rule pattern="[0-9][0-9_]*">
124        <token type="LiteralNumberInteger"/>
125      </rule>
126      <!-- Quoted identifier -->
127      <rule pattern="@&#34;">
128        <token type="Name"/>
129        <push state="quoted_ident"/>
130      </rule>
131      <!-- Builtin -->
132      <rule pattern="@[a-zA-Z_][a-zA-Z0-9_]*">
133        <token type="NameBuiltin"/>
134      </rule>
135      <!-- Function call -->
136      <rule pattern="[a-zA-Z_][a-zA-Z0-9_]*(?=\s*\()">
137        <token type="NameFunction"/>
138      </rule>
139      <!-- Identifier -->
140      <rule pattern="[a-zA-Z_][a-zA-Z0-9_]*">
141        <token type="Name"/>
142      </rule>
143      <!-- Character literal -->
144      <rule pattern="&#39;(?:\\x[0-9a-fA-F]{2}|\\u\{[0-9a-fA-F]+\}|\\[nrt&#39;&#34;\\]|[^\\&#39;\n])&#39;">
145        <token type="LiteralStringChar"/>
146      </rule>
147      <!-- Multiline string -->
148      <rule pattern="\\\\[^\n]*">
149        <token type="LiteralStringHeredoc"/>
150      </rule>
151      <!-- String start -->
152      <rule pattern="&#34;">
153        <token type="LiteralString"/>
154        <push state="string"/>
155      </rule>
156      <!-- 4-char operators -->
157      <rule pattern="&lt;&lt;\|=">
158        <token type="Operator"/>
159      </rule>
160      <!-- 3-char operators -->
161      <rule pattern="(?:\+%=|-%=|\*%=|\+\|=|-\|=|\*\|=|&lt;&lt;=|&gt;&gt;=|&lt;&lt;\|)">
162        <token type="Operator"/>
163      </rule>
164      <!-- 2-char operators -->
165      <rule pattern="(?:\+\+|\*\*|\|\||&lt;&lt;|&gt;&gt;|\+%|-%|\*%|\+\||-\||\*\||==|!=|&lt;=|&gt;=|\+=|-=|\*=|/=|%=|&amp;=|\|=|\^=|\.\*|\.\?|\.\.)">
166        <token type="Operator"/>
167      </rule>
168      <!-- 1-char operators -->
169      <rule pattern="[+\-*/%&amp;|^~!&lt;&gt;=]">
170        <token type="Operator"/>
171      </rule>
172      <!-- Punctuation -->
173      <rule pattern="\.\.\.">
174        <token type="Punctuation"/>
175      </rule>
176      <rule pattern="=&gt;">
177        <token type="Punctuation"/>
178      </rule>
179      <rule pattern="-&gt;">
180        <token type="Punctuation"/>
181      </rule>
182      <rule pattern="[{}()\[\],.;:?]">
183        <token type="Punctuation"/>
184      </rule>
185    </state>
186  </rules>
187</lexer>