Prévia do material em texto
Fases do Compilador Processo Genérico de Compilação Análise Léxica divide código Código-fonte passa por pré-processador, em tokens e descarta espaços análise léxica, sintática e semântica. e comentários. Análise Sintática verifica Após análise, gera-se código estrutura gramatical e monta intermediário, otimizado e código final árvore sintática. em Assembly. Análise Semântica checa Montador converte Assembly em tipos, declarações e sentido código-objeto para posterior ligação. das instruções. Ligador une módulos e bibliotecas, Geração e otimização de formando módulo de carga para execução. código intermediário e final em linguagem de montagem. Compiladores Conceitos Básicos Bibliotecas e Compiladores traduzem Bibliotecas são código-fonte de alto para coleções de funções baixo nível. Interpretadores reutilizáveis para Código-fonte é conjunto modularidade e ordenado de instruções em compartilhamento. linguagem de programação. Bibliotecas estáticas Código-objeto é código são incorporadas ao compilado, não executável binário final, diretamente, com aumentando seu referências. tamanho. Pré-processador manipula Bibliotecas dinâmicas diretivas, macros e Erros e Verificações são referenciadas e comentários antes da compartilhadas entre Erros léxicos ocorrem por compilação. caracteres inválidos fora do programas em tempo de execução. alfabeto da linguagem. Bibliotecas dinâmicas Montador, Ligador e Carregador Erros sintáticos são falhas na estrutura gramatical, como Interpretadores Montador converte código de montagem em parênteses não fechados. código-objeto com referências. Erros semânticos envolvem e Ligador une módulos-objeto e sentido incorreto, como instrução por instrução bibliotecas em módulo de carga para atribuir texto a variável em tempo real. execução. inteira. São mais lentos que Carregador transfere código para Compiladores detectam mais compiladores por não memória e ajusta endereços para tipos de erros que otimizarem código antes execução. interpretadores, que detectam da execução. Carregadores podem ser absolutos menos. Detectam erros (fixos) ou realocáveis (flexíveis na memória). principalmente de sintaxe e tipos durante a execução. Facilitam depuração e são indicados para iniciantes e desenvolvimento rápido.