Three address code

Da Wikipedia, l'enciclopedia libera.

In informatica il Three Address Code (abbreviato in TAC o 3AC) è una forma di rappresentazione del codice intermedio utilizzata dai compilatori. Ogni istruzione nel 3AC può essere descritta dalla quadrupla (operatore, operando1, operando2, risultato), ed è espressa come:

dove x, y e z sono variabili, costanti o variabili temporanee generate dal compilatore. op rappresenta un generico operatore (ad esempio un operatore aritmetico).

Le espressioni che contengono più di una operazione fondamentale, come

non sono rappresentabili in 3AC come singola istruzione, ma vanno scomposte in una serie equivalente di operazioni fondamentali:

Il termine Three Address Code viene utilizzato anche quando alcune operazioni utilizzano più (o meno) di due operandi. La caratteristica principale del 3AC è infatti che ogni istruzione implementa esattamente una operazione fondamentale.

Una versione più raffinata del 3AC è data dallo static single assignment form (SSA).

Esempio[modifica | modifica wikitesto]

int main(void)
{
    int i;
    int b[10];
    for (i = 0; i < 10; ++i) {
        b[i] = i*i; 
    }
}

Il precedente esempio in C, tradotto in Three Address Code, avrebbe indicativamente la forma seguente:

      i := 0                  ; assegnamento
L1:   if i < 10 goto L2       ; salto condizionato
      goto L3                 ; salto incondizionato
L2:   t0 := i*i
      t1 := &b                ; indirizzo dell'operazione
      t2 := t1 + i            ; t2 contiene l'indirizzo di b[i]
      *t2 := t0               ; salvataggio tramite dereferenziazione del puntatore
      i := i + 1
      goto L1
L3: