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).

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

Nel momento in cui si desidera rappresentare delle istruzioni più complicate, comprendendo più degli operandi previsti, è possibile appoggiarsi a delle variabili temporanee. Di fatto il codice seguente, scritto in C

int main(){
    int x = 3;
    int y = (2+x)*5
}

Viene rappresentato con il Three Address Code come riportato di seguito:

x := 3;
t_0 := 2 + x;
y := t_0*5;

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

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: