Você está na página 1de 5

DESENVOLVIMENTO DE SISTEMAS

Compiladores
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

COMPILADORES

O tema que será tratado neste bloco tem uma característica acadêmica, e a aula terá foco
nas questões de concurso.
Referência: AHO, A.V., ULLMAN, J.D. e SETHI, R.. Compiladores: Princípios, Técnicas e
Ferramentas, LTC, 2008.
Basicamente, o compilador é um programa/software que transforma um código fonte em
código alvo. Ou seja, um arquivo de texto é escrito em uma determinada linguagem de pro-
gramação, depois esse arquivo é salvo e o compilador produz um arquivo que, geralmente,
é executável. Durante o processo de compilação, podem ser emitidos mensagens, erros ou
alertas. A imagem abaixo ilustra esse processo:
5m

Um compilador converte o código escrito em uma linguagem para outra linguagem sem
alterar o significado do programa. Portanto, um compilador é como um tradutor. Também é
esperado que um compilador torne o código de destino eficiente e otimizado em termos de
tempo e espaço. Primeiramente, o programa é escrito em uma linguagem compreensível
aos humanos; depois, isso é transformado em linguagem de máquina, com otimizações. Por
exemplo, quando se traduz um texto do português para o inglês, não se pode fazer uma tra-
dução palavra a palavra, pois isso não funcionaria, já que algumas construções linguísticas
do inglês são diferentes do português. É necessário fazer algumas otimizações nesse pro-
cesso, sem alterar o sentido – é basicamente isso o que ocorre na compilação. O design do
compilador abrange o mecanismo básico de conversão e a detecção e recuperação de erros,
e inclui análise léxica, sintaxe e semântica como front-end e geração e otimização de código
como back-end.
10m
ANOTAÇÕES

www.grancursosonline.com.br 1
DESENVOLVIMENTO DE SISTEMAS
Compiladores
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Os computadores são uma mistura de software (programas executados dentro do har-


dware) e hardware (partes físicas do computador). O hardware é apenas um dispositivo
mecânico e suas funções estão sendo controladas por um software compatível. O hardware
entende as instruções na forma de carga eletrônica, que é a contrapartida da linguagem biná-
ria na programação de software. A linguagem binária possui apenas dois alfabetos: 0 e 1. É
por isso que a tradução, isto é, a compilação é necessária.
Para instruir, os códigos de hardware devem ser escritos em formato binário, que é sim-
plesmente uma série de 1s e 0s. Seria uma tarefa difícil e complicada para programadores de
computador escrever esses códigos, e é por isso que temos compiladores para escrevê-los.
Então, os programadores utilizam uma linguagem com um nível de abstração muito mais
alto (como Python ou Java), e depois isso é compilado. O hardware entende uma linguagem
15m
que os humanos não conseguem entender. Por isso, escrevemos programas em linguagem
de alto nível, o que é mais fácil para entender e lembrar. Esses programas são inseridos em
uma série de ferramentas e componentes do SO para obter o código desejado que pode ser
usado pela máquina.
A imagem abaixo faz um resumo das fases da compilação:
ANOTAÇÕES

www.grancursosonline.com.br 2
DESENVOLVIMENTO DE SISTEMAS
Compiladores
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

