@@ -463,7 +463,15 @@ expr_stmt : expr ';' ;
463
463
464
464
## Expressions
465
465
466
- ** FIXME:** grammar?
466
+ ``` antlr
467
+ expr : literal | path | tuple_expr | unit_expr | struct_expr
468
+ | block_expr | method_call_expr | field_expr | array_expr
469
+ | idx_expr | range_expr | unop_expr | binop_expr
470
+ | paren_expr | call_expr | lambda_expr | while_expr
471
+ | loop_expr | break_expr | continue_expr | for_expr
472
+ | if_expr | match_expr | if_let_expr | while_let_expr
473
+ | return_expr ;
474
+ ```
467
475
468
476
#### Lvalues, rvalues and temporaries
469
477
@@ -475,19 +483,23 @@ expr_stmt : expr ';' ;
475
483
476
484
### Literal expressions
477
485
478
- ** FIXME: ** grammar?
486
+ See [ Literals ] ( #literals ) .
479
487
480
488
### Path expressions
481
489
482
- ** FIXME: ** grammar?
490
+ See [ Paths ] ( #paths ) .
483
491
484
492
### Tuple expressions
485
493
486
- ** FIXME:** grammar?
494
+ ``` antlr
495
+ tuple_expr : '(' [ expr [ ',' expr ] * | expr ',' ] ? ')' ;
496
+ ```
487
497
488
498
### Unit expressions
489
499
490
- ** FIXME:** grammar?
500
+ ``` antlr
501
+ unit_expr : "()" ;
502
+ ```
491
503
492
504
### Structure expressions
493
505
@@ -545,41 +557,60 @@ range_expr : expr ".." expr |
545
557
546
558
### Unary operator expressions
547
559
548
- ** FIXME:** grammar?
560
+ ``` antlr
561
+ unop_expr : unop expr ;
562
+ unop : '-' | '*' | '!' ;
563
+ ```
549
564
550
565
### Binary operator expressions
551
566
552
567
``` antlr
553
- binop_expr : expr binop expr ;
568
+ binop_expr : expr binop expr | type_cast_expr
569
+ | assignment_expr | compound_assignment_expr ;
570
+ binop : arith_op | bitwise_op | lazy_bool_op | comp_op
554
571
```
555
572
556
573
#### Arithmetic operators
557
574
558
- ** FIXME:** grammar?
575
+ ``` antlr
576
+ arith_op : '+' | '-' | '*' | '/' | '%' ;
577
+ ```
559
578
560
579
#### Bitwise operators
561
580
562
- ** FIXME:** grammar?
581
+ ``` antlr
582
+ bitwise_op : '&' | '|' | '^' | "<<" | ">>" ;
583
+ ```
563
584
564
585
#### Lazy boolean operators
565
586
566
- ** FIXME:** grammar?
587
+ ``` antlr
588
+ lazy_bool_op : "&&" | "||" ;
589
+ ```
567
590
568
591
#### Comparison operators
569
592
570
- ** FIXME:** grammar?
593
+ ``` antlr
594
+ comp_op : "==" | "!=" | '<' | '>' | "<=" | ">=" ;
595
+ ```
571
596
572
597
#### Type cast expressions
573
598
574
- ** FIXME:** grammar?
599
+ ``` antlr
600
+ type_cast_expr : value "as" type ;
601
+ ```
575
602
576
603
#### Assignment expressions
577
604
578
- ** FIXME:** grammar?
605
+ ``` antlr
606
+ assignment_expr : expr '=' expr ;
607
+ ```
579
608
580
609
#### Compound assignment expressions
581
610
582
- ** FIXME:** grammar?
611
+ ``` antlr
612
+ compound_assignment_expr : expr [ arith_op | bitwise_op ] '=' expr ;
613
+ ```
583
614
584
615
#### Operator precedence
585
616
0 commit comments