stringtranslate.com

Código de tres direcciones

En informática , el código de tres direcciones [1] (a menudo abreviado como TAC o 3AC) es un código intermedio utilizado por los compiladores optimizadores para ayudar en la implementación de transformaciones que mejoran el código . Cada instrucción TAC tiene como máximo tres operandos y normalmente es una combinación de asignación y un operador binario. Por ejemplo, t1 := t2 + t3. El nombre deriva del uso de tres operandos en estas instrucciones, aunque pueden aparecer instrucciones con menos operandos.

Dado que el código de tres direcciones se utiliza como lenguaje intermedio dentro de los compiladores, lo más probable es que los operandos no sean direcciones de memoria concretas ni registros de procesador , sino direcciones simbólicas que se traducirán en direcciones reales durante la asignación de registros . Tampoco es raro que los nombres de los operandos se numeren secuencialmente, ya que el código de tres direcciones normalmente lo genera el compilador.

Un refinamiento del código de tres direcciones es la forma A-normal (ANF).

Ejemplos

En un código de tres direcciones, esto se dividiría en varias instrucciones independientes. Estas instrucciones se traducen más fácilmente al lenguaje ensamblador . También es más fácil detectar subexpresiones comunes para acortar el código. En el siguiente ejemplo, un cálculo se compone de varios cálculos más pequeños:

El código de tres direcciones puede tener saltos condicionales e incondicionales y métodos de acceso a la memoria. También puede tener métodos de invocación de funciones, o puede reducirlos a saltos. De esta manera, el código de tres direcciones puede ser útil en el análisis del flujo de control . En el siguiente ejemplo similar a C, un bucle almacena los cuadrados de los números entre 0 y 9:

Véase también

Referencias

  1. ^ V., Aho, Alfred (1986). Compiladores, principios, técnicas y herramientas . Sethi, Ravi., Ullman, Jeffrey D., 1942-. Reading, Mass.: Addison-Wesley Pub. Co. págs. 466. ISBN 0201100886.OCLC 12285707  .{{cite book}}: CS1 maint: varios nombres: lista de autores ( enlace )