Você está na página 1de 14

Introdução a Compiladores

Professor Jiuney Pachevitch


Conceito

 Compilador é um programa que lê um


programa escrito numa linguagem – a
linguagem fonte – e o traduz num programa
equivalente numa outra linguagem – a
linguagem alvo. Durante o processo de
tradução, o compilador relata ao usuário a
presença de erros no programa fonte;
Análise sobre o programa fonte

 Análise léxica;
 Análise sintática
 Análise semântica;
Análise Léxica

 É também chamada de análise Linear ou


esquadrinhamento (scanning);
 Remove do código fonte comentários e espaços em
branco;
 Relaciona as mensagens de erro do compilador com
o programa fonte. Ex: Informa o número da linha em
que um erro ocorreu;
 Detecta os Tokens (reconhece identificadores,
palavras reservadas, valores literais, etc);
 Ex: int a, b, c = 0;
Análise Sintática

 Também pode ser chamada de análise


gramatical;
 Tem como principal função traduzir os
Tokens e descobrir a relação de uns com os
outros;
 Agrupa os tokens em frases gramaticais;
 As frases gramatical são representadas por
uma árvore gramatical;
Análise sintática II

 Árvore gramatical para a expressão:


montante := deposito_inicial + taxa_de_juros * 60
Análise sintática III

 A expressão:
printf variavel_com_texto;

 Esta expressão passaria pela análise léxica,


pois printf e identificador existem.
 A análise sintática reportaria um erro, pois
há a necessidade de um abre parenteses
logo após printf;
Análise Semântica

 Captura as informações de tipos para a fase


subseqüente da geração de código. Utiliza a
estrutura hierárquica determinada pela fase
de análise sintática;
 Checa se determinado operador recebe os
operandos que são permitidos pela
especificação da linguagem;
 Estrutura condicional switch em C;
Etapas de uma compilação

 O compilador analisa o código-fonte e caso não


encontre erros, transforma o código-fonte em
linguagem de máquina, gerando um arquivo
intermediário chamado de arquivo objeto .o ou .obj;
 Este arquivo objeto tem o programa em linguagem
de máquina, porém ele não pode ser executado;
 Para transformar o arquivo objeto em executável, é
necessário a utilização de um Linkeditor. O linkeditor
combina um ou mais arquivos compilador com
bibliotecas específicas.
 A linkedição obedece a padrões que no caso do
windows 32 bits é o formato de arquivos Portable
Executable.
Portable Executable

 O formato PE é basicamente uma estrutura


de dados que encapsula a informação
necessária para que o carregador do
sistema Windows possa manipular o código
executável que está empacotado. Isso inclui
biblioteca dinâmica de referências para
linking e exportação e importação de API;
Portable Executable Header
Compilado X Interpretado

 Alguns compiladores geram códigos


intermediários que não são executados
diretamente;
 Um exemplo é o compilador Java, que gera
um código intermediário chamado de
bytecode.
 Esse código intermediário é interpretado
pela máquina virtual Java e então é
executado.
Referências Bibliográficas

 AHO, Alfred V.; SETHI, Ravi; ULLMAN,


Jeffrey D. Compiladores – Princípios,
Técnicas e Ferramentas. LTC Editora: Rio
de Janeiro, 1995;