diff options
Diffstat (limited to 'xtask/src/codegen/rust.ungram')
-rw-r--r-- | xtask/src/codegen/rust.ungram | 544 |
1 files changed, 544 insertions, 0 deletions
diff --git a/xtask/src/codegen/rust.ungram b/xtask/src/codegen/rust.ungram new file mode 100644 index 000000000..375df301f --- /dev/null +++ b/xtask/src/codegen/rust.ungram | |||
@@ -0,0 +1,544 @@ | |||
1 | SourceFile = | ||
2 | 'shebang'? | ||
3 | Attr* | ||
4 | Item* | ||
5 | |||
6 | Item = | ||
7 | Const | ||
8 | | Enum | ||
9 | | ExternBlock | ||
10 | | ExternCrate | ||
11 | | Fn | ||
12 | | Impl | ||
13 | | MacroCall | ||
14 | | Module | ||
15 | | Static | ||
16 | | Struct | ||
17 | | Trait | ||
18 | | TypeAlias | ||
19 | | Union | ||
20 | | Use | ||
21 | |||
22 | Module = | ||
23 | Attr* Visibility? 'mod' Name | ||
24 | (ItemList | ';') | ||
25 | |||
26 | ItemList = | ||
27 | '{' Attr* Item* '}' | ||
28 | |||
29 | ExternCrate = | ||
30 | Attr* Visibility? 'extern' 'crate' (NameRef | 'self') Rename? ';' | ||
31 | |||
32 | Rename = | ||
33 | 'as' (Name | '_') | ||
34 | |||
35 | Use = | ||
36 | Attr* Visibility? 'use' UseTree ';' | ||
37 | |||
38 | UseTree = | ||
39 | (Path? '::')? ('*' | UseTreeList ) | ||
40 | | Path Rename? | ||
41 | |||
42 | UseTreeList = | ||
43 | '{' (UseTree (',' UseTree)* ','?)? '}' | ||
44 | |||
45 | Fn = | ||
46 | Attr* Visibility? | ||
47 | 'default'? ('async' | 'const')? 'unsafe'? Abi? | ||
48 | 'fn' Name GenericParamList? ParamList RetType? | ||
49 | WhereClause? | ||
50 | (body:BlockExpr | ';') | ||
51 | |||
52 | Abi = | ||
53 | 'extern' 'string'? | ||
54 | |||
55 | ParamList = | ||
56 | '('( | ||
57 | SelfParam | ||
58 | | (SelfParam ',')? (Param (',' Param)* ','?)? | ||
59 | )')' | ||
60 | |||
61 | SelfParam = | ||
62 | Attr* ( | ||
63 | ('&' 'lifetime'?)? 'mut'? 'self' | ||
64 | | 'mut'? 'self' ':' ty:TypeRef | ||
65 | ) | ||
66 | |||
67 | Param = | ||
68 | Attr* ( | ||
69 | Pat (':' ty:TypeRef) | ||
70 | | ty:TypeRef | ||
71 | | '...' | ||
72 | ) | ||
73 | |||
74 | RetType = | ||
75 | '->' ty:TypeRef | ||
76 | |||
77 | TypeAlias = | ||
78 | Attr* Visibility? 'default'? 'type' Name GenericParamList? (':' TypeBoundList?)? WhereClause? | ||
79 | '=' ty:TypeRef ';' | ||
80 | |||
81 | Struct = | ||
82 | Attr* Visibility? 'struct' Name GenericParamList? ( | ||
83 | WhereClause? (RecordFieldList | ';') | ||
84 | | TupleFieldList WhereClause? ';' | ||
85 | ) | ||
86 | |||
87 | RecordFieldList = | ||
88 | '{' fields:(RecordField (',' RecordField)* ','?)? '}' | ||
89 | |||
90 | RecordField = | ||
91 | Attr* Visibility? Name ':' ty:TypeRef | ||
92 | |||
93 | TupleFieldList = | ||
94 | '(' fields:(TupleField (',' TupleField)* ','?)? ')' | ||
95 | |||
96 | TupleField = | ||
97 | Attr* Visibility? ty:TypeRef | ||
98 | |||
99 | FieldList = | ||
100 | RecordFieldList | ||
101 | | TupleFieldList | ||
102 | |||
103 | Enum = | ||
104 | Attr* Visibility? 'enum' Name GenericParamList? WhereClause? | ||
105 | VariantList | ||
106 | |||
107 | VariantList = | ||
108 | '{' (Variant (',' Variant)* ','?)? '}' | ||
109 | |||
110 | Variant = | ||
111 | Attr* Visibility? Name FieldList ('=' Expr)? | ||
112 | |||
113 | Union = | ||
114 | Attr* Visibility? 'union' Name GenericParamList? WhereClause? | ||
115 | RecordFieldList | ||
116 | |||
117 | Const = | ||
118 | Attr* Visibility? 'default'? 'const' (Name | '_') ':' ty:TypeRef | ||
119 | '=' body:Expr ';' | ||
120 | |||
121 | Static = | ||
122 | Attr* Visibility? 'static'? 'mut'? Name ':' ty:TypeRef | ||
123 | '=' body:Expr ';' | ||
124 | |||
125 | Trait = | ||
126 | Attr* Visibility? 'unsafe'? 'auto'? 'trait' Name GenericParamList | ||
127 | (':' TypeBoundList?)? WhereClause | ||
128 | AssocItemList | ||
129 | |||
130 | AssocItemList = | ||
131 | '{' Attr* AssocItem* '}' | ||
132 | |||
133 | AssocItem = | ||
134 | Fn | ||
135 | | TypeAlias | ||
136 | | Const | ||
137 | | MacroCall | ||
138 | |||
139 | Impl = | ||
140 | Attr* Visibility? | ||
141 | 'default'? 'unsafe'? 'impl' 'const'? GenericParamList? ( | ||
142 | TypeRef | ||
143 | | '!'? TypeRef 'for' TypeRef | ||
144 | ) WhereClause? | ||
145 | AssocItemList | ||
146 | |||
147 | ExternBlock = | ||
148 | Attr* Abi ExternItemList | ||
149 | |||
150 | ExternItemList = | ||
151 | '{' Attr* ExternItem* '}' | ||
152 | |||
153 | ExternItem = | ||
154 | Fn | Static | MacroCall | ||
155 | |||
156 | GenericParamList = | ||
157 | '<' (GenericParam (',' GenericParam)* ','?)? '>' | ||
158 | |||
159 | GenericParam = | ||
160 | LifetimeParam | ||
161 | | TypeParam | ||
162 | | ConstParam | ||
163 | |||
164 | TypeParam = | ||
165 | Attr* Name (':' TypeBoundList?)? | ||
166 | ('=' default_type:TypeRef)? | ||
167 | |||
168 | ConstParam = | ||
169 | Attr* 'const' Name ':' ty:TypeRef | ||
170 | ('=' default_val:Expr)? | ||
171 | |||
172 | LifetimeParam = | ||
173 | Attr* 'lifetime' | ||
174 | |||
175 | Visibility = | ||
176 | 'pub' ('(' | ||
177 | 'super' | ||
178 | | 'self' | ||
179 | | 'crate' | ||
180 | | 'in' Path | ||
181 | ')')? | ||
182 | |||
183 | Attr = | ||
184 | '#' '!'? '[' Path ('=' Literal | TokenTree)? ']' | ||
185 | |||
186 | ParenType = | ||
187 | '(' ty:TypeRef ')' | ||
188 | |||
189 | TupleType = | ||
190 | '(' fields:TypeRef* ')' | ||
191 | |||
192 | NeverType = | ||
193 | '!' | ||
194 | |||
195 | PathType = | ||
196 | Path | ||
197 | |||
198 | PointerType = | ||
199 | '*' ('const' | 'mut') ty:TypeRef | ||
200 | |||
201 | ArrayType = | ||
202 | '[' ty:TypeRef ';' Expr ']' | ||
203 | |||
204 | SliceType = | ||
205 | '[' ty:TypeRef ']' | ||
206 | |||
207 | ReferenceType = | ||
208 | '&' 'lifetime'? 'mut'? ty:TypeRef | ||
209 | |||
210 | PlaceholderType = | ||
211 | '_' | ||
212 | |||
213 | FnPointerType = | ||
214 | Abi 'unsafe'? 'fn' ParamList RetType? | ||
215 | |||
216 | ForType = | ||
217 | 'for' GenericParamList ty:TypeRef | ||
218 | |||
219 | ImplTraitType = | ||
220 | 'impl' TypeBoundList | ||
221 | |||
222 | DynTraitType = | ||
223 | 'dyn' TypeBoundList | ||
224 | |||
225 | TupleExpr = | ||
226 | Attr* '(' Expr* ')' | ||
227 | |||
228 | ArrayExpr = | ||
229 | Attr* '[' (Expr* | Expr ';' Expr) ']' | ||
230 | |||
231 | ParenExpr = | ||
232 | Attr* '(' Expr ')' | ||
233 | |||
234 | PathExpr = | ||
235 | Path | ||
236 | |||
237 | LambdaExpr = | ||
238 | Attr* 'static'? 'async'? 'move'? ParamList RetType? | ||
239 | body:Expr | ||
240 | |||
241 | IfExpr = | ||
242 | Attr* 'if' Condition | ||
243 | |||
244 | Condition = | ||
245 | 'let' Pat '=' Expr | ||
246 | | Expr | ||
247 | |||
248 | EffectExpr = | ||
249 | Attr* Label? ('try' | 'unsafe' | 'async') BlockExpr | ||
250 | |||
251 | LoopExpr = | ||
252 | Attr* Label? 'loop' | ||
253 | loop_body:BlockExpr? | ||
254 | |||
255 | ForExpr = | ||
256 | Attr* Label? 'for' Pat 'in' iterable:Expr | ||
257 | loop_body:BlockExpr? | ||
258 | |||
259 | WhileExpr = | ||
260 | Attr* Label? 'while' Condition | ||
261 | loop_body:BlockExpr? | ||
262 | |||
263 | ContinueExpr = | ||
264 | Attr* 'continue' 'lifetime'? | ||
265 | |||
266 | BreakExpr = | ||
267 | Attr* 'break' 'lifetime'? Expr? | ||
268 | |||
269 | Label = | ||
270 | 'lifetime' | ||
271 | |||
272 | BlockExpr = | ||
273 | Attr* Label | ||
274 | '{' | ||
275 | Item* | ||
276 | statements:Stmt* | ||
277 | Expr? | ||
278 | '}' | ||
279 | |||
280 | ReturnExpr = | ||
281 | Attr* 'return' Expr | ||
282 | |||
283 | CallExpr = | ||
284 | Attr* Expr ArgList | ||
285 | |||
286 | MethodCallExpr = | ||
287 | Attr* Expr '.' NameRef TypeArgList? ArgList | ||
288 | |||
289 | ArgList = | ||
290 | '(' args:Expr* ')' | ||
291 | |||
292 | FieldExpr = | ||
293 | Attr* Expr '.' NameRef | ||
294 | |||
295 | IndexExpr = | ||
296 | Attr* '[' ']' | ||
297 | |||
298 | AwaitExpr = | ||
299 | Attr* Expr '.' 'await' | ||
300 | |||
301 | TryExpr = | ||
302 | Attr* Expr '?' | ||
303 | |||
304 | CastExpr = | ||
305 | Attr* Expr 'as' ty:TypeRef | ||
306 | |||
307 | RefExpr = | ||
308 | Attr* '&' ('raw' | 'mut' | 'const') Expr | ||
309 | |||
310 | PrefixExpr = | ||
311 | Attr* Expr | ||
312 | |||
313 | BoxExpr = | ||
314 | Attr* 'box' Expr | ||
315 | |||
316 | RangeExpr = | ||
317 | Attr* | ||
318 | |||
319 | BinExpr = | ||
320 | Attr* | ||
321 | |||
322 | Literal = | ||
323 | 'int_number' | ||
324 | |||
325 | MatchExpr = | ||
326 | Attr* 'match' Expr MatchArmList | ||
327 | |||
328 | MatchArmList = | ||
329 | '{' arms:MatchArm* '}' | ||
330 | |||
331 | MatchArm = | ||
332 | Attr* Pat guard:MatchGuard? '=>' Expr | ||
333 | |||
334 | MatchGuard = | ||
335 | 'if' Expr | ||
336 | |||
337 | RecordExpr = | ||
338 | Path RecordExprFieldList | ||
339 | |||
340 | RecordExprFieldList = | ||
341 | '{' | ||
342 | fields:RecordExprField* | ||
343 | ('..' spread:Expr)? | ||
344 | '}' | ||
345 | |||
346 | RecordExprField = | ||
347 | Attr* NameRef (':' Expr)? | ||
348 | |||
349 | OrPat = | ||
350 | Pat* | ||
351 | |||
352 | ParenPat = | ||
353 | '(' Pat ')' | ||
354 | |||
355 | RefPat = | ||
356 | '&' 'mut'? Pat | ||
357 | |||
358 | BoxPat = | ||
359 | 'box' Path | ||
360 | |||
361 | BindPat = | ||
362 | Attr* 'ref'? 'mut'? Name ('@' Pat)? | ||
363 | |||
364 | PlaceholderPat = | ||
365 | '_' | ||
366 | |||
367 | DotDotPat = | ||
368 | '..' | ||
369 | |||
370 | PathPat = | ||
371 | Path | ||
372 | |||
373 | SlicePat = | ||
374 | '[' args:Pat* ']' | ||
375 | |||
376 | RangePat = | ||
377 | '..' | '..=' | ||
378 | |||
379 | LiteralPat = | ||
380 | Literal | ||
381 | |||
382 | MacroPat = | ||
383 | MacroCall | ||
384 | |||
385 | RecordPat = | ||
386 | Path RecordFieldPatList | ||
387 | |||
388 | RecordFieldPatList = | ||
389 | '{' | ||
390 | record_field_pats:RecordFieldPat* | ||
391 | BindPat* | ||
392 | '..'? | ||
393 | '}' | ||
394 | |||
395 | RecordFieldPat = | ||
396 | Attr* NameRef ':' Pat | ||
397 | |||
398 | TupleStructPat = | ||
399 | Path '(' args:Pat* ')' | ||
400 | |||
401 | TuplePat = | ||
402 | '(' args:Pat* ')' | ||
403 | |||
404 | Name = | ||
405 | 'ident' | ||
406 | |||
407 | NameRef = | ||
408 | 'ident' | 'int_number' | ||
409 | |||
410 | MacroCall = | ||
411 | Attr* Path '!' Name? TokenTree ';'? | ||
412 | |||
413 | MacroDef = | ||
414 | Name TokenTree | ||
415 | |||
416 | TokenTree = | ||
417 | '(' ')' | '{' '}' | '[' ']' | ||
418 | |||
419 | MacroItems = | ||
420 | Item* | ||
421 | |||
422 | MacroStmts = | ||
423 | statements:Stmt* | ||
424 | Expr? | ||
425 | |||
426 | TypeBound = | ||
427 | 'lifetime' | 'const'? TypeRef | ||
428 | |||
429 | TypeBoundList = | ||
430 | bounds:TypeBound* | ||
431 | |||
432 | WherePred = | ||
433 | ('for' GenericParamList)? ('lifetime' | TypeRef) ':' TypeBoundList | ||
434 | |||
435 | WhereClause = | ||
436 | 'where' predicates:WherePred* | ||
437 | |||
438 | ExprStmt = | ||
439 | Attr* Expr ';' | ||
440 | |||
441 | LetStmt = | ||
442 | Attr* 'let' Pat (':' ty:TypeRef) | ||
443 | '=' initializer:Expr ';' | ||
444 | |||
445 | Path = | ||
446 | (qualifier:Path '::')? segment:PathSegment | ||
447 | |||
448 | PathSegment = | ||
449 | '::' | 'crate' | 'self' | 'super' | ||
450 | | '<' NameRef TypeArgList ParamList RetType PathType '>' | ||
451 | |||
452 | TypeArgList = | ||
453 | '::'? '<' | ||
454 | TypeArg* | ||
455 | LifetimeArg* | ||
456 | AssocTypeArg* | ||
457 | ConstArg* | ||
458 | '>' | ||
459 | |||
460 | TypeArg = | ||
461 | TypeRef | ||
462 | |||
463 | AssocTypeArg = | ||
464 | NameRef (':' TypeBoundList | '=' TypeRef) | ||
465 | |||
466 | LifetimeArg = | ||
467 | 'lifetime' | ||
468 | |||
469 | ConstArg = | ||
470 | Literal | BlockExpr BlockExpr | ||
471 | |||
472 | AdtDef = | ||
473 | Struct | ||
474 | | Enum | ||
475 | | Union | ||
476 | |||
477 | TypeRef = | ||
478 | ParenType | ||
479 | | TupleType | ||
480 | | NeverType | ||
481 | | PathType | ||
482 | | PointerType | ||
483 | | ArrayType | ||
484 | | SliceType | ||
485 | | ReferenceType | ||
486 | | PlaceholderType | ||
487 | | FnPointerType | ||
488 | | ForType | ||
489 | | ImplTraitType | ||
490 | | DynTraitType | ||
491 | |||
492 | Stmt = | ||
493 | LetStmt | ||
494 | | ExprStmt | ||
495 | |||
496 | Pat = | ||
497 | OrPat | ||
498 | | ParenPat | ||
499 | | RefPat | ||
500 | | BoxPat | ||
501 | | BindPat | ||
502 | | PlaceholderPat | ||
503 | | DotDotPat | ||
504 | | PathPat | ||
505 | | RecordPat | ||
506 | | TupleStructPat | ||
507 | | TuplePat | ||
508 | | SlicePat | ||
509 | | RangePat | ||
510 | | LiteralPat | ||
511 | | MacroPat | ||
512 | |||
513 | Expr = | ||
514 | TupleExpr | ||
515 | | ArrayExpr | ||
516 | | ParenExpr | ||
517 | | PathExpr | ||
518 | | LambdaExpr | ||
519 | | IfExpr | ||
520 | | LoopExpr | ||
521 | | ForExpr | ||
522 | | WhileExpr | ||
523 | | ContinueExpr | ||
524 | | BreakExpr | ||
525 | | Label | ||
526 | | BlockExpr | ||
527 | | ReturnExpr | ||
528 | | MatchExpr | ||
529 | | RecordExpr | ||
530 | | CallExpr | ||
531 | | IndexExpr | ||
532 | | MethodCallExpr | ||
533 | | FieldExpr | ||
534 | | AwaitExpr | ||
535 | | TryExpr | ||
536 | | EffectExpr | ||
537 | | CastExpr | ||
538 | | RefExpr | ||
539 | | PrefixExpr | ||
540 | | RangeExpr | ||
541 | | BinExpr | ||
542 | | Literal | ||
543 | | MacroCall | ||
544 | | BoxExpr | ||