Escolar Documentos
Profissional Documentos
Cultura Documentos
Linguagens e Programao
8 Gerao de Cdigo
Fontes: 1. Compiladores Princpios e prticas, Keneth C.Louden, Thomson, 2004. Cap. 8 Gerao de cdigo 2. Processadores de Linguagens da concepo implementao, Rui Gustavo Crespo. IST Press.1998. Cap. 7 e 8 Gerao de Cdigo (Cdigo Intermdio e Cdigo Final) 3. Compiladores Princpios,Tcnicas e Ferramentas AlfredV.Aho,R.Sethi e Jeffrey D.Ullman, 2007. Cap. 9 Gerao de cdigo
Ana Madureira
Engenharia Informtica Ano Lectivo: 2011/2012
Enquadramento do Compilador
Editor
Programa fonte Heap
Pr-processador
Programa fonte modificado
Compilador
Cdigo objecto
Linker
Cdigo objecto (recolocvel)
Bibliotecas externas
Loader
Imagem na memria
30/04/2012
Caractersticas Existncia de uma representao intermdia do programa fonte (mquina abstrata) A vanguarda mapeia o programa fonte numa representao intermdia A retaguarda produz o cdigo mquina (mquina concreta) a partir da representao intermdia Simplifica a produo de compiladores para vrias mquinas concretas Simplifica a produo de compiladores para vrias linguagens fonte Duas passagens cdigo mais eficiente que numa nica passagem
30/04/2012
Front end
Funes: Reconhecer programas vlidos Produzir mensagens de erro Produzir a representao intermdia Produzir um mapa de armazenamento preliminar
30/04/2012
Back end
Funes: Traduzir a representao intermdia em cdigo mquina Escolher as instrues correspondentes a cada operao definida na representao intermdia Decidir que informao manter nos registos do processador Assegurar a concordncia com os formatos usados por outros componentes do sistema de desenvolvimento de software
A gerao de cdigo intermdio usa as mesmas ferramentas das verificaes semnticas: i.e. atributos associados aos terminais e no-terminais da gramtica e aces a executar, que emitem as instrues intermdias
30/04/2012
Cdigo intermdio
O cdigo intermdio constitui uma representao do texto fonte, numa sequncia de instrues (por vezes uma rvore ou grafo acclico dirigido), que quando executadas, tm o mesmo resultado que o especificado no texto fonte As instrues do cdigo intermdio so independentes do processador alvo Vantagens do cdigo intermdio: Reutilizao: Na construo de um compilador de uma dada linguagem para vrias mquinas, s necessrio mudar o gerador final Optimizao: O mdulo de optimizao pode ser o mesmo para vrios compiladores de linguagens fonte diferentes e para mquinas alvo diferentes
30/04/2012
Mquina de stack: push b push c uminus mul pop t1 push t1 push t1 add pop a
30/04/2012
Cdigo final
Aps a gerao do cdigo intermdio e eventual optimizao (melhoramento), segue-se, como ltima fase a gerao do cdigo final O cdigo intermdio j prximo do cdigo final da mquina alvo, com a excepo da no utilizao de registos (em vez disso usam-se temporrios) e da utilizao de instrues de mais alto nvel O problema principal da gerao do cdigo final a alocao eficiente dos registos do processador O cdigo final gerado toma geralmente duas formas: Cdigo assembly: usa nomes simblicos para as instrues mquina, registos, variveis e posies no programa; necessita de um assemblador para gerar o cdigo mquina final Cdigo mquina recolocvel (relocatable): As instrues esto j codificadas, sendo no entanto apenas usados endereos relativos, quer para os dados quer para as posies no prprio cdigo executvel; durante o carregamento na memria os endereos absolutos que porventura tenham de existir so corrigidos para o local onde o programa foi carregado
Mquina alvo
Como bvio o cdigo final a gerar depende fortemente do processador alvo onde se pretende que seja executado Processadores RISC Reduced Instruction Set Computer:
Nmero elevado de registos de uso geral (32 ou mais) As instrues que envolvem a memria limitam-se geralmente a transferncias para os registos (load e store) Instrues aritmticas e lgicas de 3 endereos, mas envolvendo apenas registos ou dados imediatos Instrues com tamanhos e tempos de execuo semelhantes (com raras excepes) Nmero limitado de registos e alguns com fins especficos (SP, FP, ) Geralmente instrues de 2 endereos (o destino um dos operandos) Diversos modos de endereamento (imediato, registo, absoluto, indexado, indirecto) com custos diferentes (espao e tempo de execuo) Algumas instrues com efeitos colaterais (autoincremento, etc)