SlideShare una empresa de Scribd logo
1 de 27
Disciplina: Compiladores
Professor: André Moreira
Jefferson Ferreira Torres Bessa
P5 – Ciência da Computação
Sumário
 Geração de código
  -Geração de código intermediário
    *Vantagens e Desvantagens
  -Otimização
    *Tipos
  -Geração de código objeto(Final)
  -Geração de código objeto–Convenção com a Linguagem C
  -Referências.



                                                          2
Geração de código
 A geração de código é uma das tarefas mais complexas
  do compilador.
  -Depende da linguagem-fonte, da máquina-alvo e seu
  ambiente de execução e sistema operacional.


 É conveniente dividi-la em etapas menores.
   -Geração de código intermediário, otimização e geração
   de código objeto.



                                                            3
ETAPAS DE GERAÇÃO DE CÓDIGO




                              4
Geração de código intermediário
 Até o momento, utilizamos a árvore sintática e a tabela
 de símbolos. Entretanto, ela não corresponde em nada
 com o código-objeto.

 Pode ser interessante gerar um código mais próximo do
 objeto antes de fazer a tradução final:
   Código intermediário




                                                            5
Geração de código intermediário
 Esta fase utiliza a representação interna produzida
 pelo analisador sintático e gera como saída uma
 sequência                 de              código.

 Esse código pode, eventualmente, ser o código objeto
 final mas, na maioria das vezes, se constitui em um
 código intermediário, pois a tradução do código fonte
 para objeto em mais de um passo apresenta algumas
 vantagens.

                                                     6
Vantagens
 Possibilita a otimização de código intermediário, de
 modo a se obter o código objeto oficial mais eficiente;

 Resolve, gradualmente, as dificuldades de passagem de
 código objeto(alto nível para baixo nível), já que o
 código fonte pode ser visto como um texto condensado
 que explore em inúmeras instruções elementares de
 baixo nível;

 Simplifica a implementação do compilador.

                                                           7
Desvantagens
 O compilador precisa fazer um passo a mais, dessa
  forma, a tradução do código fonte para o objeto
  leva a uma compilação mais lenta.

 O intermediário não especifica detalhes da
  maquina alvo.



                                                      8
Exemplo de Código Intermediário
   while I < 100 do I := J + I ;




Para o comando while apresentado anteriormente, o gerador de código
intermediário, recebendo a árvore de derivação mostrada na figura, poderia produzir
a seguinte sequência de instruções.
                                                                                 9
 While I < 100 do I := J+I;


L0    If I < 100 goto L
      Goto L2
L1    Temp := J+I
      I:=Temp
      Goto L0
L2    ...

 A linguagem intermediária do exemplo acima é
  chamada "código de três endereços", pois cada
  instrução tem no máximo três operandos.
                                              10
Código de três endereços
 Instrução mais básica: x = y op z


 Exemplo:
      2*a+(b-3)     ->    t1 = 2 * a
                          t2 = b - 3
                          t3 = t1 + t2




                                         11
Árvore de Sintaxe




                    12
Otimização
 Processo que visa melhorar a qualidade do código gerado
  pelo compilador.
 A Otimização de código é a estratégia de examinar o código
  intermediário, produzido durante a fase de geração de
  código com objetivo de produzir, através de algumas
  técnicas, um código que execute com bastante eficiência
 Qualidade de código pode ser medida por vários ângulos
   Velocidade
   Tamanho do código
   Memória utilizada para temporários


                                                           13
14
Otimização
 Apesar do termo otimização, não há garantia que o código
 obtido durante o processo seja o melhor possível.

 A otimização de código faz com que o compilador gaste
 muito tempo de compilação, e deve ser implementada se o
 uso do compilador realmente necessite de um código
 objeto eficiente.

 Entre as melhorias, podemos ter a escolha de modos de
 endereçamento para melhorar o desempenho, a
 substituição de instruções lentas por outras mais rápidas e
 a eliminação de operações redundantes ou desnecessárias.

                                                           15
Otimização
 Eliminação de subexpressões comuns.




                                        16
Otimização
 Eliminação de código redundante.




                                     17
Otimização
 Propagação de cópias.




                          18
Otimização
 Eliminação de desvios desnecessários.




                                          19
Otimização
 Uso de propriedades algébricas.




                                    20
Geração de código objeto
 Os principais requisitos impostos a geradores de código
  objeto são os seguintes:
   -O código gerado deve ser correto e de alta qualidade.
   -O código deve fazer uso efetivo dos recursos da máquina.
   -O código gerado deve executar eficientemente.
   -O problema de gerar código ótimo é insolúvel
