codice a tre indirizzi - Three-address code
In informatica , codice a tre indirizzi (spesso abbreviato TAC o 3 AC) è un codice intermedio utilizzato per ottimizzare compilatori per aiutare nella realizzazione di trasformazioni di codice-miglioramento . Ogni istruzione TAC ha al massimo tre operandi ed è tipicamente una combinazione di assegnazione e un operatore binario. Ad esempio, t1 := t2 + t3. Il nome deriva dall'uso di tre operandi in queste dichiarazioni, anche se possono verificarsi istruzioni con un minor numero di operandi.
Poiché codice a tre indirizzo viene utilizzato come lingua intermedia all'interno compilatori, gli operandi molto probabilmente non essere indirizzi concreti memoria o registri del processore , ma piuttosto indirizzi simbolici che si tradurranno in indirizzi reali in fase di allocazione dei registri . Inoltre non è raro che i nomi degli operandi sono numerate in sequenza dal codice a tre indirizzi viene tipicamente generata dal compilatore.
Un perfezionamento di codice a tre indirizzi è A-normale forma (ANF).
Esempi
Nel codice a tre indirizzi, questo sarebbe suddiviso in diverse istruzioni separate. Queste istruzioni si traducono più facilmente al linguaggio assembly . E 'anche più facile da rilevare comuni sottoespressioni per accorciare il codice. Nel seguente esempio, un calcolo è composto di parecchi più piccoli:
# Calcola una soluzione della [[equazione quadratica]]. x = (-b + sqrt (b ^ di 2 - 4 * a * c)) / (2 * a)
|
t1: = b * b t2: = 4 * a t3: = t2 * c T4: = T1 - T3 T5: = sqrt (T4) T6: = 0 - b t7: = t5 + t6 t8: = 2 * a t9: = t7 / T8 x: = t9
|
Codice a tre indirizzi può avere salti e modalità di accesso della memoria condizionati ed incondizionati. Si può anche avere i metodi di funzioni di chiamata, oppure può ridurre questi per salti. In questo modo, codice a tre indirizzi può essere utile in analisi di controllo del flusso . Nel seguente esempio C-like, un loop memorizza i quadrati dei numeri compresi tra 0 e 9:
...
for (i = 0; i < 10; ++i) {
b[i] = i*i;
}
...
|
t1: = 0; inizializzare i
L1: se t1> = 10 goto L2; salto condizionato
t2: = t1 * t1; quadrato dei
t3: = t1 * 4; indirizzo word-allineamento
t4: = b + t3; affrontare per memorizzare i * i
* T4: = t2; memorizzare tramite puntatore
t1: = t1 + 1; aumentare i
goto L1; ciclo di ripetizione
L2:
|
Guarda anche
Riferimenti
- ^ V., Aho, Alfred (1986). Compilatori, principi, tecniche e strumenti . Sethi, Ravi., Ullman, Jeffrey D., 1942-. Reading, Mass .: Addison-Wesley Pub. Co. p. 466. ISBN 0.201.100,886 mila . OCLC 12.285.707 .