Código de tres direcciones en Compilador

Requisito previo: generación de código intermedio

El código de tres direcciones es un tipo de código intermedio que es fácil de generar y se puede convertir fácilmente en código de máquina. Utiliza como máximo tres direcciones y un operador para representar una expresión y el valor calculado en cada instrucción se almacena en una variable temporal. generado por el compilador. El compilador decide el orden de operación dado por el código de tres direcciones.

Representación general –

 a = b op c 

Donde a, b o c representan operandos como nombres, constantes o temporales generados por el compilador y op representa el operador

Ejemplo-1: Convierta la expresión a * – (b + c) en un código de tres direcciones.

Ejemplo-2: escriba tres códigos de dirección para el siguiente código

for(i = 1; i<=10; i++)
 {
  a[i] = x * 5;                                       
 } 

Implementación del código de tres direcciones:
hay 3 representaciones del código de tres direcciones, a saber

  1. Cuadruplicar
  2. triples
  3. triples indirectos

1. Cuádruple:
su estructura consta de 4 campos, a saber, op, arg1, arg2 y resultado. op denota el operador y arg1 y arg2 denota los dos operandos y result se usa para almacenar el resultado de la expresión.

Ventaja –

  • Código fácil de reorganizar para la optimización global.
  • Uno puede acceder rápidamente al valor de las variables temporales usando la tabla de símbolos.

Desventaja –

  • Contiene muchos temporales.
  • La creación de variables temporales aumenta la complejidad del tiempo y el espacio.

Ejemplo: considere la expresión a = b * – c + b * – c.
El código de tres direcciones es:

t1 = uminus c
t2 = b * t1
t3 = uminus c
t4 = b * t3 
t5 = t2 + t4
a = t5  

2. Triples:
esta representación no utiliza una variable temporal adicional para representar una sola operación; en cambio, cuando se necesita una referencia al valor de otro triple, se usa un puntero a ese triple. Por lo tanto, consta de solo tres campos, a saber, op, arg1 y arg2.

Desventaja –

  • Los temporales son códigos implícitos y difíciles de reorganizar.
  • Es difícil de optimizar porque la optimización implica mover el código intermedio. Cuando se mueve un triple, también se debe actualizar cualquier otro triple que se refiera a él. Con la ayuda del puntero, se puede acceder directamente a la entrada de la tabla de símbolos.

Ejemplo: considere la expresión a = b * – c + b * – c

3. Triples indirectos:
esta representación hace uso de un puntero a la lista de todas las referencias a cálculos que se realizan por separado y se almacenan. Su utilidad es similar en comparación con la representación cuádruple, pero requiere menos espacio que esta. Los temporales son implícitos y más fáciles de reorganizar el código.

Ejemplo: considere la expresión a = b * – c + b * – c

Pregunta – Escriba cuádruples, triples y triples indirectos para la siguiente expresión: (x + y) * (y + z) + (x + y + z)

Explicación: el código de tres direcciones es:

t1 = x + y
t2 = y + z
t3 = t1 * t2
t4 = t1 + z
t5 = t3 + t4  


 


 

Publicación traducida automáticamente

Artículo escrito por Ankit87 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 *