Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouMarcos Vergílio Aveiro Delgado Alterado mais de 8 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.