A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Geração de Código Difícil de generalizar, devido à variedade de características das máquinas-destino: –Conjunto de registradores (se houver) –Pilha –Instruções.

Apresentações semelhantes


Apresentação em tema: "Geração de Código Difícil de generalizar, devido à variedade de características das máquinas-destino: –Conjunto de registradores (se houver) –Pilha –Instruções."— Transcrição da apresentação:

1 Geração de Código Difícil de generalizar, devido à variedade de características das máquinas-destino: –Conjunto de registradores (se houver) –Pilha –Instruções de zero, um, dois ou três endereços –Modos de endereçamento –Variedade de instruções

2 Geração de código Principais problemas –Seleção de código: uso de templates –Seleção de estratégia de alocação –Alocação de registradores (se existirem)

3 Seleção de Código - Templates Funções de geração de código execute : Command  Instruction* execute [[C1 ; C2]] = execute [[C1]] execute [[C2]]

4 Template - Atribuição execute [[I := E]] = evaluate [[E]] STORE address [[I]]

5 Templates - exemplo execute [[f := f * n; n := n – 1]] execute [[f := f * n]] execute [[n := n – 1]] LOAD f LOAD n CALL mult STORE f LOAD n CALL pred STORE n

6 Funções de geração de código run : Program  Instruction* execute : Command  Instruction* evaluate : Expression  Instruction* fetch : V-name  Instruction* assign : V-name  Instruction* elaborate : Declaration  Instruction*

7 Templates (1) run [[C]] = execute [[C]] HALT execute [[V := E]] = evaluate [[E]] assign [[V]]

8 Templates (2) execute [[I (E)]] = evaluate [[E]] CALL I execute [[C1 ; C2]] = execute [[C1]] execute [[C2]]

9 Templates (3) execute [[if E then C1 else C2]] = evaluate [[E]] JUMPIF(0) g execute [[C1]] JUMP h g: execute [[C2]] h:

10 Templates (4) execute [[while E do C]] = JUMP h g: execute [[C]] h: evaluate [[E]] JUMPIF(1) g

11 Templates (4a) execute [[while E do C]] = g: evaluate [[E]] JUMPIF(0) h execute [[C]] JUMP g h:

12 Templates (5) execute [[let D in C]] = elaborate [[D]] execute [[C]] POP(0) s evaluate [[IL]] = LOADL IL evaluate [[V]] = fetch V

13 Templates (6) evaluate [[O E]] = evaluate [[E]] CALL O evaluate [[E1 O E2]] = evaluate [[E1]] evaluate [[E2]] CALL O

14 Templates (7) fetch [[I]] = LOAD d[SB] assign [[I]] = STORE d [SB] elaborate [[const I ~ E]] = evaluate E elaborate [[ var I : T]] = PUSH 1

15 Templates (8) elaborate [[D1 ; D2]] = elaborate [[D1]] elaborate [[D2]]

16 Exemplos execute[[while i > 0 do i := i – 2]] execute[[let var i : Integer in i := i+ 2

17 Templates especiais LOAD n LOADL 1 CALL add LOAD n CALL succ propagação de constantes


Carregar ppt "Geração de Código Difícil de generalizar, devido à variedade de características das máquinas-destino: –Conjunto de registradores (se houver) –Pilha –Instruções."

Apresentações semelhantes


Anúncios Google