7 - Lecture07 - Semantic Analysis, Exercise
7 - Lecture07 - Semantic Analysis, Exercise
Semantic Analysis
&
Symbol Table Management
Lecture 7
Exercise
1
Question?
2
Answer!
3
Question?
What is the state of symbol table and scope stack at the time of
compiling lines 7 and 13?
1 Program S()
2 Var a[1..5], c, real
3 Procedure R(m: integer)
4 Var b[1..5] integer
5 Procedure E()
6 Var I, c[1..3] integer
7 c(3) := a (2) + b (1)
8 End E
9 Function Q(n: integer): integer
10 Var a integer
11 Procedure P()
12 Var b real
13 b := a + c
14 End P
15 End Q
16 End R 4
17 End S
Answer!
Scope
stack 1 Program S()
2 Var a[1..5], c, real
3 Procedure R(m: integer)
4 Var b[1..5] integer
5 Procedure E()
6 Var I, c[1..3] integer
Lexe- proc/ No. type scope 7 c(3) := a (2) + b (1)
me func/ Arg/ 8 End E
var Cell
9 Function Q(n: integer): integer
0
10 Var a integer
1 11 Procedure P()
2 12 Var b real
3 13 b := a + c
4 14 End P
5
15 End Q
16 End R
6
17End S
7
8
9
10
11 5
Answer! (Cont.)
Scope
stack 1 Program S()
2 Var a[1..5], c, real
3 Procedure R(m: integer)
4 Var b[1..5] integer
0 5 Procedure E()
6 Var I, c[1..3] integer
Lexe- proc/ No. type scope 7 c(3) := a (2) + b (1)
me func/ Arg/ 8 End E
var Cell
9 Function Q(n: integer): integer
0 S proc 0 - 1
10 Var a integer
1 a array 5 real 1 11 Procedure P()
2 c var 0 real 1 12 Var b real
3 13 b := a + c
4 14 End P
5
15 End Q
16 End R
6
17End S
7
8
9
10
11 6
Answer! (Cont.)
Scope
stack 1 Program S()
2 Var a[1..5], c, real
3 Procedure R(m: integer)
4 Var b[1..5] integer
0 5 Procedure E()
6 Var I, c[1..3] integer
Lexe- proc/ No. type scope 7 c(3) := a (2) + b (1)
me func/ Arg/ 8 End E
var Cell
9 Function Q(n: integer): integer
0 S proc 0 - 1
10 Var a integer
1 a array 5 real 1 11 Procedure P()
2 c var 0 real 1 12 Var b real
3 R proc 0 - 1 13 b := a + c
4 14 End P
5
15 End Q
16 End R
6
17End S
7
8
9
10
11 7
Answer! (Cont.)
Scope
stack 1 Program S()
2 Var a[1..5], c, real
3 Procedure R(m: integer)
4 4 Var b[1..5] integer
0 5 Procedure E()
6 Var I, c[1..3] integer
Lexe- proc/ No. type scope 7 c(3) := a (2) + b (1)
me func/ Arg/ 8 End E
var Cell
9 Function Q(n: integer): integer
0 S proc 0 - 1
10 Var a integer
1 a array 5 real 1 11 Procedure P()
2 c var 0 real 1 12 Var b real
3 R proc 0 - 1 13 b := a + c
4 m param 0 int 2 14 End P
5 b array 5 int 2
15 End Q
16 End R
6
17End S
7
8
9
10
11 8
Answer! (Cont.)
Scope
stack 1 Program S()
2 Var a[1..5], c, real
3 Procedure R(m: integer)
4 4 Var b[1..5] integer
0 5 Procedure E()
6 Var I, c[1..3] integer
Lexe- proc/ No. type scope 7 c(3) := a (2) + b (1)
me func/ Arg/ 8 End E
var Cell
9 Function Q(n: integer): integer
0 S proc 0 - 1
10 Var a integer
1 a array 5 real 1 11 Procedure P()
2 c var 0 real 1 12 Var b real
3 R proc 0 - 1 13 b := a + c
4 m param 0 int 2 14 End P
5 b array 5 int 2
15 End Q
16 End R
6 E proc 0 - 2
17End S
7
8
9
10
11 9
Answer! (Cont.)
Scope
stack 1 Program S()
2 Var a[1..5], c, real
7 3 Procedure R(m: integer)
4 4 Var b[1..5] integer
0 5 Procedure E()
6 Var I, c[1..3] integer
Lexe- proc/ No. type scope 7 c(3) := a (2) + b (1)
me func/ Arg/ 8 End E
var Cell
9 Function Q(n: integer): integer
0 S proc 0 - 1
10 Var a integer
1 a array 5 real 1 11 Procedure P()
2 c var 0 real 1 12 Var b real
3 R proc 0 - 1 13 b := a + c
4 m param 0 int 2 14 End P
5 b array 5 int 2
15 End Q
16 End R
6 E proc 0 - 2
17End S
7 I var 0 int 3
8 c array 3 int 3
9
10
11 10
Answer! (Cont.)
Scope
stack 1 Program S()
2 Var a[1..5], c, real
3 Procedure R(m: integer)
4 4 Var b[1..5] integer
0 5 Procedure E()
6 Var I, c[1..3] integer
Lexe- proc/ No. type scope 7 c(3) := a (2) + b (1)
me func/ Arg/ 8 End E
var Cell
9 Function Q(n: integer): integer
0 S proc 0 - 1
10 Var a integer
1 a array 5 real 1 11 Procedure P()
2 c var 0 real 1 12 Var b real
3 R proc 0 - 1 13 b := a + c
4 m param 0 int 2 14 End P
5 b array 5 int 2
15 End Q
16 End R
6 E proc 0 - 2
17End S
7 Q func 2
8
9
10
11 11
Answer! (Cont.)
Scope
stack 1 Program S()
2 Var a[1..5], c, real
8 3 Procedure R(m: integer)
4 4 Var b[1..5] integer
0 5 Procedure E()
6 Var I, c[1..3] integer
Lexe- proc/ No. type scope 7 c(3) := a (2) + b (1)
me func/ Arg/ 8 End E
var Cell
9 Function Q(n: integer): integer
0 S proc 0 - 1
10 Var a integer
1 a array 5 real 1 11 Procedure P()
2 c var 0 real 1 12 Var b real
3 R proc 0 - 1 13 b := a + c
4 m param 0 int 2 14 End P
5 b array 5 int 2
15 End Q
16 End R
6 E proc 0 - 2
17End S
7 Q func 1 int 2
8 n param 0 int 3
9
10
11 12
Answer! (Cont.)
Scope
stack 1 Program S()
2 Var a[1..5], c, real
8 3 Procedure R(m: integer)
4 4 Var b[1..5] integer
0 5 Procedure E()
6 Var I, c[1..3] integer
Lexe- proc/ No. type scope 7 c(3) := a (2) + b (1)
me func/ Arg/ 8 End E
var Cell
9 Function Q(n: integer): integer
0 S proc 0 - 1
10 Var a integer
1 a array 5 real 1 11 Procedure P()
2 c var 0 real 1 12 Var b real
3 R proc 0 - 1 13 b := a + c
4 m param 0 int 2 14 End P
5 b array 5 int 2
15 End Q
16 End R
6 E proc 0 - 2
17End S
7 Q func 1 int 2
8 n param 0 int 3
9 a var 0 int 3
10 P proc 0 - 3
11 13
Answer! (Cont.)
Scope
stack 1 Program S()
11 2 Var a[1..5], c, real
8 3 Procedure R(m: integer)
4 4 Var b[1..5] integer
0 5 Procedure E()
6 Var I, c[1..3] integer
Lexe- proc/ No. type scope 7 c(3) := a (2) + b (1)
me func/ Arg/ 8 End E
var Cell
9 Function Q(n: integer): integer
0 S proc 0 - 1
10 Var a integer
1 a array 5 real 1 11 Procedure P()
2 c var 0 real 1 12 Var b real
3 R proc 0 - 1 13 b := a + c
4 m param 0 int 2 14 End P
5 b array 5 int 2
15 End Q
16 End R
6 E proc 0 - 2
17End S
7 Q func 1 int 2
8 n param 0 int 3
9 a var 0 int 3
10 P proc 0 - 3
11 b var 0 real 4 14
Answer! (Cont.)
Scope
stack 1 Program S()
2 Var a[1..5], c, real
8 3 Procedure R(m: integer)
4 4 Var b[1..5] integer
0 5 Procedure E()
6 Var I, c[1..3] integer
Lexe- proc/ No. type scope 7 c(3) := a (2) + b (1)
me func/ Arg/ 8 End E
var Cell
9 Function Q(n: integer): integer
0 S proc 0 - 1
10 Var a integer
1 a array 5 real 1 11 Procedure P()
2 c var 0 real 1 12 Var b real
3 R proc 0 - 1 13 b := a + c
4 m param 0 int 2 14 End P
5 b array 5 int 2
15 End Q
16 End R
6 E proc 0 - 2
17End S
7 Q func 1 int 2
8 n param 0 int 3
9 a var 0 int 3
10 P proc 0 - 3
11 15
Answer! (Cont.)
Scope
stack 1 Program S()
2 Var a[1..5], c, real
3 Procedure R(m: integer)
4 4 Var b[1..5] integer
0 5 Procedure E()
6 Var I, c[1..3] integer
Lexe- proc/ No. type scope 7 c(3) := a (2) + b (1)
me func/ Arg/ 8 End E
var Cell
9 Function Q(n: integer): integer
0 S proc 0 - 1
10 Var a integer
1 a array 5 real 1 11 Procedure P()
2 c var 0 real 1 12 Var b real
3 R proc 0 - 1 13 b := a + c
4 m param 0 int 2 14 End P
5 b array 5 int 2
15 End Q
16 End R
6 E proc 0 - 2
17End S
7 Q func 1 int 2
8
9
10
11 16
Answer! (Cont.)
Scope
stack 1 Program S()
2 Var a[1..5], c, real
3 Procedure R(m: integer)
4 Var b[1..5] integer
0 5 Procedure E()
6 Var I, c[1..3] integer
Lexe- proc/ No. type scope 7 c(3) := a (2) + b (1)
me func/ Arg/ 8 End E
var Cell
9 Function Q(n: integer): integer
0 S proc 0 - 1
10 Var a integer
1 a array 5 real 1 11 Procedure P()
2 c var 0 real 1 12 Var b real
3 R proc 0 - 1 13 b := a + c
4 14 End P
5
15 End Q
16 End R
6
17End S
7
8
9
10
11 17
Answer! (Cont.)
Scope
stack 1 Program S()
2 Var a[1..5], c, real
3 Procedure R(m: integer)
4 Var b[1..5] integer
5 Procedure E()
6 Var I, c[1..3] integer
Lexe- proc/ No. type scope 7 c(3) := a (2) + b (1)
me func/ Arg/ 8 End E
var Cell
9 Function Q(n: integer): integer
0
10 Var a integer
1 11 Procedure P()
2 12 Var b real
3 13 b := a + c
4 14 End P
5
15 End Q
16 End R
6
17End S
7
8
9
10
11 18