In general, the compiler cannot pay attention to issues that are not represented in the ir form of the code being compiled. For example, performing register allocation on one-address code is an oxymoron. For each of the following representations, consider what aspects of program
behavior and meaning are explicit and what aspects are implicit.
(a) abstract syntax tree
(b) static single assignment form
(c) one-address code
(d) two-address code
(e) three-address code
Show how the expression x - 2 × y might be translated into each form.
Show how the code fragment
might be represented in an abstract syntax tree and in a control-flow graph. Discuss the advantages of each representation. For what applications would one representation be preferable to the other?