back-end compilação aula-11-back-end.pdf. compilação back-end todo o processo de geração de...
Post on 22-Apr-2015
114 Views
Preview:
TRANSCRIPT
Back-End Compilaçãoaula-11-back-end.pdf
Compilação Back-end
Todo o processo de geração de código para a máquina alvo é feita na etapa de compilação conhecida como back-end ou síntese.
Uma representação do código em uma estrutura de árvore (árvore sintática) é recebida das etapas do front-end após a execução da análise semântica.
O que ocorre em muitos casos é que a geração de código pode ser realizada através de ações semânticas processo conhecido com Tradução Dirigida por Sintaxe.
Compilação Back-end
Em geral a geração de código pode ocorrer diretamente para a máquina alvo ou o que mais comum e a geração de código ser realizada para uma etapa intermediaria e posteriormente ser gerado código para maquina alvo.
Livro
Geração de código intermediário
Transforma a árvore de derivação em um segmento de código denominado código intermediário.
Geração de código intermediário
Vantagens de utilização de uma representação intermediária. Otimização do código de modo a obter um código mais eficiente.
Simplificação de código pois o código intermediário representa uma versão inteligível do código.
Possibilidade da tradução do código intermediário em diversas máquinas.
Geração de código intermediário
A representação intermediária deve ser fácil de ser produzida, ou seja, criada e fácil de ser traduzida para a máquina alvo.
A maior principal diferença entre o código intermediário e o código final é que o código intermediário não especifica detalhes da máquina alvo, ela será uma representação da linguagem de alto nível com a linguagem assembly ou de máquina
O código intermediário deve representar todas as expressões do programa fonte.
Código de três endereços
É uma forma de representar uma linguagem intermediaria, é a forma mais comum de ser utilizada e cada instrução faz referência a no máximo três variáveis (endereços de memória). As instruções básicas dessa linguagem são as seguintes:
Código de três endereços
Onde A, B, e C representam variáveis, op representa
operadores, oprel um operadores relacionais e L um rótulo.
Código de três endereços
O código de três endereços é composto por uma sequência de instruções envolvendo operações e atribuições e desvios.
Dessa forma as expressões da linguagem são decompostas na representação em uma serie de instruções.
Outro detalhe importante é o uso de variáveis temporárias nesse processo.
Com esse tipo de representação intermediara obtemos um código mais próximo possível ao assembly o que consequentemente facilita a geração de código para a máquina alvo.
Código de três endereços
Exemplo mais complexo de um código intermediário.
Código de três endereços
Exemplo mais complexo de um código intermediário.
JVM
Ver exemplos de Byte Code em Java
Linguagem de programação que possuem implementação para a JVM javap -c br.com.unoesc.Nome
JRuby
http://en.wikipedia.org/wiki/List_of_JVM_languages
Otimização de código
Essa fase é responsável por gerar um código mais eficiente que envolvem diretamente o uso de memória, espaço e velocidade de execução da instruções.
Normalmente quando a ganhos de espaços a perda de tempo de execução e vice-versa.
Nessa etapa são aplicados técnicas que permitem detectar processos que otimizem o código.
Otimização de código
As técnicas podem variar de compilador par compilador e devem manter o significado do programa original.
Devem executar a maior parte das melhorais de código dentro de um dentro de um determinado nível de esforço de otimização.
Essa etapa tende a consumir muito tempo na compilação e deve ser implementada somente se o compilador exigir um código mais eficiente.
Otimização de código
O processo de otimização de código envolve duas tarefas: Otimização de código intermediário: Com base no código
intermediário é eliminado atribuições redundantes, expressões comuns, variáveis temporárias desnecessárias, troca de instruções de lugar.
Otimização de código
Otimização de código
O processo de otimização de código envolve duas tarefas: Otimização de código objeto: Realiza a troca de instruções de
maquinas por instruções mais rápidas e de melhor utilização de registradores.
Otimização de código
Otimização de código em C
Exemplo em utilizando o compilador GCC No compilador gcc temos o parâmetro -O que determina esse
esforço. O comando gcc –O0 (nenhuma optimização) até gcc –O3 (Máxima otimização)
Otimização de código em C
Parâmetro O que faz-O0 Nenhuma otimização
-O1 Reduzir o tempo de compilação e o tamanho do executável.
-O2 Não causa aumento do executável, é o melhor, mais seguro (por conta da portabilidade) e o mais usado nos dias atuais na distribuição de softwares em Linux;
-O3 Opção com melhor nível de otimização; entretanto, é a que mais causa efeitos colaterais: arquivos maiores, maior uso de memória RAM.
Exercícios
top related