0% found this document useful (0 votes)
21 views18 pages

7 - Lecture07 - Semantic Analysis, Exercise

The document discusses compiler design focusing on semantic analysis and symbol table management in Pascal code. It poses questions regarding the detection of errors during compilation and the state of the symbol table and scope stack at specific lines of code. The answers detail the processes of lexical, syntax, and semantic analysis, as well as the structure of the symbol table during compilation.

Uploaded by

naimu767
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views18 pages

7 - Lecture07 - Semantic Analysis, Exercise

The document discusses compiler design focusing on semantic analysis and symbol table management in Pascal code. It poses questions regarding the detection of errors during compilation and the state of the symbol table and scope stack at specific lines of code. The answers detail the processes of lexical, syntax, and semantic analysis, as well as the structure of the symbol table during compilation.

Uploaded by

naimu767
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

40-414 Compiler Design

Semantic Analysis
&
Symbol Table Management

Lecture 7

Exercise

1
Question?

Which one of the


type a = array[1..10] of integer;
modules detects the
var i : integer; b : a;
error in the given
i : = 11;
Pascal piece of code,
b[i] = 25;
and when?

Lexical Analysis Syntax Analysis


in Compile time in Compile time

Semantic Analysis Generated Code


in Compile time in Runtime

2
Answer!

Which one of the


type a = array[1..10] of integer;
modules detects the
var i : integer; b : a;
error in the given
i : = 11;
Pascal piece of code,
b[i] = 25;
and when?

Lexical Analysis Syntax Analysis


in Compile time in Compile time

Semantic Analysis Generated Code


in Compile time in Runtime

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

You might also like