-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsblang.grm
63 lines (50 loc) · 975 Bytes
/
sblang.grm
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
Program:
Statements [eof]
;
Statements:
(Statement [semi])*
| [semi]
;
Statement:
AssignmentStatement
| IfStatement
| WhileStatement
| PrintStatement
| BlockStatement
;
AssignmentStatement:
[id] [assign] Expression
;
PrintStatement:
[k_print] Expression
;
IfStatement:
[k_if] [lpar] Expression [rpar] Statement
;
WhileStatement:
[k_while] [lpar] Expression [rpar] Statement
;
BlockStatement:
[lbrace] Statements [rbrace]
;
Expression:
RelationalExpression
;
RelationalExpression:
AdditiveExpression ( ([lt] | [gt] | [eq]) AdditiveExpression )*
;
AdditiveExpression:
MultiplicativeExpression ( ([add] | [sub]) MultiplicativeExpression )*
;
MultiplicativeExpression:
PrimaryExpression ( ([mul] | [div]) PrimaryExpression )*
;
PrimaryExpression:
Literal
| [id]
| [lpar] Expression [rpar]
;
Literal:
[number]
| [string]
;