Código de três endereços
Em ciência da computação, o código de três endereços é uma forma de representar código intermediário usado por compiladores para auxiliar na implementação das transformações voltadas a melhorar o código.[1] Um código de três endereços é uma representação linear de um Grafo acíclico dirigido (DAG).[2] Cada instrução em um código de três endereços pode ser descrita como uma 4-tupla: (operador, operando1, operando2, resultado).
Cada declaração tem a forma geral de:
tal como:
onde x, y e z são variáveis, constantes ou variáveis temporárias geradas pelo compilador. op representa qualquer operador, por exemplo, um operador aritmético.
Expressões que contenham mais de uma operação fundamental, tais como:
não são representáveis em código de três endereços como uma única instrução. Em vez disso, elas são decompostas em uma série equivalente de instruções, tais como
O termo código de três endereços é usado, mesmo que algumas instruções usem mais ou menos de dois operandos. As principais características do código de três endereços são de que cada instrução implementa exatamente uma operação fundamental, e que a origem e o destino pode se referir a qualquer registro disponível.
Exemplo[editar | editar código-fonte]
int main(void)
{
int i;
int b[10];
for (i = 0; i < 10; ++i) {
b[i] = i*i;
}
}
O programa C anterior, traduzido em código de três endereços, poderia ser algo como o seguinte:
i := 0 ; atribuição
L1: if i >= 10 goto L2 ; salto condicional
t0 := i*i
t1 := &b ; endereço da operação
t2 := t1 + i ; t2 contém o endereço de b[i]
*t2 := t0 ; armazenamento através de ponteiro
i := i + 1
goto L1
L2:
Outro exemplo:
if(a<b)
{
x=x+1;
}
else
if(c<d)
{
y=y+1
}
1: if(a<b) then goto 4 2: if(c<d) then goto 7 3: go to next 4: t1=x+1 5: x=t1 6: go to next 7: t2=y+1 8: t2=y 9: go to next 10: ; next é a próxima linha após os comandos da instrução
Referências
- ↑ Crespo, Rui Gustavo (1998). Processadores de Linguagens. da Concepção à Implementação. Lisboa, Portugal: IST Press. p. 247. 435 páginas. ISBN 972-8469-01-2
- ↑ Aho, Alfred V.; Lam, Monica S.; Sethi, Ravi; Ullman, Jeffrey D. (2008). Compiladores. Princípios, técnicas e ferramentas 2ª ed. São Paulo: Addison Wesley (Pearson). p. 232. 634 páginas. ISBN 972-85-88639-24-9 Verifique
|isbn=
(ajuda)