traduz de uma vez só todo o programa
escrito em linguagem de alto nível
(código-fonte) para um programa
equivalente escrito em linguagem de
máquina (código-objeto)
interpretadores
traduz (sem gerar código-objeto)
e em seguida executa,
uma-a-uma, as instruções de um
programa em linguagem de alto
nível (código-fonte)
montador
(ou Assembler): faz a tradução direta das
instruções Assembly para um programa
equivalente escrito em linguagem de
máquina
Analise Sintática
Análise Léxica (scanner)
Ele separa a sequência de caracteres que
representa o programa fonte em entidades ou
tokens, símbolos básicos da linguagem.
Durante a análise léxica, os tokens
são classificados como palavras
reservadas, identificadores,
símbolos especiais, constantes de
tipos básicos (inteiro real, literal,
etc.)
Outras funções atribuídas ao analisador
léxico são: ignorar espaços em branco e
comentários, e detectar erros léxicos.
Ele agrupa os tokens fornecidos
pelo analisador léxico em
estruturas sintáticas,
construindo a árvore sintática
O analisador sintático tem também por
tarefa o reconhecimento de erros
sintáticos, que são construções do
programa fonte
Identifica a estrutura gramatical do
programa e reconhece o papel de cada
componente
Analise Semântica
O compilador executa ainda a
análise semântica
Fundamentalmente, a análise semântica trata
os aspectos sensíveis ao contexto da sintaxe
das linguagens de programação. Por exemplo,
não é possível representar em uma gramática
livre de contexto
Desenvolvimento de Programas
Otimização de Código
O processo de otimização de
código consiste em melhorar o
código intermediário de tal
forma que o programa objeto
resultante seja mais rápido em
tempo de execução. Por
exemplo, um algoritmo para
geração do código
intermediário gera uma
instrução para cada operador
na árvore sintática, mesmo que
exista uma maneira mais
otimizada de realizar o mesmo
comando
Geração de Código
A fase final do compilador é a geração do código para o
programa objeto, consistindo normalmente de código
em linguagem assembly ou de código em linguagem de
máquina. Aqui é o processo de construir instruções da
linguagem máquina (em assembly, normalmente) que
simulam as instruções reconhecidas pelo analisador
sintáctico. A geração de código pode englobar: análise
semântica, geração de código intermédio, otimizadores
e geração de código final.
Objetivo: rearranjar o código do
programa incorporando a ele todas as
partes referenciadas no código original
resultando num código executável pelo
processador
Tarefa é feita pelos ligadores (linkadores)
Programa que recebe como entrada
um programa em linguagem
assembly ou de alto nível (dita
linguagem fonte) e produz como
saída as instruções deste programa
traduzidas para linguagem de
máquina