1<lexer>
2 <config>
3 <name>Spade</name>
4 <alias>spade</alias>
5 <filename>*.spade</filename>
6 <mime_type>text/spade</mime_type>
7 <mime_type>text/x-spade</mime_type>
8 <ensure_nl>true</ensure_nl>
9 </config>
10 <rules>
11 <state name="modname">
12 <rule pattern="\s+">
13 <token type="Text"/>
14 </rule>
15 <rule pattern="[a-zA-Z_]\w*">
16 <token type="NameNamespace"/>
17 <pop depth="1"/>
18 </rule>
19 <rule>
20 <pop depth="1"/>
21 </rule>
22 </state>
23 <state name="number_lit">
24 <rule pattern="[ui]\d*">
25 <token type="Keyword"/>
26 <pop depth="1"/>
27 </rule>
28 <rule>
29 <pop depth="1"/>
30 </rule>
31 </state>
32 <state name="attribute_common">
33 <rule pattern=""">
34 <token type="LiteralString"/>
35 <push state="string"/>
36 </rule>
37 <rule pattern="\[">
38 <token type="CommentPreproc"/>
39 <push state="attribute["/>
40 </rule>
41 </state>
42 <state name="comment">
43 <rule pattern="[^*/]+">
44 <token type="CommentMultiline"/>
45 </rule>
46 <rule pattern="/\*">
47 <token type="CommentMultiline"/>
48 <push/>
49 </rule>
50 <rule pattern="\*/">
51 <token type="CommentMultiline"/>
52 <pop depth="1"/>
53 </rule>
54 <rule pattern="[*/]">
55 <token type="CommentMultiline"/>
56 </rule>
57 </state>
58 <state name="doccomment">
59 <rule pattern="[^*/]+">
60 <token type="LiteralStringDoc"/>
61 </rule>
62 <rule pattern="/\*">
63 <token type="LiteralStringDoc"/>
64 <push/>
65 </rule>
66 <rule pattern="\*/">
67 <token type="LiteralStringDoc"/>
68 <pop depth="1"/>
69 </rule>
70 <rule pattern="[*/]">
71 <token type="LiteralStringDoc"/>
72 </rule>
73 </state>
74 <state name="funcname">
75 <rule pattern="\s+">
76 <token type="Text"/>
77 </rule>
78 <rule pattern="[a-zA-Z_]\w*">
79 <token type="NameFunction"/>
80 <pop depth="1"/>
81 </rule>
82 <rule>
83 <pop depth="1"/>
84 </rule>
85 </state>
86 <state name="string">
87 <rule pattern=""">
88 <token type="LiteralString"/>
89 <pop depth="1"/>
90 </rule>
91 <rule pattern="\\['"\\nrt]|\\(?=\n)|\\x[0-7][0-9a-fA-F]|\\0|\\u\{[0-9a-fA-F]{1,6}\}">
92 <token type="LiteralStringEscape"/>
93 </rule>
94 <rule pattern="[^\\"]+">
95 <token type="LiteralString"/>
96 </rule>
97 <rule pattern="\\">
98 <token type="LiteralString"/>
99 </rule>
100 </state>
101 <state name="root">
102 <rule pattern="#![^[\r\n].*$">
103 <token type="CommentPreproc"/>
104 </rule>
105 <rule>
106 <push state="base"/>
107 </rule>
108 </state>
109 <state name="attribute[">
110 <rule>
111 <include state="attribute_common"/>
112 </rule>
113 <rule pattern="\]">
114 <token type="CommentPreproc"/>
115 <pop depth="1"/>
116 </rule>
117 <rule pattern="[^"\]\[]+">
118 <token type="CommentPreproc"/>
119 </rule>
120 </state>
121 <state name="base">
122 <rule pattern="\n">
123 <token type="TextWhitespace"/>
124 </rule>
125 <rule pattern="\s+">
126 <token type="TextWhitespace"/>
127 </rule>
128 <rule pattern="//!.*?\n">
129 <token type="LiteralStringDoc"/>
130 </rule>
131 <rule pattern="///(\n|[^/].*?\n)">
132 <token type="LiteralStringDoc"/>
133 </rule>
134 <rule pattern="//(.*?)\n">
135 <token type="CommentSingle"/>
136 </rule>
137 <rule pattern="/\*\*(\n|[^/*])">
138 <token type="LiteralStringDoc"/>
139 <push state="doccomment"/>
140 </rule>
141 <rule pattern="/\*!">
142 <token type="LiteralStringDoc"/>
143 <push state="doccomment"/>
144 </rule>
145 <rule pattern="/\*">
146 <token type="CommentMultiline"/>
147 <push state="comment"/>
148 </rule>
149 <rule pattern=""">
150 <token type="LiteralString"/>
151 <push state="string"/>
152 </rule>
153 <rule pattern="\$([a-zA-Z_]\w*|\(,?|\),?|,?)">
154 <token type="CommentPreproc"/>
155 </rule>
156 <rule pattern="(reg|decl|inst|reset|initial|if|else|match|set|pipeline|stage|entity|trait|impl|for|fn|port|mod|use|as|assert|mut|inv|pub|where|gen)\b">
157 <token type="Keyword"/>
158 </rule>
159 <rule pattern="(true|false)\b">
160 <token type="KeywordConstant"/>
161 </rule>
162 <rule pattern="self\b">
163 <token type="NameBuiltinPseudo"/>
164 </rule>
165 <rule pattern="mod\b">
166 <token type="Keyword"/>
167 <push state="modname"/>
168 </rule>
169 <rule pattern="let\b">
170 <token type="KeywordDeclaration"/>
171 </rule>
172 <rule pattern="fn\b">
173 <token type="Keyword"/>
174 <push state="funcname"/>
175 </rule>
176 <rule pattern="(struct|enum)\b">
177 <token type="Keyword"/>
178 <push state="typename"/>
179 </rule>
180 <rule pattern="(default)(\s+)(type|fn)\b">
181 <bygroups>
182 <token type="Keyword"/>
183 <token type="Text"/>
184 <token type="Keyword"/>
185 </bygroups>
186 </rule>
187 <rule pattern="(int|uint|bool|clock|inout)\b">
188 <token type="KeywordType"/>
189 </rule>
190 <rule pattern="[sS]elf\b">
191 <token type="NameBuiltinPseudo"/>
192 </rule>
193 <rule pattern="(Option|Fn|Entity|Pipeline)\b">
194 <token type="NameBuiltin"/>
195 </rule>
196 <rule pattern="::\b">
197 <token type="Text"/>
198 </rule>
199 <rule pattern="(?::|->)">
200 <token type="Text"/>
201 <push state="typename"/>
202 </rule>
203 <rule pattern="'[A-z0-9_]+">
204 <token type="NameLabel"/>
205 </rule>
206 <rule pattern="'(\\['"\\nrt]|\\x[0-7][0-9a-fA-F]|\\0|\\u\{[0-9a-fA-F]{1,6}\}|.)'">
207 <token type="LiteralStringChar"/>
208 </rule>
209 <rule pattern="(b)('(?:\\['"\\nrt]|\\x[0-9a-fA-F]{2}|\\0|.)')">
210 <bygroups>
211 <token type="LiteralStringAffix"/>
212 <token type="LiteralStringChar"/>
213 </bygroups>
214 </rule>
215 <rule pattern="0b[01_]+">
216 <token type="LiteralNumberBin"/>
217 <push state="number_lit"/>
218 </rule>
219 <rule pattern="0[xX][0-9a-fA-F_]+">
220 <token type="LiteralNumberHex"/>
221 <push state="number_lit"/>
222 </rule>
223 <rule pattern="[0-9][0-9_]*">
224 <token type="LiteralNumberInteger"/>
225 <push state="number_lit"/>
226 </rule>
227 <rule pattern="\.\.=?">
228 <token type="Operator"/>
229 </rule>
230 <rule pattern="`[A-z0-9_]+`">
231 <token type="Operator"/>
232 </rule>
233 <rule pattern="[{}()\[\],.;]">
234 <token type="Punctuation"/>
235 </rule>
236 <rule pattern="[+\-*/%&|<>^!~@=:?]">
237 <token type="Operator"/>
238 </rule>
239 <rule pattern="\b(r#)?_?([A-Z][A-Z0-9_]*){2,}\b">
240 <token type="NameConstant"/>
241 </rule>
242 <rule pattern="([a-zA-Z_]\w*!)(\s*)(\(|\[|\{)">
243 <bygroups>
244 <token type="NameFunctionMagic"/>
245 <token type="TextWhitespace"/>
246 <token type="Punctuation"/>
247 </bygroups>
248 </rule>
249 <rule pattern="(r#)?[a-zA-Z_]\w*">
250 <token type="Name"/>
251 </rule>
252 <rule pattern="r#[a-zA-Z_]\w*">
253 <token type="Name"/>
254 </rule>
255 <rule pattern="#!?\[">
256 <token type="CommentPreproc"/>
257 <push state="attribute["/>
258 </rule>
259 <rule pattern="#">
260 <token type="Text"/>
261 </rule>
262 </state>
263 <state name="typename">
264 <rule pattern="\s+">
265 <token type="Text"/>
266 </rule>
267 <rule pattern="&">
268 <token type="KeywordPseudo"/>
269 </rule>
270 <rule pattern="'(static|_)">
271 <token type="NameBuiltin"/>
272 </rule>
273 <rule pattern="'">
274 <token type="NameAttribute"/>
275 <push state="lifetime"/>
276 </rule>
277 <rule pattern="(Option|Fn|Entity|Pipeline)\b">
278 <token type="NameBuiltin"/>
279 </rule>
280 <rule pattern="(int|uint|bool|clock|inout)\b">
281 <token type="KeywordType"/>
282 </rule>
283 <rule pattern="[a-zA-Z_]\w*">
284 <token type="NameClass"/>
285 <pop depth="1"/>
286 </rule>
287 <rule>
288 <pop depth="1"/>
289 </rule>
290 </state>
291 </rules>
292</lexer>