Codigo tres direcciones

El código de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como máximo tres operandos.Esta representación intermedia tiene varias propiedades. Primera, cada instrucción de tres direcciones tiene a lo sumo un operador, además de la asignación. Por tanto, cuando se generan esas instrucciones el compilador tiene que decidir el orden en que deben efectuarse, las operaciones; la multiplicación precede a la adición, etc. Segunda, el compilador debe generar un nombre temporal para guardar los valores calculados por cada instrucción. Tercera, algunas instrucciones de "tres direcciones" tienen menos de tres operadores, por ejemplo X = 1, etc.

Ejemplos de sentencias de control en codigo tres direcciones:


If-then-else

Ej:

if ( x > y ) then
a;
else
b;

c3d:
t0 = x;
t1 = y;

if ( t0 > t1 ) goto La:
goto Lb;

La: a; goto Lc;

Lb: b; goto Lc;

Lc: ...


Switch
Ej:
Switch ( X )
0: A; break;
1: B; break;
2: C; break;
default: D; break;

c3d:
goto La;

La:
if ( X == 0 ) goto Lb;
if ( X == 1 ) goto Lc;
if ( X == 2 ) goto Ld;
goto Le;

Lb: A; goto Lf;

Lc: B; goto Lf;

Ld: C; goto Lf;

Le: D; goto Lf;

Lf: ...

For
Ej:
for ( i = 0; i < 5; i++)
{ A; }


c3d:
t0 = 0;

La:
if ( t0 < 5 ) goto Lb;
goto Lc;

Lb:
A;
t0 = t0 + 1;
goto La;

Lc: ...

While
Ej:
while ( x > y)
{ A; }

c3d:
t0 = x;
t1 = y;

La:
if ( t0 > t1 ) goto Lb;
goto Lc;

Lb:
A;
goto La;

Lc: ...

Definicion tomada de: monografias.com