Marque a alternativa que NÃO caracteriza uma etapa do processo de compilação.
- A)Análise Sintática: realiza a análise da estrutura gramatical do código-fonte e constrói uma árvore de análise sintática.
Correta, porque a análise sintática verifica a estrutura gramatical do código e monta a árvore de análise sintática.
- B)Análise Léxica: responsável por identificar os diferentes tokens no código-fonte, como palavras-chave, identificadores e operadores.
Correta, porque a análise léxica identifica os tokens do código-fonte, como palavras-chave, identificadores e operadores.
- C)Análise Semântica: verifica a conformidade do código-fonte com as regras da linguagem e realiza otimizações para melhorar o desempenho.
Errada, porque a análise semântica verifica o significado e a coerência do código, enquanto a otimização é uma etapa separada do compilador.
- D)Geração de Código: traduz a representação intermediária em código de máquina específico da plataforma de destino.
Correta, porque a geração de código transforma a representação intermediária em código de máquina para a plataforma-alvo.
- E)Otimização de Código: aplica técnicas para melhorar a eficiência do código gerado pelo compilador, como eliminação de código redundante e reordenamento de instruções.
Correta, porque a otimização de código busca melhorar a eficiência do programa gerado pelo compilador.
Gabarito: C
O processo de compilação costuma ser dividido em etapas bem conhecidas: análise léxica, análise sintática, análise semântica, otimização e geração de código. Pense nelas como uma linha de produção: primeiro o programa é quebrado em unidades menores, depois a estrutura da frase é conferida, em seguida o sentido é verificado, e só então o compilador tenta melhorar e transformar tudo em código de máquina. A análise léxica identifica os tokens do código, como palavras-chave, nomes de variáveis e operadores. A análise sintática verifica se esses tokens estão organizados de acordo com a gramática da linguagem, construindo estruturas como a árvore sintática. Já a otimização tenta deixar o código mais eficiente, reduzindo desperdícios e melhorando desempenho. O ponto da questão está na análise semântica. Ela não faz otimização: sua função é checar se o código faz sentido dentro das regras da linguagem, como compatibilidade de tipos, declarações corretas e uso coerente de identificadores. Em outras palavras, ela confere o significado, não o desempenho. Por isso, a alternativa C está errada. A banca misturou duas fases diferentes: análise semântica e otimização de código. Como etapa da compilação, otimização existe sim, mas não pertence à análise semântica. Esse é o tipo de confusão que aparece muito em prova quando a banca quer ver se você sabe separar cada fase do compilador.