Ybadoo - Soluções em Software Livre
Turmas
2º Semestre de 2026

A compilação de um programa de alto nível para código de máquina é um processo complexo que envolve múltiplas fases inter-relacionadas. Cada fase possui responsabilidades bem definidas e depende da saída da fase anterior para executar sua tarefa corretamente. A ordem em que essas fases são executadas reflete a progressão lógica desde a compreensão do texto-fonte até a produção do executável final. Assinale a alternativa que apresenta a ordem CORRETA das fases de um compilador, da primeira à última etapa executada.

a. Análise Sintática → Análise Léxica → Análise Semântica → Geração de Código Intermediário → Alocação de Variáveis → Otimização de Código → Geração de Código Objeto.

b. Análise Léxica → Análise Sintática → Análise Semântica → Geração de Código Intermediário → Otimização de Código → Alocação de Variáveis → Geração de Código Objeto.

c. Análise Léxica → Análise Sintática → Geração de Código Intermediário → Análise Semântica → Otimização de Código → Alocação de Variáveis → Geração de Código Objeto.

d. Análise Léxica → Análise Sintática → Análise Semântica → Otimização de Código → Geração de Código Intermediário → Alocação de Variáveis → Geração de Código Objeto.

e. Análise Léxica → Análise Sintática → Análise Semântica → Geração de Código Intermediário → Alocação de Variáveis → Otimização de Código → Geração de Código Objeto.

A ordem clássica das fases de um compilador, conforme apresentada na literatura de referência (como o "Livro do Dragão Vermelho" de Aho et al.), segue uma progressão lógica desde a leitura do texto-fonte até a produção do executável:

Tabela com a ordem correta das fases
OrdemFaseResponsabilidade principal
1Análise LéxicaLê o código-fonte caractere a caractere e agrupa-os em tokens (unidades léxicas significativas).
2Análise SintáticaVerifica se a sequência de tokens respeita a gramática da linguagem, construindo a árvore sintática.
3Análise SemânticaVerifica a consistência semântica do programa (tipos de dados, escopo, compatibilidade de operações).
4Geração de Código IntermediárioProduz uma representação intermediária do programa (ex.: código de três endereços), independente de máquina.
5Otimização de CódigoAplica transformações para melhorar o código intermediário (reduzir tempo/espaço), ainda de forma independente de máquina.
6Alocação de VariáveisDefine o mapeamento de variáveis para registradores e posições de memória, já considerando a arquitetura alvo.
7Geração de Código ObjetoProduz o código de máquina (ou assembly) final, específico para a arquitetura alvo.

Diante do exposto, a sequência correta é a apresentada em:

b. Análise Léxica → Análise Sintática → Análise Semântica → Geração de Código Intermediário → Otimização de Código → Alocação de Variáveis → Geração de Código Objeto.