Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Compilador 
Na computação, um compilador é um tipo de tradutor que transforma um programa inteiro 
de uma linguagem de programação para outra. Normalmente, o idioma de destino é o 
código de máquina, embora também possa ser traduzido para um código intermediário ou 
texto. 
 
Ao contrário dos interpretadores, os compiladores reúnem vários elementos ou 
fragmentos na mesma unidade (um programa executável ou uma biblioteca), que podem 
ser armazenados e reutilizados. Este processo de tradução é conhecido como compilação. 
Construir um compilador envolve dividir o processo em uma série de fases que variam 
de acordo com sua complexidade. Essas fases são geralmente agrupadas em duas tarefas: 
a análise do programa de origem e a síntese do programa de destino. 
Análise: trata-se da verificação da correção do programa fonte, de acordo com a definição 
da linguagem nos termos da teoria formal da linguagem. Inclui as fases correspondentes 
à análise lexical (que consiste na decomposição do programa fonte em componentes 
lexicais), análise sintática (agrupamento dos componentes lexicais em frases gramaticais) 
e análise semântica (verificação da validade semântica das frases aceitas na fase de análise 
sintática). 
Síntese: seu objetivo é a geração da saída expressa na linguagem de objeto e geralmente 
é composta por uma ou mais combinações de fases de geração de código (geralmente 
código intermediário ou código de objeto ) e otimização de código (na Busca obter um 
programa objetivo o mais eficiente possível, de acordo com sua complexidade 
computacional ou complexidade de Kolmogórov: tempo de execução, espaço durante a 
execução, espaço a ser armazenado fora da execução, etc.). 
Alternativamente, as fases descritas para as tarefas de análise e síntese podem ser 
agrupadas em: 
• Parser ou front-end: é a parte que analisa o código fonte, verifica sua validade, 
gera a árvore de derivação e preenche os valores da tabela de símbolos. Esta parte 
é geralmente independentemente da plataforma ou sistema para o qual deve ser 
compilada e é composta pelas fases entre a análise lexical e a geração do código 
intermediário. 
• Gerador ou back-end: é a parte que gera o código de máquina, específico de uma 
plataforma, a partir dos resultados da fase de análise, realizada por este gerador. 
Essa divisão permite que o mesmo gerador seja usado para criar código de máquina para 
várias linguagens de programação diferentes e o mesmo analisador usado para examinar 
o código-fonte de uma linguagem de programação específica para produzir código de 
máquina em várias plataformas. Geralmente inclui geração e otimização de código 
dependente da máquina. 
Esta taxonomia de tipos de compilador não é exclusiva, portanto, pode haver 
compiladores que se enquadram em várias categorias: 
• Compiladores cruzados: geram código para um sistema diferente daquele em 
que estão trabalhando. 
• Otimizando compiladores: faça alterações no código para melhorar sua 
eficiência, enquanto mantém a funcionalidade do programa original. 
• Compiladores de passagem única: geram código de máquina a partir de uma única 
leitura de código-fonte. 
• Compiladores multipass: eles precisam ler o código-fonte várias vezes antes de 
produzir o código de máquina. 
• Compiladores JIT: eles são parte de um interpretador e compilam partes do 
código conforme necessário. 
Nos primeiros dias da computação, os compiladores eram considerados um dos softwares 
mais complexos que existiam. Os primeiros compiladores foram feitos programando-os 
diretamente em linguagem de máquina ou em assembler. 
Depois que um compilador estiver disponível, novas versões do compilador (ou outros 
compiladores diferentes) podem ser escritas na linguagem que o compilador compila. 
Existem ferramentas que tornam mais fácil escrever compiladores ou interpretadores de 
computador. Essas ferramentas permitem gerar o esqueleto do analisador a partir de uma 
definição formal da linguagem fonte, normalmente especificada por meio de uma 
gramática barata e formal, deixando apenas a tarefa de programar as ações semânticas 
associadas ao programador do compilador.

Mais conteúdos dessa disciplina