0% acharam este documento útil (0 voto)
15 visualizações29 páginas

COMPILADORES - Introdução

O documento apresenta uma introdução ao conceito de compiladores, destacando sua importância na tradução de linguagens de programação para formatos executáveis. Aborda a estrutura básica de um compilador, suas etapas e a diferença entre compiladores e interpretadores. Além disso, menciona ferramentas e referências relevantes para o estudo de compiladores.

Enviado por

Luiza Carneiro
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
15 visualizações29 páginas

COMPILADORES - Introdução

O documento apresenta uma introdução ao conceito de compiladores, destacando sua importância na tradução de linguagens de programação para formatos executáveis. Aborda a estrutura básica de um compilador, suas etapas e a diferença entre compiladores e interpretadores. Além disso, menciona ferramentas e referências relevantes para o estudo de compiladores.

Enviado por

Luiza Carneiro
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 29

Introdução a PROFª AMANDA

DANIE LLE DE
Compiladores OLIV EIRA
Introdução e
Conceituação Geral
Linguagens de programação são notações para
se descrever computações para pessoas e para
máquinas.

O mundo conforme o conhecemos depende de


linguagens de programação, pois todo o
software executando em todos os
computadores foi escrito em alguma linguagem
de programação.
Antes que possa rodar, um programa primeiro precisa ser traduzido para um
formato que lhe permita ser executado por um computador.

Os sistemas de software que fazem essa tradução são denominados


compiladores.

Introdução e Conceituação Geral


Introdução e
Conceituação Geral
O estudo da escrita de compiladores é
interdisciplinar.

Abrange linguagens de programação, arquitetura


de máquina, teoria de linguagem, algoritmos e
engenharia de software.
O estudo da escrita de compiladores é interdisciplinar.
O estudo da escrita de compiladores é interdisciplinar.
Compiladores
• Histórico

• Inicialmente os computadores eram


programados diretamente em linguagem de
máquina;

• Em 1957 a IBM lança a primeira versão do


compilador FORTRAN, o primeiro compilador
moderno;

• Em 1958 metade dos programas


existentes para os mainframes IBM já
eram escritos em FORTRAN.
Compiladores
• Histórico

• FORTRAN gerava código com desempenho


similar aos programas escritos diretamente
em linguagem de máquina;

• A estrutura geral de um compilador


moderno ainda se parece com a do primeiro
compilador FORTRAN, embora o interior de
todas as partes já tenha mudado desde
então.
Compiladores
• Estrutura Básica de um Compilador

• Dividida em etapas, para alguns autores 5


etapas:

• Análise Léxica;
• Análise Sintática
• Análise Semântica;
• Otimização ;
• Geração de Código.
Compiladores
• Estrutura Básica de um Compilador

• Com evolução surgiu uma nova etapa

• Análise Léxica;
• Análise Sintática
• Análise Semântica;
• Geração de Código Intermediário;
• Otimização ;
• Geração de Código.
Tradutores,
Compiladores e
Interpretadores
Compiladores
Colocando de uma forma bem simples, um
compilador é um programa que recebe como
entrada um programa em uma linguagem de
programação – a linguagem fonte – e o traduz para
um programa equivalente em outra linguagem – a
linguagem objeto.

Um papel importante do compilador é relatar


quaisquer erros no programa fonte detectados
durante esse processo de tradução.

O programa objeto em linguagem de máquina


produzido por um compilador normalmente é muito
mais rápido no mapeamento das entradas para saídas
do que um interpretador.​
Interpretadores
Um interpretador é outro tipo comum de
processador de linguagem. Em vez de produzir
um programa objeto como resultado da tradução,
um interpretador executa diretamente as
operações especificadas no programa fonte sobre
as entradas fornecidas pelo usuário.

Um interpretador frequentemente oferece um


melhor diagnóstico de erro do que um compilador,
pois executa o programa fonte instrução por
instrução.
Compiladores x
Interpretador
• Compiladores x Interpretadores

• Compilador: Analisa todo o código a fim de


