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

Slides:



Advertisements
Apresentações semelhantes
Parte 1: Organização de Computadores
Advertisements

gerador de código intermediário
1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Introdução à Ciência da Computação Linguagens de Programação.
Augusto NevesJoão CarlosRodrigo Paula Linguagem de Programação C++ Componentes do Grupo.
Programas e Microprogramas
I - Noções dum compilador Partes dum compilador Ferramentas de construção de compiladores Bibliografia aconselhada: –Aho, Sethi e Ullman – Cap. 1 LFA 1999/2000.
Arquitetura e organização de computadores.
Linguagem de Montagem Visão geral.
Seminários de Compiladores
Software Básico Silvio Fernandes
ARQUITETURAS RISC E CISC
Algoritmos e Estrutura de Dados I
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Prof. Heloise Manica Paris Teixeira
Teoria dos Compiladores
Daniel M. Aquino, Marcelo C. Perez, Thais A. B. Fernandes
CISC e RISC.
Professor: Erivelto Tschoeke – UDESC/CEPLAN
Ferramentas Programação
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Softwares.
Construção de Compiladores
Arquitetura de Computadores
Linguagens de Programação
Sistemas Operacionais Turmas MBI1 e NBI2. Prof: Marcelo Mendes.
Prof. Msc. Raul Paradeda Aula 2 Introdução
Estrutura de um tradutor
Professor Fernando Luís
Paradigmas de programação
PROGRAMAÇÃO I UNIDADE 1.
Representação de Instruções
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 02: Introdução.
PCI- Introdução à Computação
Laboratório I Mateus Raeder Material baseado nos originais da
Arquitetura de computadores
Avaliação da Linguagem de Programação
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva
Geração de Código Intermediário
Concorrência e Java RMI
Agenda Modos de Endereçamento.
Java Bytecode Software Básico Mitsuo Takaki.
Geração de Código Intermediário
SISTEMAS OPERACIONAIS I
Geração de Código aula-12-geração-de-código.pdf.
SISTEMAS OPERACIONAIS I
Software Básico Nível ISA Capítulo 5 Mitsuo Takaki
Sistemas Operacionais
Capítulo VIII Ambientes de Execução
SISTEMAS OPERACIONAIS I
Analise Semântica aula-10-analise-semântica.pdf.
Experimentação Algorítmica
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Projeto de Linguagens de Programação
Processadores de Linguagens
Arquiteturas RISC x CISC
Faculdade Pernambucana - FAPE Setembro/2007
Fundamentos de linguagens de programação
Geração de Código Fase final do compilador
Algoritmos e Programação MC102
SISTEMAS DE INFORMAÇÃO
Introdução a linguagem de Programação Java. Linguagens de Programação Linguagens de máquina(muito difíceis de usar e compreender) – Comanda ações do computador.
Faculdade Pernambuca - FAPE
Introdução à lógica de programação
Influencias sobre o Projeto da Linguagem
LÓGICA DE PROGRAMAÇÃO Curso: Técnico em Informática Professor: Ronaldo Disciplina: Lógica de Programação.
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
 Evolução constante das linguagens de programação de alto nível (LAN) desde o Fortran (primeira LAN)  Surgimento de novos paradigmas como a OO, Orientação.
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Sistemas Operacionais FATEC-PB Professor: Gustavo Wagner
Transcrição da apresentação:

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 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