Three address code

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

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) che rappresenta l'operazione

dove x (risultato), y (operando1) e z (operando2) sono variabili (temporanee o meno) e gli operandi possono anche essere delle costanti. Il simbolo indica un generico operatore (ad esempio un operatore aritmetico).

Le espressioni che contengono più di un'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 un'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: