blob: d172254dcd429ab206616b3af11b767f8fb787e2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
Formal grammar definition for Sloth.
```
program → statement* ;
block → "{" statement* "}"
statement → exprStmt
| valStmt
| varStmt
| returnStmt
| printStmt
| functionStmt
| ifStmt
| forStmt ;
exprStmt → expression ";" ;
valStmt → "val" IDENTIFIER "=" expression ";" ;
varStmt → "var" IDENTIFIER "=" expression ";" ;
returnStmt → "return" expression ";" ;
printStmt → "print" expression ";" ;
functionStmt → "fn" IDENTIFIER "(" (IDENTIFIER ":" IDENTIFIER)* ")" block ;
ifStmt → "if" expression block ;
forStmt → "for" IDENTIFIER "in" expression ".." expression block ;
expression → logical_or ;
logical_or → logical_and ( "||" logical_and )* ;
logical_and → equality ( "&&" equality )* ;
equality → comparison ( ( "!=" | "==" ) comparison )* ;
comparison → bitwise_shift ( ( "<" | ">" | "<=" | ">=" ) bitwise_shift )* ;
bitwise_shifting → additive ( ( "<<" | ">>" ) additive )* ;
additive → multiplicative ( ( "+" | "-" ) multiplicative )* ;
multiplicative → unary ( ( "*" | "/" | "%" ) unary )* ;
unary → ( "!" | "+" | "-" ) unary | call ;
call → primary ( "(" arguments? ")" )* ;
primary → "true" | "false" | NUMBER | STRING | IDENTIFIER | "(" expression ")" ;
```
|