TAC
can range from high- to low-level, depending on the choice of operators. In
general, it is a statement containing at most 3 addresses or operands.
The
general form is x := y op z, where “op” is an operator, x is the result, and y
and z are operands. x, y,
z are variables, constants, or “temporaries”. A
three-address instruction consists of at most 3 addresses for each statement
It
is a linearized representation of a binary syntax tree. Explicit names
correspond to interior nodes of the graph. E.g. for a looping statement ,
syntax tree represents components of the statement, whereas three-address code
contains labels and jump instructions to represent the flow-of-control as in
machine language.
A
TAC instruction has at most one operator on the RHS of an instruction; no
built-up arithmetic expressions are permitted.
e.g.
x + y * z can be translated as
t1 = y * z
t2 = x + t1
where
t1 & t2 are compiler–generated temporary names.
Since
it unravels multi-operator arithmetic expressions and nested control-flow statements,
it is useful for target code generation and optimization.
0 comments