title: Three address code
text: # Three address code
  
  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
  
  $x:=y\,\operatorname {op} \,z$
  
  dove x (risultato), y (operando1) e z (operando2) sono variabili (temporanee o meno) e gli operandi possono anche essere delle costanti. Il simbolo $\operatorname {op}$ indica un generico operatore (ad esempio un operatore aritmetico).
  
  Le espressioni che contengono più di un'operazione fondamentale, come
  
  $p:=x+y\times z$
  
  non sono rappresentabili in 3AC come singola istruzione, ma vanno scomposte in una serie equivalente di operazioni fondamentali:
  
  $t_{1}:=y\times z$
  
  $p:=x+t_{1}$
  
  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
  
  Il precedente esempio in C, tradotto in Three Address Code, avrebbe indicativamente la forma seguente:
  
  