(indecidível) como tantos outros.
 Na prática, devemos contentar-nos com técnicas
  heurísticas que geram bom código (não necessariamente
  ótimo).

                                                           21
Geração de código objeto
O     gerador de código recebe como entrada uma
  representação intermediária do programa fonte e o mapeia
  em um linguagem objeto.
 Se a linguagem objeto for código de máquina de alguma
  arquitetura, devem-se selecionar os registradores ou
  localizações de memória para cada das variáveis usadas
  pelo programa.
 Depois, os códigos intermediários são traduzidos em
  sequencias de instruções e máquina que realizam a mesma
  tarefa.
 Um aspecto crítico da geração de código está relacionado à
  cuidadosa atribuição dos registradores às variáveis do
  programa.

                                                           22
Geração de código objeto –
Convenção com a Linguagem C
 Por exemplo, uma sequência de código possível para a
 expressão dada poderia ser (em uma linguagem de
 montagem hipotética):

      MOV   R0, index   ;; valor de index -> R0
      MUL   R0, 2       ;; dobra valor em R0
      MOV   R1, &a      ;; endereço de a -> R1
      ADD   R1, R0       ;; adiciona R0 a R1
      MOV   *R1, 6       ;;constante 6 -> endereço em R1

                                                       23
Geração de código objeto –
Convenção com a Linguagem C
 Nesse código, usamos uma convenção de C para os
  modos de endereçamento, assim, &a é o endereço de a
  (ou seja, o endereço inicial da matriz) e *R1 significa o
  endereçamento indireto de registro (ou seja, a última
  instrução armazena o valor 6 no endereço contido em
  R1).
 Nesse código, também assumimos que a máquina
  efetua endereçamento de bytes e que inteiros ocupam
  dois bytes de memória (daí o uso de 2 como fator de
  multiplicação na segunda instrução).

                                                          24
Geração de código objeto –
Convenção com a Linguagem C




                              25
REFERÊNCIAS
 AHO,   Alfredo V et al. COMPILADORES:
 PRINCÍPIOS, TÉCNICAS E FERRAMENTAS. 2ª Ed,
 São Paulo: 2008.

 Disponível em:
 http://www.ybadoo.com.br/ead/cmp/09/CMP_slides.
 pdf. Acesso em 30 de Nov 2012.



                                                   26
FIM!

 OBRIGADO PELA ATENÇÃO!!!




                             27

Más contenido relacionado

La actualidad más candente

TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdfTREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdfssuser059c2c1
 
Minicurso de HTML básico - Atualizado para HTML5
Minicurso de HTML básico - Atualizado para HTML5Minicurso de HTML básico - Atualizado para HTML5
Minicurso de HTML básico - Atualizado para HTML5Jose Augusto Cintra
 
Barramento
BarramentoBarramento
Barramentowendhel
 
Aula 3 macro- modelo clássico
Aula 3 macro- modelo clássicoAula 3 macro- modelo clássico
Aula 3 macro- modelo clássicoNeli Chastinet
 
Algoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetiçãoAlgoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetiçãoAlex Camargo
 
Caderno - Gestão e Contabilidade de Custos
Caderno - Gestão e Contabilidade de CustosCaderno - Gestão e Contabilidade de Custos
Caderno - Gestão e Contabilidade de CustosCadernos PPT
 
Técnicas de Pesquisa Avançada na Internet
Técnicas de Pesquisa Avançada na InternetTécnicas de Pesquisa Avançada na Internet
Técnicas de Pesquisa Avançada na InternetMaria Santana
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScriptCarlos Eduardo Kadu
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-phpdiogoa21
 
Produção e crescimento econômico
Produção e crescimento econômicoProdução e crescimento econômico
Produção e crescimento econômicoLuciano Pires
 
Testes em todos os niveis de planejamento
Testes em todos os niveis de planejamentoTestes em todos os niveis de planejamento
Testes em todos os niveis de planejamentoElias Nogueira
 

La actualidad más candente (20)

Barramentos
BarramentosBarramentos
Barramentos
 
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdfTREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
 
Minicurso de HTML básico - Atualizado para HTML5
Minicurso de HTML básico - Atualizado para HTML5Minicurso de HTML básico - Atualizado para HTML5
Minicurso de HTML básico - Atualizado para HTML5
 
Barramento
BarramentoBarramento
Barramento
 
