back-end compilação aula-11-back-end.pdf. compilação back-end todo o processo de geração de...

21
Back-End Compilação aula-11-back-end.pdf

Upload: internet

Post on 22-Apr-2015

111 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Back-End Compilação aula-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

Back-End Compilaçãoaula-11-back-end.pdf

Page 2: Back-End Compilação aula-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

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.

Page 3: Back-End Compilação aula-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

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

Page 4: Back-End Compilação aula-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

Geração de código intermediário

Transforma a árvore de derivação em um segmento de código denominado código intermediário.

Page 5: Back-End Compilação aula-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

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.

Page 6: Back-End Compilação aula-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

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.

Page 7: Back-End Compilação aula-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

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:

Page 8: Back-End Compilação aula-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

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.

Page 9: Back-End Compilação aula-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

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.

Page 10: Back-End Compilação aula-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

Código de três endereços

Exemplo mais complexo de um código intermediário.

Page 11: Back-End Compilação aula-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

Código de três endereços

Exemplo mais complexo de um código intermediário.

Page 12: Back-End Compilação aula-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

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

Page 13: Back-End Compilação aula-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

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.

Page 14: Back-End Compilação aula-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

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.

Page 15: Back-End Compilação aula-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

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.

Page 16: Back-End Compilação aula-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

Otimização de código

Page 17: Back-End Compilação aula-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

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.

Page 18: Back-End Compilação aula-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

Otimização de código

Page 19: Back-End Compilação aula-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

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)

Page 20: Back-End Compilação aula-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

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.

Page 21: Back-End Compilação aula-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

Exercícios