blob: 9f7fc59d6c9143bc5496a4cdca7c4acae3159677 (
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
# Syntax (old)
### Statements
```PEG
FlowControlStatement ← 'continue' ';' /
'break' ';' /
'return' Expression? ';'
AssignmentStatement ← AssignmentStatementBody ';'
AssignmentStatementBody ← AssignmentTargetExpression '=' Expression /
AssignmentTargetExpression '+=' Expression /
AssignmentTargetExpression '-=' Expression /
AssignmentTargetExpression '*=' Expression /
AssignmentTargetExpression '/=' Expression /
AssignmentTargetExpression '%=' Expression /
AssignmentTargetExpression '&=' Expression /
AssignmentTargetExpression '^=' Expression /
AssignmentTargetExpression '|=' Expression /
AssignmentTargetExpression '++' /
AssignmentTargetExpression '--'
ExpressionStatement ← Expression ';'
```
### Types
```PEG
Type ← 'const' BasicType /
BasicType '*' /
BasicType '[' Expression ']' /
BasicType 'function' '(' (BasicType ',')* ')' /
BasicType
BasicType ← 'void' /
IntegerType /
'signed' IntegerType /
'unsigned' IntegerType /
'float' /
'double' /
'bool' /
'struct' identifier /
'enum' identifier /
'typedef' identifier /
'(' Type ')'
IntegerType ← 'char' /
'short' /
'int' /
'long'
```
### 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
```
|