Aula 3 macro- modelo clássico
Aula 3 macro- modelo clássicoAula 3 macro- modelo clássico
Aula 3 macro- modelo clássico
 
Specflow - Criando uma ponte entre desenvolvedores.
Specflow - Criando uma ponte entre desenvolvedores.Specflow - Criando uma ponte entre desenvolvedores.
Specflow - Criando uma ponte entre desenvolvedores.
 
Algoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetiçãoAlgoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetição
 
Caderno - Gestão e Contabilidade de Custos
Caderno - Gestão e Contabilidade de CustosCaderno - Gestão e Contabilidade de Custos
Caderno - Gestão e Contabilidade de Custos
 
Técnicas de Pesquisa Avançada na Internet
Técnicas de Pesquisa Avançada na InternetTécnicas de Pesquisa Avançada na Internet
Técnicas de Pesquisa Avançada na Internet
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScript
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-php
 
Pcp aula8
Pcp aula8Pcp aula8
Pcp aula8
 
Custos
CustosCustos
Custos
 
Compiladores 1
Compiladores 1Compiladores 1
Compiladores 1
 
Linguagem visualg2.0
Linguagem visualg2.0Linguagem visualg2.0
Linguagem visualg2.0
 
Vb exercicios
Vb exerciciosVb exercicios
Vb exercicios
 
Produção e crescimento econômico
Produção e crescimento econômicoProdução e crescimento econômico
Produção e crescimento econômico
 
As Estruturas de Mercado e os Fatores de Produção
As Estruturas de Mercado e os Fatores de ProduçãoAs Estruturas de Mercado e os Fatores de Produção
As Estruturas de Mercado e os Fatores de Produção
 
Estrutura de repetição
Estrutura de repetiçãoEstrutura de repetição
Estrutura de repetição
 
Testes em todos os niveis de planejamento
Testes em todos os niveis de planejamentoTestes em todos os niveis de planejamento
Testes em todos os niveis de planejamento
 

Destacado

Arquitetura do coprocessador Intel® Xeon Phi™ - Intel Software Conference 2013
Arquitetura do coprocessador Intel® Xeon Phi™ - Intel Software Conference 2013Arquitetura do coprocessador Intel® Xeon Phi™ - Intel Software Conference 2013
Arquitetura do coprocessador Intel® Xeon Phi™ - Intel Software Conference 2013Intel Software Brasil
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoronaldoferraz
 
Como criar seu próprio Framework
Como criar seu próprio FrameworkComo criar seu próprio Framework
Como criar seu próprio FrameworkHiarison Gigante
 
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresAnderson Favaro
 
DSL - Como construir uma linguagem em 5 minutos
DSL - Como construir uma linguagem em 5 minutosDSL - Como construir uma linguagem em 5 minutos
DSL - Como construir uma linguagem em 5 minutosOpensoft SA
 
Crie sua Linguagem de Programação com XText
Crie sua Linguagem de Programação com XTextCrie sua Linguagem de Programação com XText
Crie sua Linguagem de Programação com XTextMichel Albonico
 

Destacado (6)

Arquitetura do coprocessador Intel® Xeon Phi™ - Intel Software Conference 2013
Arquitetura do coprocessador Intel® Xeon Phi™ - Intel Software Conference 2013Arquitetura do coprocessador Intel® Xeon Phi™ - Intel Software Conference 2013
Arquitetura do coprocessador Intel® Xeon Phi™ - Intel Software Conference 2013
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programação
 
Como criar seu próprio Framework
Como criar seu próprio FrameworkComo criar seu próprio Framework
Como criar seu próprio Framework
 
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - Compiladores
 
DSL - Como construir uma linguagem em 5 minutos
DSL - Como construir uma linguagem em 5 minutosDSL - Como construir uma linguagem em 5 minutos
DSL - Como construir uma linguagem em 5 minutos
 
Crie sua Linguagem de Programação com XText
Crie sua Linguagem de Programação com XTextCrie sua Linguagem de Programação com XText
Crie sua Linguagem de Programação com XText
 

Similar a Geração de código linguagem c

Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresLuis Ferreira
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação CJose Augusto Cintra
 
Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Robson Ferreira
 
Conceitos Fundamentais de Programacao
Conceitos Fundamentais de ProgramacaoConceitos Fundamentais de Programacao
Conceitos Fundamentais de ProgramacaoJorge Cardoso
 
Programação de Microprocessadores
Programação de MicroprocessadoresProgramação de Microprocessadores
Programação de MicroprocessadoresDiogo Silva
 
