Consider the syntax directed definition shown below.
$S \rightarrow \mathbf{ id :=} E$ |
$\{gen(\mathbf{ id}.place = E.place;);\}$ |
$E \rightarrow E_1 + E_2$ |
$\{t = newtemp();$ |
|
$gen(t = E_1.place + E_2.place;);$ |
|
$E.place = t;\}$ |
$E \rightarrow id$ |
$\{E.place = \mathbf{id}.place;\}$ |
Here, $gen$ is a function that generates the output code, and $newtemp$ is a function that returns the name of a new temporary variable on every call. Assume that ti's are the temporary variable names generated by $newtemp$. For the statement ‘$X : = Y + Z$’, the $3$-address code sequence generated by this definition is
- $X = Y + Z$
- $t_1 = Y+Z; X=t_1$
- $t_1 =Y; t_2=t_1 +Z; X=t_2$
- $t_1 =Y; t_2=Z; t_3=t_1+t_2; X=t_3$