aboutsummaryrefslogtreecommitdiff
path: root/syntax.md
blob: 083103c2d584a98adfbb25ba4d5af42320494fa5 (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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# Syntax (old)

### Statements

```PEG
ExpressionStatement      Expression ';'
```

### Expressions

```PEG
AssignmentTargetExpression  identifier ATEElementSuffix*
ATEElementSuffix            '[' Expression ']' /
                             '.' identifier /
                             '->' identifier

AtomicExpression            identifier /
                             constant /
                             string-literal /
                             '(' Expression ')'

ObjectExpression            AtomicExpression ObjectSuffix* /
                             ArrayLiteralExpression /
                             StructLiteralExpression
ObjectSuffix                '[' Expression ']' /
                             '(' CommasExpressionList? ')' /
                             '.' identifier /
                             '->' identifier
CommasExpressionList        Expression ',' CommasExpressionList? /
                             Expression ','?
ArrayLiteralExpression      '{' CommasExpressionList '}'
StructLiteralExpression     '{' StructLiteralBody '}'
StructLiteralBody           StructLiteralElement ',' StructLiteralBody? /
                             StructLiteralElement ','?
StructLiteralElement        '.' identifier '=' Expression

FactorExpression            '(' Type ')' FactorExpression /
                             '&' FactorExpression /
                             '*' FactorExpression /
                             '+' FactorExpression /
                             '-' FactorExpression /
                             '~' FactorExpression /
                             '!' FactorExpression /
                             'sizeof' FactorExpression /
                             'sizeof' Type /
                             ObjectExpression

TermExpression              FactorExpression TermSuffix*
TermSuffix                  '*' FactorExpression /
                             '/' FactorExpression /
                             '%' FactorExpression

ArithmeticExpression        TermExpression ArithmeticSuffix*
ArithmeticSuffix            '+' TermExpression /
                             '-' TermExpression

BitwiseOpExpression         ArithmeticExpression '<<' ArithmeticExpression /
                             ArithmeticExpression '>>' ArithmeticExpression /
                             ArithmeticExpression '^' ArithmeticExpression /
                             ArithmeticExpression ('&' ArithmeticExpression)+ /
                             ArithmeticExpression ('|' ArithmeticExpression)+ /
                             ArithmeticExpression

ComparisonExpression        BitwiseOpExpression '==' BitwiseOpExpression /
                             BitwiseOpExpression '!=' BitwiseOpExpression /
                             BitwiseOpExpression '<=' BitwiseOpExpression /
                             BitwiseOpExpression '>=' BitwiseOpExpression /
                             BitwiseOpExpression '<' BitwiseOpExpression /
                             BitwiseOpExpression '>' BitwiseOpExpression /
                             BitwiseOpExpression

Expression                  ComparisonExpression ('&&' ComparisonExpression)+ /
                             ComparisonExpression ('||' ComparisonExpression)+ /
                             ComparisonExpression
```