10 apostila microcontroladores
10  apostila microcontroladores10  apostila microcontroladores
10 apostila microcontroladoresAlyson Cavalcante
 
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”Kratos879
 
Construção de compiladores - introducao Compilador.pdf
Construção de compiladores - introducao Compilador.pdfConstrução de compiladores - introducao Compilador.pdf
Construção de compiladores - introducao Compilador.pdfGerhard Saboia
 
Linguagem c-para-microcontroladores
Linguagem c-para-microcontroladoresLinguagem c-para-microcontroladores
Linguagem c-para-microcontroladores34macchia34
 

Similar a Geração de código linguagem c (20)

Compiladores
CompiladoresCompiladores
Compiladores
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de Computadores
 
Linguagem assembly
Linguagem assemblyLinguagem assembly
Linguagem assembly
 
Oc2 cap03
Oc2 cap03Oc2 cap03
Oc2 cap03
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2
 
Conceitos Fundamentais de Programacao
Conceitos Fundamentais de ProgramacaoConceitos Fundamentais de Programacao
Conceitos Fundamentais de Programacao
 
Resumo x86
Resumo x86Resumo x86
Resumo x86
 
Programação de Microprocessadores
Programação de MicroprocessadoresProgramação de Microprocessadores
Programação de Microprocessadores
 
Ac16 conjunto de instruções v2
Ac16   conjunto de instruções v2Ac16   conjunto de instruções v2
Ac16 conjunto de instruções v2
 
10 apostila microcontroladores
10  apostila microcontroladores10  apostila microcontroladores
10 apostila microcontroladores
 
Paradigmas de Linguagem
Paradigmas de LinguagemParadigmas de Linguagem
Paradigmas de Linguagem
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Notas deaulas
Notas deaulasNotas deaulas
Notas deaulas
 
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
 
Apostila c++ básico
Apostila c++ básicoApostila c++ básico
Apostila c++ básico
 
Apostila c++ básico (1)
Apostila c++ básico (1)Apostila c++ básico (1)
Apostila c++ básico (1)
 
Construção de compiladores - introducao Compilador.pdf
Construção de compiladores - introducao Compilador.pdfConstrução de compiladores - introducao Compilador.pdf
Construção de compiladores - introducao Compilador.pdf
 
Linguagem c-para-microcontroladores
Linguagem c-para-microcontroladoresLinguagem c-para-microcontroladores
Linguagem c-para-microcontroladores
 
C pic
C picC pic
C pic
 

Último

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 

Último (6)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

