GERAÇÃO DE CÓDIGO Código de Três Endereços Exemplo

Propaganda
COMPILADORES
09
Prof. Marcos
GERAÇÃO DE CÓDIGO
Código Intermediário
Os vários tipos de código intermediário
fazem parte de uma das seguintes
categorias:
o Representações gráficas: árvore e
grafo de sintaxe;
o
Notação pós-fixada ou pré-fixada;
o
Código de três-endereços.
GERAÇÃO DE CÓDIGO
Código de Três Endereços
Exemplo:
Seria Traduzido:
a=b+c
a=a+b
a=b
a=b+c*d
a := b + c
a := + b
a := b
_t1 := c * d
a := b + _t1
GERAÇÃO DE CÓDIGO
Código de Três Endereços
As Instruções de desvio são traduzidas em:
Goto _L onde: _L seria um label
Exemplo:
If x oplog y goto _L
…
_L …
GERAÇÃO DE CÓDIGO
Código de Três Endereços
Exemplo:
a=b+c
e=c+d+b
Seria Traduzido
em:
a := b + c
_t1 := c + d
e := _t1 + b
OTIMIZZAÇÃO: eliminando expressões comuns
a := b + c
GERAÇÃO DE CÓDIGO
Código de Três Endereços
Seria Traduzido em:
Exemplo:
while(I < 10*j)
{
a[i] = i + 2 * j;
++I;
}
…
_L1: _t1 := 10 * j
if i >= _t1 goto _L2
_t2 := 2 * j
a[i] := i + _t2
i := i + 1
goto _L1
_L2: ...
GERAÇÃO DE CÓDIGO
Código de Três Endereços
Seria Traduzido em:
OBSERVE que o valor
das expressões
_t1 := 10 * j e _t2 := 2 * j
nãp se alteram ,
podendo serem
movidas pára fora do
laço, ficando:
_L1: _t1 := 10 * j
if i >= _t1 goto _L2
_t2 := 2 * j
a[i] := i + _t2
i := i + 1
goto _L1
_L2: ...
GERAÇÃO DE CÓDIGO
Código de Três Endereços
Seria Traduzido em:
OBSERVE que o valor
das expressões
_t1 := 10 * j e _t2 := 2 * j
nãp se alteram ,
podendo serem
movidas pára fora do
laço, ficando:
_t1 := 10 * j
_t2 := 2 * j
_L1: if i>=_t1 goto _L2
a[i] := i + _t2
i := i + 1
goto _L1
_L2: ...
GERAÇÃO DE CÓDIGO
Código de Três Endereços
Converta para código de três endereços
a) a = 2 * y + z * d
b) for(i = 1; i <= n ; ++i)
x = x * i;
GERAÇÃO DE CÓDIGO
Código de Três Endereços
Converta para código de três endereços
a) a = 2 * y + z * d
_t1 := 2 * y
_ t2 := z * d
a := _t1 + _t2
GERAÇÃO DE CÓDIGO
Código de Três Endereços
b) for(i = 1; i <= n ; ++i)
x = x * i;
i := 1
_L1: if i > n goto _L2
x := x * i
i :- i + 1
goto _L1
_L2: ...
GERAÇÃO DE CÓDIGO
Otimização de Código
Melhorar o código intermediário efetuando
transformações para simplificá-lo:
 tempo de execução
 uso de memória
 tamanho do código executável
GERAÇÃO DE CÓDIGO
Otimização de Código
CÓDIGOS DE TRÊS ENDEREÇOS - Exemplo
Valor := valinicial + taxa * 60
_t1 := int to real(60)
_t2 := id3 * _t1
_t3 := id2 + _t2
id1 = _t3
_t1 := id3 * 60.0
id1 := id2 + _t1
GERAÇÃO DE CÓDIGO
Código de Máquina
D2 08 D 123 D 456
Representa a instrução para mover o
valor que está no endereço 456 para
o endereço 123
GERAÇÃO DE CÓDIGO
Código de Máquina
GERAÇÃO DE CÓDIGO
Código de Máquina
• Gera, a partir do código intermediário
(árvore sintática) o código para a
máquina-alvo.
• É nessa fase de compilação que as
propriedades da máquina-alvo se
tornam o fator principal.
GERAÇÃO DE CÓDIGO
Código de Máquina
• Gera, a partir do código intermediário
(árvore sintática) o código para a
máquina-alvo.
• É nessa fase de compilação que as
propriedades da máquina-alvo se
tornam o fator principal.
Download