Computação Múltipla Escolha

Dado o seguinte trecho de código na linguagem de programação Python: if (x > 0) then y = x + 1; else y = x – 1; Suponha que você está construindo um analisador sintático descendente LL(1) para essa linguagem. Qual é o próximo passo de análise após reconhecer a produção if (x > 0) then?

Dado o seguinte trecho de código na linguagem de programação Python:

if (x > 0) then
y = x + 1;
else
y = x – 1;

Suponha que você está construindo um analisador sintático descendente LL(1) para essa linguagem. Qual é o próximo passo de análise após reconhecer a produção if (x > 0) then?

  1. Procurar por um tokende lookaheadcorrespondente a else.
  2. Procurar por um token de lookaheadcorrespondente a uma instrução dentro do bloco then.
  3. Realizar uma redução da produção stmt para else_stmt.
  4. Realizar uma redução da produção stmt para if_stmt.
  5. Realizar uma redução da produção if_stmt para stmt.

Resolução completa

Explicação passo a passo

A
Alternativa A

Análise da Questão de Compiladores

Esta questão trata de análise sintática com analisador LL(1), um tipo de parser descendente preditivo utilizado na construção de compiladores.

Entendendo o Contexto

Em um analisador LL(1):

  • O parser opera de forma descendente (do não-terminal para os terminais)
  • Usa uma única posição de lookahead (próximo token de entrada)
  • Decide qual produção aplicar antes de consumir o token

Comportamento do Parser após "if (x > 0) then"

Após reconhecer if (x > 0) then, o parser precisa decidir qual caminho seguir no grafo de análise:

SituaçãoPróximo Token EsperadoProdução Aplicada
Bloco then apenasQualquer token válido (ex: identificador, número)Produção sem else
Bloco then + elseToken elseProdução com else

Por que a Alternativa A é Correta?

A alternativa A está correta porque:

  • Em LL(1), após reconhecer then, o parser precisa verificar o lookahead para determinar se existe um bloco else
  • Isso evita ambiguidade entre if ... then ... e if ... then ... else ...
  • A decisão é tomada antes de analisar o conteúdo do bloco then

Por que as Outras Alternativas estão Incorretas?

  • B: Analisar o bloco then ocorre antes de chegar ao then
  • C: Redução para else_stmt não faz sentido gramatical neste contexto
  • D & E: Reduções são típicas de parsers LR (bottom-up), não LL(1) (top-down)

⚠️ Nota Importante: Em compiladores reais, a resolução da ambiguidade "dangling else" geralmente segue a regra de associar else ao if mais próximo, mas isso é decidido pelo analisador sintático durante a construção das tabelas FIRST/FOLLOW.

Conclusão

Alternativa A

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.