11.07.2015 Views

Compiladores: PASCALjr - WWW2 - Udesc

Compiladores: PASCALjr - WWW2 - Udesc

Compiladores: PASCALjr - WWW2 - Udesc

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Capítulo 8Geração de Código ObjetoÉ a fase final de um modelo de compilador. Recebe como entrada a representação intermediáriado programa-fonte e produz como saída um programa-alvo equivalente.Por ser impraticável a criação de um gerador de código ótimo, contenta-se com acriação (através de heurísticas) de bons geradores de código. A maioria dos problemasde geração de código envolve aspectos como gerência de memória, seleção de instruções,alocação de registradores e ordem de avaliação.As principais características de um bom gerador de código: deve ser correto (essencial),usar de forma eficiente os recursos da máquina e o próprio gerador deve ser implementadode forma eficiente.Uma entrada usual para um gerador de código é o código intermediário juntamentecom as informações armazenadas na tabela de símbolos. Já a saída pode ser uma linguagemabsoluta de máquina (carrega em uma posição fixa de memória antes da execução),linguagem relocável (cria módulos que podem ou não, serem executados em conjunto,sendo para tal necessário uma etapa de linkedição dos módulos) ou linguagem de montagem(gera instruções simbólicas que são traduzidas através de um montador). A terceiraopção será a escolhida para a implementação do trabalho prático #4.Seleção de InstruçõesSe não nos importarmos com a eficiência do código-objeto gerado, a seleção de instruções éum processo direto. Para cada tipo de instrução intermediária (código de três-endereços)gerada, projeta-se um esqueleto de código final equivalente. Exemplo: x = y + z.MOV y, R0 (carregar y no registrador R0)ADD z,R0 (adicionar z a R0)MOV R0, x (armazenar R0 em x)Infelizmente, o código final gerado por esta alternativa freqüentemente é extenso eineficiente. Exemplo:a = b+cd = a+eMOV b, R0ADD c, R0MOV R0, aMOV a, R0ADD e, R0MOV R0, d71

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!