Tipos de códigos de tres direcciones

El código de tres direcciones es una secuencia de sentencias de la forma general A := B op C , donde A, B, C son nombres definidos por el programador, constantes o nombres temporales generados por el compilador; op representa una operación que se aplica en A, B. En palabras simples, un código que tiene como máximo tres direcciones en una línea se denomina tres códigos de dirección. 

Ejemplo: 
 

(a+b)*(a+b+c) 

El código de tres direcciones para la expresión anterior es: 
 

t1=a+b
t2=t1+c
t3=t1*t2

En el diseño de compiladores, la representación de código intermedio más popular es el código de tres direcciones. Es aceptado mundialmente y es el más utilizado. Hay muchas declaraciones de tres direcciones. Todas las declaraciones complejas de tres direcciones son generalmente una combinación de declaraciones de tres direcciones más simples. 

Estas declaraciones se incluyen en las siguientes siete categorías y se pueden llamar como bloque de construcción para declaraciones de tres direcciones: 

Declaración Sentido
X = Y en Z Operación binaria
X= en Z Operación unaria
X = Y Asignación
si X(rel op)Y ir a L Ir a Condicional
ir a L Ir a incondicional
A[i] = X
Y= A[i]
Indexación de array
P = dirección X
Y = *P 
*P = Z
Operaciones de puntero

Ahora, al usar las declaraciones anteriores, convertiremos algunas construcciones populares de alto nivel en código de tres direcciones. 

1. Declaración Mientras – 
 

while E do S

Código de tres direcciones: 
 

L:if(E==0) goto L1
  S
  goto L
L1:end

2. Para Declaración – 
 

for(E1;E2;E3) do S

Código de tres direcciones: 
 

  E1
L:if(E2) goto L1
  goto L2
L1:S
  E3
  goto L
L2:end

3. Declaración de cambio – 
 

switch(E){
case 1: S1
        break;
case 2: S2
        break;
default: S3
}

Código de tres direcciones: 
 

  t=E
  goto test
L1:S1
  goto Last
L2:S2
   goto Last
L3:S3
   goto Last
test: if(E==1) goto L1
      if(E==2) goto L2
      goto L3
Last:end

Por lo tanto, podemos ver que al usar las siete declaraciones podemos replicar declaraciones de un lenguaje de nivel superior en códigos de dirección.
 

Publicación traducida automáticamente

Artículo escrito por behlanmol y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *