Computação Múltipla Escolha

Durante o desenvolvimento de um analisador léxico para uma nova linguagem, o projetista percebe que os comandos IF, THEN e ELSE podem ser usados tanto como palavras-chave quanto variáveis. Esse tipo de ambiguidade aumenta a complexidade do scanner e afeta a separação entre as fases do compilador. Qual é a principal consequência desse cenário?

Durante o desenvolvimento de um analisador léxico para uma nova linguagem, o projetista percebe que os comandos IF, THEN e ELSE podem ser usados tanto como palavras-chave quanto variáveis. Esse tipo de ambiguidade aumenta a complexidade do scanner e afeta a separação entre as fases do compilador. Qual é a principal consequência desse cenário?

  1. O analisador léxico precisa reconhecer o contexto sintático para saber se a palavra é uma variável ou comando.
  2. O compilador deve executar o código para determinar o significado das palavras.
  3. O analisador léxico ignora a diferença entre palavras reservadas e identificadores.
  4. As palavras-chave deixam de ser reservadas e passam a ser redefinidas dinamicamente.
  5. O analisador sintático passa a gerar erros lógicos em tempo de compilação.

Resolução completa

Explicação passo a passo

A
Alternativa A

Alternativa A - O analisador léxico precisa reconhecer o contexto sintático para saber se a palavra é uma variável ou comando.

Introdução à Resolução

Esta questão aborda um problema clássico da teoria dos compiladores: a independência das fases de análise. Em um compilador padrão, a separação entre a análise léxica e a análise sintática é fundamental para a eficiência e modularidade do software.

A alternativa correta é a primeira, pois descreve exatamente a violação desse princípio quando palavras-chave podem atuar como variáveis.

Desenvolvimento do Raciocínio

Para entender a consequência, precisamos revisar os papéis de cada fase:

  • Análise Léxica (Scanner):
  • Responsável por ler o caractere por caractere.
  • Agrupa caracteres em tokens (palavras-chave, identificadores, operadores).
  • Deve funcionar de forma independente do contexto (não deve precisar saber onde a palavra está no código para classificá-la).
  • Análise Sintática (Parser):
  • Responsável pela estrutura gramatical.
  • Verifica se a sequência de tokens segue as regras da linguagem.
  • Trabalha com o contexto.

No cenário descrito na imagem, comandos como IF, THEN e ELSE podem ser variáveis. Isso cria um conflito direto:

  1. Se o analisador léxico vê a palavra IF, ele não pode decidir imediatamente se é um comando (KEYWORD) ou uma variável (IDENTIFICADOR).
  2. Para decidir, ele precisaria saber a posição da palavra na sentença (ex: após um parêntese ou antes de uma condição).
  3. Essa informação de posição pertence ao domínio da análise sintática.

Portanto, a principal consequência é que o analisador léxico perde sua autonomia e precisa acessar informações sintáticas para classificar corretamente o token. Isso aumenta a complexidade do scanner e borra a fronteira entre as fases, conforme mencionado no enunciado.

Análise Detalhada das Alternativas

Abaixo, verificamos por que as demais opções estão incorretas:

  • Execução do código: O compilador analisa o código estaticamente (antes da execução). Executar o programa para descobrir significados seria interpretação dinâmica, não compilação tradicional.
  • Ignorar a diferença: Embora o lexer possa tratar tudo como identificador inicialmente, a afirmação de que ele "ignora" não captura a complexidade arquitetural gerada. O problema central é a necessidade de contexto, não apenas a indiferença.
  • Redefinição dinâmica: Isso sugere alteração em tempo de execução (runtime), enquanto a questão trata da estrutura de compilação.
  • Erros lógicos: Erros lógicos são falhas semânticas. O analisador sintático gera erros de estrutura (gramática), mas a causa raiz aqui é a ambiguidade lexical, não a geração de erros lógicos pelo parser.

Conclusão

A capacidade de usar palavras-chave como variáveis força o analisador léxico a depender do contexto sintático para distinguir tokens. Isso viola o princípio de que a fase léxica deve ser independente e baseada em expressões regulares simples.

Alternativa A é a resposta correta.

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Computação

Ver mais Computação resolvidas

Tem outra questão de Computação?

Cole o enunciado, tire uma foto ou descreva o problema — a IA resolve com explicação completa em segundos.