Quais as fases a serem executadas para a obtenção de um programa executável, em uma linguagem compilada?

Passo 1

O enunciado pergunta quais etapas um compilador e suas ferramentas executam para transformar código-fonte em um binário pronto para rodar. O conteúdo aqui é o processo de compilação em linguagens compiladas, envolvendo pré-processamento, análise, geração e ligação.

Passo 2

Começamos com o pré-processamento: o pré-processador trata diretivas (como #include e #define), expande macros, inclui arquivos e remove comentários. Ao fim dessa etapa, temos um código-fonte “limpo” sem macros ou diretivas específicas da linguagem.

Passo 3

Em seguida vem a fase de análise, que normalmente se divide em três subfases mas podemos agrupar aqui: na análise léxica o compilador identifica tokens (palavras-reservadas, identificadores, números etc.); na análise sintática ele verifica a estrutura das sentenças conforme a gramática da linguagem; e na análise semântica ele confere tipos, escopos e consistência do programa.

Passo 4

Depois fazemos a geração de código intermediário e sua otimização: aqui o compilador produz uma representação genérica (por exemplo, código de três endereços ou árvore de sintaxe abstrata) e aplica transformações para melhorar desempenho (eliminação de código morto, propagação de constantes, entre outras).

Passo 5

A próxima etapa é a geração de código objeto, em que o compilador traduz o código intermediário otimizado para instruções de máquina específicas do processador alvo, produzindo um arquivo de objeto (.o ou .obj).

Passo 6

Em seguida vem a montagem (assembly), que transforma o código em linguagem simbólica em código binário de baixo nível e resolve rótulos locais, gerando efetivamente o arquivo de objeto definitivo.

Passo 7

Por fim, temos a edição de ligação (linking): o linker pega um ou mais arquivos objeto e bibliotecas (estáticas ou dinâmicas), resolve referências externas (funções e variáveis externas) e produz o executável final, pronto para ser carregado pelo sistema operacional.

Resposta

Pré-processamento → Análise léxica, sintática e semântica → Geração de código intermediário e otimização → Geração de código objeto → Montagem (assembly) → Edição de ligação (linking)

Exercícios relacionados