Prctice Question On DAG
Prctice Question On DAG
Prctice Question On DAG
Problem-01:
Generate three address code for the following code-
c=0
do
{
if (a < b) then
x++;
else
x–;
c++;
} while (c < 5)
Solution-
Three address code for the given code is-
1. c = 0
2. if (a < b) goto (4)
3. goto (7)
4. T1 = x + 1
5. x = T1
6. goto (9)
7. T2 = x – 1
8. x = T2
9. T3 = c + 1
10. c = T3
11. if (c < 5) goto (2)
12.
Problem-02:
Generate three address code for the following code-
while (A < C and B > D) do
if A = 1 then C = C + 1
else
while A <= D
do A = A + B
Solution-
Three address code for the given code is-
1. if (A < C) goto (3)
2. goto (15)
3. if (B > D) goto (5)
4. goto (15)
5. if (A = 1) goto (7)
6. goto (10)
7. T1 = c + 1
8. c = T1
9. goto (1)
10. if (A <= D) goto (12)
11. goto (1)
12. T2 = A + B
13. A = T2
14. goto (10)
15.
Problem-03:
Generate three address code for the following code-
switch (ch)
{
case 1 : c = a + b;
break;
case 2 : c = a – b;
break;
}
Solution-
Three address code for the given code is-
if ch = 1 goto L1
if ch = 2 goto L2
L1:
T1 = a + b
c = T1
goto Last
L2:
T1 = a – b
c = T2
goto Last
Last:
Problem-04:
Construct a DAG for the following three address code-
1. a=b+c
2. t1 = a x a
3. b = t1 + a
4. c = t1 x b
5. t2 = c + b
6. a = t2 + t2
Solution-
Directed acyclic graph for the given three address code is-
Problem-05:
Consider the following code-
prod = 0 ;
i=1;
do
{
prod = prod + a[ i ] x b[ i ] ;
i=i+1;
} while (i <= 10) ;
1. Compute the three address code.
2. Compute the basic blocks and draw the flow graph.
Solution-
Part-01:
Three address code for the given code is-
prod = 0
i=1
T1 = 4 x i
T2 = a[T1]
T3 = 4 x i
T4 = b[T3]
T5 = T2 x T4
T6 = T5 + prod
prod = T6
T7 = i + 1
i = T7
if (i <= 10) goto (3)
Part-02:
Step-01:
We identify the leader statements as-
prod = 0 is a leader because first statement is a leader.
T1 = 4 x i is a leader because target of conditional or unconditional goto is a
leader.
Step-02:
The above generated three address code can be partitioned into 2 basic blocks as-
Step-03:
The flow graph is-
To gain better understanding about these Miscellaneous Problems,
Watch this Video Lecture
Download Handwritten Notes Here-
Implementation-
The commonly used representations for implementing Three Address Code are-
1. Quadruples
2. Triples
3. Indirect Triples
1. Quadruples-
In quadruples representation, each instruction is splitted into the following 4 different
fields-
op, arg1, arg2, result
Here-
The op field is used for storing the internal code of the operator.
The arg1 and arg2 fields are used for storing the two operands used.
The result field is used for storing the result of the expression.
Exceptions
There are following exceptions-
Exception-01:
To represent the statement x = op y, we place-
op in the operator field
y in the arg1 field
x in the result field
arg2 field remains unused
Exception-02:
To represent the statement like param t1, we place-
param in the operator field
t1 in the arg1 field
Neither arg2 field nor result field is used
Exception-03:
To represent the unconditional and conditional jump statements, we place label of the target in the result
field.
2. Triples-
In triples representation,
References to the instructions are made.
Temporary variables are not used.
3. Indirect Triples-
This representation is an enhancement over triples representation.
It uses an additional instruction array to list the pointers to the triples in the
desired order.
Thus, instead of position, pointers are used to store the results.
It allows the optimizers to easily re-position the sub-expression for producing
the optimized code.
PRACTICE PROBLEMS BASED ON QUADRUPLES, TRIPLES &
INDIRECT TRIPLES-
Problem-01:
Translate the following expression to quadruple, triple and indirect triple-
a+bxc/e↑f+bxc
Solution-
Three Address Code for the given expression is-
T1 = e ↑ f
T2 = b x c
T3 = T2 / T1
T4 = b x a
T5 = a + T3
T6 = T5 + T4
Now, we write the required representations-
Quadruple Representation-
(0) ↑ e f T1
(1) x b c T2
(2) / T2 T1 T3
(3) x b a T4
(4) + a T3 T5
(5) + T5 T4 T6
Triple Representation-
(0) ↑ e f
(1) x b c
(3) x b a
(4) + a (2)
Statement
35 (0)
36 (1)
37 (2)
38 (3)
39 (4)
40 (5)
(0) ↑ e f
(1) x b e
(3) x b a
(4) + a (2)
Problem-02:
Translate the following expression to quadruple, triple and indirect triple-
a=bx–c+bx–c
Solution-
Three Address Code for the given expression is-
T1 = uminus c
T2 = b x T1
T3 = uminus c
T4 = b x T3
T5 = T2 + T4
a = T5
Now, we write the required representations-
Quadruple Representation-
(1) uminus c T1
(2) x b T1 T2
(3) uminus c T3
(4) x b T3 T4
(5) + T2 T4 T5
(6) = T5 a
Triple Representation-
Location Op Arg1 Arg2
(1) uminus c
(2) x b (1)
(3) uminus c
(4) x b (3)
(6) = a (5)
Statement
35 (1)
36 (2)
37 (3)
38 (4)
39 (5)
40 (6)
Location Op Arg1 Arg2
(1) uminus c
(2) x b (1)
(3) uminus c
(4) x b (3)
(6) = a (5)
To gain better understanding about Quadruples, Triples and Indirect Triples,
Watch this Video Lecture
Next Article- Basic Blocks and Flow Graphs
Get more notes and other study material of Compiler Design.
Watch video lectures by visiting our YouTube channel LearnVidFun.
General Form-
a = b op c
Here,
Examples-
a = b + c
c = a x b
1. Assignment Statement-
x = y op z and x = op y
Here,
It assigns the result obtained after solving the right side expression of the assignment operator to
the left side operand.
2. Copy Statement-
x=y
Here,
3. Conditional Jump-
If x relop y goto X
Here,
4. Unconditional Jump-
goto X
5. Procedure Call-
Problem-01:
a=b+c+d
Solution-
(1) T1 = b + c
(2) T2 = T1 + d
(3) a = T2
Problem-02:
-(a x b) + (c + d) – (a + b + c + d)
Solution-
(1) T1 = a x b
(2) T2 = uminus T1
(3) T3 = c + d
(4) T4 = T2 + T3
(5) T5 = a + b
(6) T6 = T3 + T5
(7) T7 = T4 – T6
Problem-03:
Solution-
(2) T1 = 0
(4) T1 = 1
(5)
Problem-04:
Solution-
(4) t = 0
(6) t = 1
(7)