Repository navigation
Expand file tree
/
Copy paths4.g4
More file actions
125 lines (97 loc) · 1.61 KB
/
Copy paths4.g4
File metadata and controls
125 lines (97 loc) · 1.61 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
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
118
119
120
121
122
123
124
// step 6,7,8
grammar MiniDecaf;
import CommonLex;
prog
: func EOF
;
func
: ty 'main' '(' ')' block
;
ty
: 'int' # intType
;
stmt
: 'return' expr ';' # returnStmt
| expr ';' # exprStmt
| ';' # nullStmt
| 'if' '(' expr ')' th=stmt ('else' el=stmt)? # IfStmt
| block # blockStmt
| 'for' '(' init=decl ';' ctrl=expr? ';' post=expr? ')' stmt # forDeclStmt
| 'for' '(' init=expr? ';' ctrl=expr? ';' post=expr? ')' stmt # forStmt
| 'while' '(' expr ')' stmt # whileStmt
| 'do' stmt 'while' '(' expr ')' ';' # doWhileStmt
| 'break' ';' # breakStmt
| 'continue' ';' # continueStmt
;
expr
: asgn
;
decl
: ty Ident ('=' expr)?
;
blockItem
: stmt # blockItemStmt
| decl ';' # blockItemDecl
;
block
: '{' blockItem* '}'
;
asgn
: cond # tAsgn
| unary asgnOp asgn # cAsgn
;
cond
: lor # tCond
| lor '?' expr ':' cond # cCond
;
lor
: land # tLor
| lor '||' land # cLor
;
land
: eq # tLand
| land '&&' eq # cLand
;
eq
: rel # tEq
| eq eqOp rel # cEq
;
rel
: add # tRel
| rel relOp add # cRel
;
add
: mul # tAdd
| add addOp mul # cAdd
;
mul
: unary # tMul
| mul mulOp unary # cMul
;
unary
: atom # tUnary
| unaryOp unary # cUnary
;
atom
: Integer # atomInteger
| Ident # atomIdent
| '(' expr ')' # atomParen
;
unaryOp
: '-' | '!' | '~'
;
addOp
: '+' | '-'
;
mulOp
: '*' | '/' | '%'
;
<
3897
div>
relOp
: '<' | '>' | '<=' | '>='
;
eqOp
: '==' | '!='
;
asgnOp
: '='
;