-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathgrammar.txt
More file actions
executable file
·75 lines (54 loc) · 1.37 KB
/
grammar.txt
File metadata and controls
executable file
·75 lines (54 loc) · 1.37 KB
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
Prog -> FuncDef+
FuncDef -> Type FuncId ( VarDecl* ) Seq
Type -> bool | int
FuncId -> Id | operator BinaryOp
VarDecl -> Type Id
Seq -> { Stmt* }
Stmt -> Id = Exp ;
| Id ( Args ) ;
| VarDecl ;
| Seq
| return Exp ;
| if ( Exp ) Stmt
| if ( Exp ) Stmt else Stmt
| while ( Exp ) Stmt
Args -> Exp
| Exp , Args
----------------------------------------------------------------------
Exp -> true | false
| Num
| Id
| Id ( Args )
| ( Exp )
| UnaryOp Exp
| Exp BinaryOp Exp
UnaryOp -> - | !
BinaryOp -> * | / | %
| + | -
| < | <= | > | >=
| == | !=
----------------------------------------------------------------------
// Alternative: precedence climbing
PrimaryExp -> true | false
| Num
| Id
| Id ( Args )
| ( Exp )
UnaryOp -> - | + | !
MulOp -> * | / | %
AddOp -> + | -
CmpOp -> < | <= | > | >=
EqOp -> == | !=
UnaryExp -> UnaryOp UnaryExp
| PrimaryExp
MulExp -> MulExp MulOp UnaryExp
| UnaryExp
AddExp -> AddExp AddOp MulExp
| MulExp
CmpExp -> CmpExp CmpOp AddExp
| AddExp
AndExp -> AndExp && CmpExp
| CmpExp
OrExp -> OrExp || AndExp
| AndExp
Exp -> OrExp