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?

Questão

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?

Alternativas

a) Realizar uma redução da produção stmt para else_stmt.

b) Realizar uma redução da produção if_stmt para stmt.

c) Procurar por um token de lookahead correspondente a else.

d) Procurar por um token de lookahead correspondente a uma instrução dentro do bloco then.

92%

e) Realizar uma redução da produção stmt para if_stmt.

Explicação

Em um analisador descendente preditivo LL(1), após reconhecer o prefixo de uma produção, o parser não faz reduções (isso é típico de parsers ascendentes como LR). Em LL(1), o próximo passo é expandir a derivação conforme a gramática e consumir a entrada, usando 1 token de lookahead para decidir qual produção aplicar.

Uma forma comum de gramática para esse tipo de comando é:

  • stmtif_stmtotherstmt \to if\_stmt \mid other
  • if_stmtif (cond) then stmt opt_elseif\_stmt \to \texttt{if}\ (cond)\ \texttt{then}\ stmt\ opt\_else
  • opt_elseelse stmtεopt\_else \to \texttt{else}\ stmt \mid \varepsilon

Depois que o analisador já reconheceu if (x > 0) then, ele ainda não terminou o if_stmtif\_stmt: pela produção, o próximo símbolo esperado é um stmt (a instrução do bloco then). Portanto, o próximo passo é olhar o próximo token da entrada para prever/selecionar qual alternativa de stmtstmt deve ser usada (por exemplo, início de atribuição, outro if, etc.).

depois de reconhecer esse stmt do then é que faria sentido olhar adiante para decidir se existe um else (isto é, ao entrar em opt_elseopt\_else).

Alternativa correta: (d).

Questões relacionadas

Ver últimas questões

Comece a estudar de forma inteligente hoje mesmo

Resolva questões de concursos e vestibulares com IA, gere simulados personalizados e domine os conteúdos que mais caem nas provas.

Cancele quando quiser.