Three Address Code-
Before you go through this article, make sure that you have gone through the previous article on Three Address Code.
We have discussed-
- Three Address Code is a form of an intermediate code.
- It is generated by the compiler for implementing Code Optimization.
- It uses maximum three addresses to represent any statement.
In this article, we will discuss Implementation of Three Address Code.
Implementation-
Three Address Code is implemented as a record with the address fields. |
The commonly used representations for implementing Three Address Code are-
- Quadruples
- Triples
- 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-
Exception-02:
To represent the statement like param t1, we place-
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 + b x c / e ↑ f + b x c
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-
Location | Op | Arg1 | Arg2 | Result |
(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-
Location | Op | Arg1 | Arg2 |
(0) | ↑ | e | f |
(1) | x | b | c |
(2) | / | (1) | (0) |
(3) | x | b | a |
(4) | + | a | (2) |
(5) | + | (4) | (3) |
Indirect Triple Representation-
Statement | |
35 | (0) |
36 | (1) |
37 | (2) |
38 | (3) |
39 | (4) |
40 | (5) |
Location | Op | Arg1 | Arg2 |
(0) | ↑ | e | f |
(1) | x | b | e |
(2) | / | (1) | (0) |
(3) | x | b | a |
(4) | + | a | (2) |
(5) | + | (4) | (3) |
Problem-02:
Translate the following expression to quadruple, triple and indirect triple-
a = b x – c + b x – 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-
Location | Op | Arg1 | Arg2 | Result |
(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) |
(5) | + | (2) | (4) |
(6) | = | a | (5) |
Indirect Triple Representation-
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) |
(5) | + | (2) | (4) |
(6) | = | a | (5) |
To gain better understanding about Quadruples, Triples and Indirect Triples,
Download Handwritten Notes Here-
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.