Geração de código linguagem c

  • 1. Disciplina: Compiladores Professor: André Moreira Jefferson Ferreira Torres Bessa P5 – Ciência da Computação
  • 2. Sumário  Geração de código -Geração de código intermediário *Vantagens e Desvantagens -Otimização *Tipos -Geração de código objeto(Final) -Geração de código objeto–Convenção com a Linguagem C -Referências. 2
  • 3. Geração de código  A geração de código é uma das tarefas mais complexas do compilador. -Depende da linguagem-fonte, da máquina-alvo e seu ambiente de execução e sistema operacional.  É conveniente dividi-la em etapas menores. -Geração de código intermediário, otimização e geração de código objeto. 3
  • 4. ETAPAS DE GERAÇÃO DE CÓDIGO 4
  • 5. Geração de código intermediário  Até o momento, utilizamos a árvore sintática e a tabela de símbolos. Entretanto, ela não corresponde em nada com o código-objeto.  Pode ser interessante gerar um código mais próximo do objeto antes de fazer a tradução final:  Código intermediário 5
  • 6. Geração de código intermediário  Esta fase utiliza a representação interna produzida pelo analisador sintático e gera como saída uma sequência de código.  Esse código pode, eventualmente, ser o código objeto final mas, na maioria das vezes, se constitui em um código intermediário, pois a tradução do código fonte para objeto em mais de um passo apresenta algumas vantagens. 6
  • 7. Vantagens  Possibilita a otimização de código intermediário, de modo a se obter o código objeto oficial mais eficiente;  Resolve, gradualmente, as dificuldades de passagem de código objeto(alto nível para baixo nível), já que o código fonte pode ser visto como um texto condensado que explore em inúmeras instruções elementares de baixo nível;  Simplifica a implementação do compilador. 7
  • 8. Desvantagens  O compilador precisa fazer um passo a mais, dessa forma, a tradução do código fonte para o objeto leva a uma compilação mais lenta.  O intermediário não especifica detalhes da maquina alvo. 8
  • 9. Exemplo de Código Intermediário  while I < 100 do I := J + I ; Para o comando while apresentado anteriormente, o gerador de código intermediário, recebendo a árvore de derivação mostrada na figura, poderia produzir a seguinte sequência de instruções. 9
  • 10.  While I < 100 do I := J+I; L0 If I < 100 goto L Goto L2 L1 Temp := J+I I:=Temp Goto L0 L2 ...  A linguagem intermediária do exemplo acima é chamada "código de três endereços", pois cada instrução tem no máximo três operandos. 10
  • 11. Código de três endereços  Instrução mais básica: x = y op z  Exemplo: 2*a+(b-3) -> t1 = 2 * a t2 = b - 3 t3 = t1 + t2 11
  • 13. Otimização  Processo que visa melhorar a qualidade do código gerado pelo compilador.  A Otimização de código é a estratégia de examinar o código intermediário, produzido durante a fase de geração de código com objetivo de produzir, através de algumas técnicas, um código que execute com bastante eficiência  Qualidade de código pode ser medida por vários ângulos  Velocidade  Tamanho do código  Memória utilizada para temporários 13
  • 14. 14
  • 15. Otimização  Apesar do termo otimização, não há garantia que o código obtido durante o processo seja o melhor possível.  A otimização de código faz com que o compilador gaste muito tempo de compilação, e deve ser implementada se o uso do compilador realmente necessite de um código objeto eficiente.  Entre as melhorias, podemos ter a escolha de modos de endereçamento para melhorar o desempenho, a substituição de instruções lentas por outras mais rápidas e a eliminação de operações redundantes ou desnecessárias. 15
  • 16. Otimização  Eliminação de subexpressões comuns. 16
  • 17. Otimização  Eliminação de código redundante. 17
  • 19. Otimização  Eliminação de desvios desnecessários. 19
  • 20. Otimização  Uso de propriedades algébricas. 20
  • 21. Geração de código objeto  Os principais requisitos impostos a geradores de código objeto são os seguintes: -O código gerado deve ser correto e de alta qualidade. -O código deve fazer uso efetivo dos recursos da máquina. -O código gerado deve executar eficientemente. -O problema de gerar código ótimo é insolúvel (indecidível) como tantos outros.  Na prática, devemos contentar-nos com técnicas heurísticas que geram bom código (não necessariamente ótimo). 21
  • 22. Geração de código objeto O gerador de código recebe como entrada uma representação intermediária do programa fonte e o mapeia em um linguagem objeto.  Se a linguagem objeto for código de máquina de alguma arquitetura, devem-se selecionar os registradores ou localizações de memória para cada das variáveis usadas pelo programa.  Depois, os códigos intermediários são traduzidos em sequencias de instruções e máquina que realizam a mesma tarefa.  Um aspecto crítico da geração de código está relacionado à cuidadosa atribuição dos registradores às variáveis do programa. 22
  • 23. Geração de código objeto – Convenção com a Linguagem C  Por exemplo, uma sequência de código possível para a expressão dada poderia ser (em uma linguagem de montagem hipotética): MOV R0, index ;; valor de index -> R0 MUL R0, 2 ;; dobra valor em R0 MOV R1, &a ;; endereço de a -> R1 ADD R1, R0 ;; adiciona R0 a R1 MOV *R1, 6 ;;constante 6 -> endereço em R1 23
  • 24. Geração de código objeto – Convenção com a Linguagem C  Nesse código, usamos uma convenção de C para os modos de endereçamento, assim, &a é o endereço de a (ou seja, o endereço inicial da matriz) e *R1 significa o endereçamento indireto de registro (ou seja, a última instrução armazena o valor 6 no endereço contido em R1).  Nesse código, também assumimos que a máquina efetua endereçamento de bytes e que inteiros ocupam dois bytes de memória (daí o uso de 2 como fator de multiplicação na segunda instrução). 24
  • 25. Geração de código objeto – Convenção com a Linguagem C 25
  • 26. REFERÊNCIAS  AHO, Alfredo V et al. COMPILADORES: PRINCÍPIOS, TÉCNICAS E FERRAMENTAS. 2ª Ed, São Paulo: 2008.  Disponível em: http://www.ybadoo.com.br/ead/cmp/09/CMP_slides. pdf. Acesso em 30 de Nov 2012. 26
  • 27. FIM!  OBRIGADO PELA ATENÇÃO!!! 27