traduzi-lo de uma vez (muitas vezes, o
resultado é um arquivo executável ou uma
biblioteca);

• Interpretador: Faz esse trabalho de


conversão aos poucos, sempre que uma
declaração ou função é executada, por
exemplo.
Tradutores
Um compilador que traduz linguagem de alto
nível para outra linguagem de alto nível é
chamada de tradutor de fonte para fonte ou
conversor de linguagem.

Um programa que traduz uma linguagem de


programação de baixo nível para uma linguagem
de programação de alto nível é um
descompilador.

Exemplo de descompilador para Java: JAD


Decompiler: https://goo.gl/A27Yi7
JAVA
Os processadores da linguagem Java combinam
compilação e interpretação.

Um programa fonte em Java pode ser primeiro


compilado para uma forma intermediária,
chamada bytecodes. Os bytecodes (ou códigos
de bytes) são então interpretados por uma
máquina virtual.

Como um benefício dessa combinação, os


bytecodes compilados em uma máquina podem
ser interpretados em outra máquina, talvez por
meio de uma rede.
Esta Fot o de Autor Desconhecido est á li cenciado em CC BY-SA
Compiladores
Além de um compilador, vários outros programas
podem ser necessários para a criação de um
programa objeto executável.

Um programa fonte pode ser subdividido em


módulos armazenados em arquivos separados.

A tarefa de coletar o programa fonte às vezes é


confiada a um programa separado, chamado
pré-processador.
Pré-processador
❑ Preparar o código-fonte para o compilador
adequado.
Exemplo, nas linguagens C e C ++, serão
consumidas todas as linhas que comecem
com # como o #include,

❑ O pré-processador abrirá o arquivo nomeado e


colocar seu conteúdo no código-fonte.
Compilador
❑ Apropriado para consumir a saída limpa do pré-
processador.

❑ Vai verificar e analisar o código-fonte, executar a


verificação de tipos e outras rotinas semânticas,
além de otimizar o código, e produzir a
linguagem Assembly como saída
Montador (assembler)
❑ Consumir o código do Assembly e produzir o
código-objeto.

❑ O código-objeto ainda não é completamente


executável, faltando conter instruções em
linguagem de máquina na forma que o CPU
compreenderá.

❑ O código-objeto não conhece ainda os


endereços de memória finais nos quais será
carregado. Ainda há lacunas que devem ser
preenchidas pelo linker.
Linker
❑ Consumir um ou mais arquivos do objeto e da
biblioteca e fazer a combinação em um
programa executável completo.

❑ Seleção dos locais de memória finais, onde cada


pedaço de código e os dados serão carregados.

❑ É feito um link, escrevendo as informações de


endereço que ainda faltam.
Fases do
processo de
compilação
❑ Geradores de analisador - geram analisadores de
sintaxe automaticamente com base em uma
descrição gramatical de uma linguagem de
programação.
❑ Geradores de varreduras - geram analisadores
léxicos considerando uma descrição de expressão
regular dos tokens de uma linguagem.
❑ Ferramentas de tradução - direcionadas à sintaxe
que geram coleções de rotinas para navegar uma
árvore de análise e fazer a geração de código
intermediário.

Ferramentas ❑ Produtores de código - produzem um gerador com


base em uma coleção de regras de tradução de
cada operação da linguagem intermediária na
linguagem de máquina específica;.
❑ Ferramentas de análise de fluxo de dados que
possibilitam a coleta de informações sobre como
os valores são transportados de uma parte de um
programa para outra parte. Fundamental para a
otimização do código.
❑ Kits de ferramentas de construção de compiladores
que fornecem um conjunto integrado de rotinas
para a construção de várias fases de um
compilador.
• Louden, K. (1997). Compiladores: Princípios e Práticas.
• Aho, A. V., Sethi, R., & Ullman, J. D. (2007). Compilers: Principles,
Techniques, and Tools (2ª ed.).
• Dragon Book: O livro clássico sobre compiladores.
• Documentação GCC: https://gcc.gnu.org/
• Material acadêmico dos professores Charlene e Fábio Corrêa sobre
compiladores.

Referências

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy