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

6 comentarios:

  Anónimo

29 de julio de 2010, 20:32

son ejemplos muy utiles...gracias :D

  Darío

6 de septiembre de 2010, 12:56

No tienes idea como me has ayudado con esto !!
Muchas Gracias !!!!!!!!!

  Anónimo

14 de octubre de 2010, 0:46

ke parato me as hecho men !!! graxias bro!!

  Anónimo

4 de marzo de 2011, 18:19

Excelente tu publicacion, si le podrias agregar lo de corto circuito y metodo numerico seria excelente

  Anónimo

7 de julio de 2011, 17:51

Muy bueno, gracias, aunque el switch tiene ambigüedades y hay temporales innecesarios, aun así me sirvió mucho, gracias

  Unknown

29 de enero de 2019, 8:36

Ayuda con esto