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 de optimización para ayudar en la implementación de transformaciones que mejoran el código . Cada instrucción TAC tiene como máximo tres operandos y suele ser 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 declaraciones, 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 o 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 estén numerados secuencialmente, ya que el compilador generalmente genera un código de tres direcciones.

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 separadas. 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 más pequeños:

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

Ver también

Referencias

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