Bottom-up evaluation of S

advertisement
Compiler Designs and
Constructions
Chapter 9: Translation
Objectives:
Translation
Method
Three Address Code
Dr. Mohsen Chitsaz
Chapter 9: Translation
1
Bottom-up evaluation of S-attributed:
Definitions:
 Syntax-directed definition with only
synthesized attributes is called S-attributed
 Use LR Parser
Implementation:
 Stack to hold info about subtrees that have
been parsed
Chapter 9: Translation
2

Example:
A.a:= F(X.x, Y.y, Z.z) for production
A ---> XYZ
State
Value
X
X.x
Y
Y.y
Z
Z.z
<--- Top
After
Parse
===>
A
A.a
Value of Symbol Table
Pointer to a State in LR(1) Parse
Table
Chapter 9: Translation
3

Example:
Production
Semantic Values (Code)
L ---> E$
Print (Val[Top])
E ---> E + T
Val[nTop]:= Val[Top – 2] + Val[Top]
E ---> T
T ---> T * F
Val[nTop]:= Val[Top – 2] * Val[Top]
T ---> F
F ---> (E)
Val[nTop]:=Val[Top – 1]
F ---> digit
Chapter 9: Translation
4
Cont.

Using LR Parser: Parse 3 * 5 + 4 $
T.Val
+
=
E.Val
<--- Top
Top – 1
Top - 2
E.Val
Chapter 9: Translation
<--- nTop
5
Input
Stack
Attribute
3*5+4$
-
-
*5+4$
3
3
*5+4$
F
3
F ---> digit
*5+4$
T
3
T ---> F
T*
3
+4$
T*5
3 * 5
+4$
T*F
3 *5
F - digit
+4$
T
15
T ---> T * F
+4$
E
15
E ---> T
E+
15
$
E+4
15 + 4
$
E+F
15 + 4
F ---> digit
$
E+T
15 4
T ---> F
$
E
19
E ---> E + T
E
19
L
19
5+4$
4$
Production Used
L ---> E $
Chapter 9: Translation
6

Parse 3 * 5 + 4 $
L
E
+
E
T
T
F
3
*
$
T
Show Stack
F
F
4
5
Chapter 9: Translation
7
Intermediate Code Generation:
Type of intermediate code generation:
1. Graphical Representation

a := b * c + b * c
Syntax Tree
:=
+
a
*
*
b
c
b
Chapter 9: Translation
c
8

Dag
:=
+
a
*
b
Chapter 9: Translation
c
9
Advantages?
 Disadvantages?

Chapter 9: Translation
10
Representation of Syntax Tree:
a:=
+
id a
*
id b
id c
*
<--- b * c
id b
id c
Chapter 9: Translation
11
b. Using array
0
id
1
id
b
c
2
3
4
5
6
7
8
0
b
c
3
2
a
7
*
id
id
*
+
id
:=
1
b*c
4
5
b*c
6
Chapter 9: Translation
12
2.
Postfix notation
( a:= ((b * c) + (b * c)))
a b c * b c * + :=
Advantages/Disadvantages?
-
No need for ()
No need for Temp
Use Run-Time Stack
Easy to reconstruct Parse Tree
Chapter 9: Translation
13
Three Address Code:
3.
Three address Code:
General Form
X := A op B
X, A, B are Const, Name, or Temp
Example:
a := b * c + d
T0 := b * c
T1 := T0 + d
a := T1
Chapter 9: Translation
14
Three Address Code:
Advantages?
 Disadvantages?

Chapter 9: Translation
15
Three Address Code:

Assignment
Operand:= Operand1 op Operand2

Unary Operation
Operand:= Op Operand1

Copy Statement
Operand:= Operand1

Procedure/Function Call
Parm A,B
Call P,n
Chapter 9: Translation
16
Three Address Code

Indexed Assignment
Operand[I]:= B

Pointer
A:= Address B

Unconditional Jump
GOTO L

Conditional Jump
If A RelOp B GOTO L
Chapter 9: Translation
17
Types of Three Address Codes:
1.
Quadruples (Quad/Three Address Code)
Record structure with 4 fields
Arg1, Arg3, op, Result
Example: a:= -b+c*d
Chapter 9: Translation
18
Quadruples:
op
Arg1
Arg2
Result
0
U_Minus
b
1
*
c
d
T2
2
+
T1
T2
T3
3
:=
T3
T1
a
4
Code:
U_Minus
Mul
Add
Assign
b
c
T1
T3
d
T2
a
Chapter 9: Translation
T1
T2
T3
19
Types of Three Address Codes:
2.
Triples: (3 – Tuples/Triplest)
Record with 3 fields
Arg1, Arg2, op
Example: a := -b + c * d
op
Arg1
Arg2
(0)
U_Minus
b
(1)
*
c
d
(2)
+
(0)
(1)
(3)
:=
(2)
a
Chapter 9: Translation
20
Triples:

Arg1, Arg2 are either a pointer to Symbol
Table (Name, Constant) or a pointer to
Triple Structure


This is a Two Address Instruction
Most Assembly Languages are made up of
Triples
Chapter 9: Translation
21
3.
Indirect Tuples:
We use pointers to Triples
Example: a:= -b + c * d
Triple Address
op
Arg1
Arg2
0
14

14
U_Minus
b
1
15

15
*
c
d
2
16

16
+
(14)
(15)
3
17

17
:=
(15)
a
Chapter 9: Translation
22
Indirect Tuples:
Save Space: Why?
 Not good for optimizing code: Why?
 Not good for memory assignment prior
to code generation

Chapter 9: Translation
23
Download