A linguagem de alto nível é convertida em linguagem binária em várias fases (mostradas


na imagem acima). Um compilador é um programa que converte linguagem de alto nível em
linguagem assembly. Da mesma forma, um assembler (montador) é um programa que con-
verte a linguagem assembly em linguagem no nível da máquina.
O usuário escreve um programa na linguagem C (linguagem de alto nível); o compilador
C compila o programa e o converte no programa assembly (linguagem de baixo nível); e
um montador converte o programa de montagem em código de máquina (objeto). Uma fer-
ramenta de ligação (linker) é usada para ligar todas as partes do programa para execução
(código de máquina executável), e um loader carrega tudo na memória e, em seguida, o pro-
grama é executado.
20m
O tradutor é um programa que traduz um programa fonte escrito em uma linguagem qual-
quer (denominada linguagem fonte) para um programa objeto equivalente escrito em outra
linguagem (denominada linguagem objeto). A diferença entre um tradutor e um compilador é
que, na tradução, não necessariamente ocorre uma diminuição do nível do código.
Um pré-processador, geralmente considerado como parte do compilador, é uma ferra-
menta que produz entrada para compiladores. Ele lida com macroprocessamento, inclusão
de arquivos, extensão da linguagem etc. Em geral, o pré-processador não altera a linguagem.
O interpretador traduz linguagem de alto nível em linguagem de máquina de baixo nível,
assim como o compilador. A diferença está na maneira como eles leem o código fonte ou
a entrada. Um compilador lê o código fonte inteiro de uma só vez, cria tokens, verifica a
semântica, gera código intermediário, executa o programa inteiro e pode envolver muitas
passagens. Por outro lado, um interpretador lê uma instrução da entrada, converte-a em um
código intermediário, executa-a e, em seguida, executa a próxima instrução em sequência.
Se ocorrer um erro, um interpretador interrompe a execução e a reporta, enquanto que um
compilador lê o programa inteiro, mesmo que encontre vários erros. O interpretador é um
programa que interpreta diretamente as instruções do programa fonte, gerando o resultado
da computação.
Um assembler/montador converte programas de linguagem assembly em código de
máquina. A saída de um assembler é chamada de arquivo de objeto, que contém uma com-
binação de instruções da máquina e os dados necessários para colocar essas instruções na
memória. É importante prestar atenção nas nomenclaturas em inglês e português – algumas
são parecidas e outras, bem diferentes. Assembler, por exemplo, é traduzido como monta-
dor. Portanto, o montador é um tipo de tradutor, em que o programa fonte está escrito em
25m
linguagem assembly e o programa objeto resultante está em linguagem de máquina.
ANOTAÇÕES

www.grancursosonline.com.br 3
DESENVOLVIMENTO DE SISTEMAS
Compiladores
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

O linker (“ligador”) é um programa de computador que liga e mescla vários arquivos de


objetos para criar um arquivo executável. Todos esses arquivos podem ter sido compilados
por montadores separados. A principal tarefa de um linker é procurar e localizar módulos/roti-
nas referenciadas em um programa e determinar o local da memória em que esses códigos
serão carregados, fazendo com que a instrução do programa tenha referências absolutas.
O loader não faz parte do compilador, mas sim do sistema operacional, e é responsável
por carregar arquivos executáveis na memória e executá-los. Ele calcula o tamanho de um
programa (instruções e dados) e cria espaço de memória para ele, além de inicializar vários
registradores para iniciar a execução. Isso ocorre depois que o programa é compilado.
Um compilador executado na plataforma (A) e capaz de gerar código executável para a
plataforma (B) é chamado de compilador cruzado, ou cross-compiler.

DIRETO DO CONCURSO
1. (2018/QUADRIX/CRECI 5º REGIÃO (GO)/PROFISSIONAL DE SUPORTE TÉCNICO/
TECNOLOGIA DA INFORMAÇÃO) Com relação à arquitetura de computadores e a sis-
temas operacionais, julgue o item.
Dentro do ambiente de desenvolvimento, os compiladores convertem programas de
alto nível em linguagens de montagem e os montadores convertem linguagem de mon-
tagem em representações numéricas, tratadas pelo processador.

COMENTÁRIO
A linguagem de alto nível é convertida em linguagem binária em várias fases. Um compila-
dor é um programa que converte linguagem de alto nível em linguagem assembly. Da mes-
ma forma, um assembler (montador) é um programa que converte a linguagem assembly
em linguagem no nível da máquina.

2. (2018/IBADE/CÂMARA DE PORTO VELHO – RO/ANALISTA DE TECNOLOGIA E


INFORMÁTICA) Algumas linguagens exigem que o código fonte seja previamente tra-
duzido para linguagem de máquina antes de ser executado. Chama-se esta fase de:
ANOTAÇÕES

www.grancursosonline.com.br 4
DESENVOLVIMENTO DE SISTEMAS
Compiladores
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

a. Linkedição.
b. Interpretação.
c. Tradução.
d. Compilação.
e. Edição.
30m

GABARITO
1. C
2. d

�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES

www.grancursosonline.com.br 5

Você também pode gostar