Processos Compilação
• Divide-se nas seguintes fases:
- Análise Léxica
- Análise Sintática
- Análise Semântica
- Geração de Código Intermediário
- Otimização de Código Intermediário
- Geração de Código Objeto
- Otimização de Código Objeto
Visão Geral
Programa fonte
Análise léxica
Análise sintática
Gerenciador da tabela de símbolos
Análise semântica
Gerador de código intermed.
Otimizador de código
Gerador de código
Programa destino
Tratamento de erros
Compilação: Análise e Síntese
• Análise: quebra o código fonte em suas partes constituintes e cria uma representação intermediária do programa.
• Síntese: Constroi o programa-destino a partir da representação intermediária.
Análise
• Análise léxica – lê a seqüencia de caracteres e a organiza em tokens – seqüencias de caracteres com algum significado
• Análise sintática – agrupa os tokens em uma estrutura hierárquica com algum significado
• Análise semântica – verifica se os componentes de um programa se encaixam de forma a ter um significado adequado.
Tabela de Símbolos
• Estrutura de dados usada para guardar tokens e informações sobre eles:
• alocação de memória,
• tipo do identificador,
• escopo (onde é válido no programa)
• (se procedimento ou função) número e tipo dos argumentos, forma de passagem dos parâmetros e tipo do resultado.
Passos
• Um passo é uma travessia do programa fonte, ou de uma representação interna dele.
• Um compilador de um passo atravessa o programa uma única vez.
• Um compilador de múltiplos passos faz várias travessias • O projeto de um compilador é diretamente relacionado ao número de passos
Compilação em múltiplos passos
• Módulo principal (driver) chama cada um dos passos, responsáveis pela análise sintática, análise contextual e geração de código.
Driver do Compilador
Analisador Sintático
Analisador Contextual
Gerador de Código
Compilação em passo único
• Analisador sintático vai