Skip to content

Commit e607d76

Browse files
committed
Fill in more parts of the grammar for Expressions
1 parent ab913c8 commit e607d76

File tree

1 file changed

+45
-14
lines changed

1 file changed

+45
-14
lines changed

src/doc/grammar.md

Lines changed: 45 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,15 @@ expr_stmt : expr ';' ;
463463

464464
## Expressions
465465

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+
```
467475

468476
#### Lvalues, rvalues and temporaries
469477

@@ -475,19 +483,23 @@ expr_stmt : expr ';' ;
475483

476484
### Literal expressions
477485

478-
**FIXME:** grammar?
486+
See [Literals](#literals).
479487

480488
### Path expressions
481489

482-
**FIXME:** grammar?
490+
See [Paths](#paths).
483491

484492
### Tuple expressions
485493

486-
**FIXME:** grammar?
494+
```antlr
495+
tuple_expr : '(' [ expr [ ',' expr ] * | expr ',' ] ? ')' ;
496+
```
487497

488498
### Unit expressions
489499

490-
**FIXME:** grammar?
500+
```antlr
501+
unit_expr : "()" ;
502+
```
491503

492504
### Structure expressions
493505

@@ -545,41 +557,60 @@ range_expr : expr ".." expr |
545557

546558
### Unary operator expressions
547559

548-
**FIXME:** grammar?
560+
```antlr
561+
unop_expr : unop expr ;
562+
unop : '-' | '*' | '!' ;
563+
```
549564

550565
### Binary operator expressions
551566

552567
```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
554571
```
555572

556573
#### Arithmetic operators
557574

558-
**FIXME:** grammar?
575+
```antlr
576+
arith_op : '+' | '-' | '*' | '/' | '%' ;
577+
```
559578

560579
#### Bitwise operators
561580

562-
**FIXME:** grammar?
581+
```antlr
582+
bitwise_op : '&' | '|' | '^' | "<<" | ">>" ;
583+
```
563584

564585
#### Lazy boolean operators
565586

566-
**FIXME:** grammar?
587+
```antlr
588+
lazy_bool_op : "&&" | "||" ;
589+
```
567590

568591
#### Comparison operators
569592

570-
**FIXME:** grammar?
593+
```antlr
594+
comp_op : "==" | "!=" | '<' | '>' | "<=" | ">=" ;
595+
```
571596

572597
#### Type cast expressions
573598

574-
**FIXME:** grammar?
599+
```antlr
600+
type_cast_expr : value "as" type ;
601+
```
575602

576603
#### Assignment expressions
577604

578-
**FIXME:** grammar?
605+
```antlr
606+
assignment_expr : expr '=' expr ;
607+
```
579608

580609
#### Compound assignment expressions
581610

582-
**FIXME:** grammar?
611+
```antlr
612+
compound_assignment_expr : expr [ arith_op | bitwise_op ] '=' expr ;
613+
```
583614

584615
#### Operator precedence
585616

0 commit comments

Comments
 (0)