Computação Múltipla Escolha

Analise a seguinte gramática LR(1): S -> E E -> E + T E -> T T -> T * F T -> F F -> ( E ) F -> id Considere a entrada id + id id. Qual é a ação que o analisador LR(1) deve tomar quando chegar ao ponto onde id id foi reconhecido?

Analise a seguinte gramática LR(1):

  1. S -> E
  2. E -> E + T
  3. E -> T
  4. T -> T * F
  5. T -> F
  6. F -> ( E )
  7. F -> id

Considere a entrada id + id id. Qual é a ação que o analisador LR(1) deve tomar quando chegar ao ponto onde id id foi reconhecido?

  1. Reduzir a produção F -> id.
  2. Reduzir a produção E -> T.
  3. Deslocar o operador *.
  4. Entrar em um estado de erro.
  5. Reduzir a produção T -> F.

Resolução completa

Explicação passo a passo

C
Alternativa C

Alternativa C - Deslocar o operador *

Análise da Questão

Esta questão envolve análise sintática LR(1), um método de parsing bottom-up utilizado em compiladores para verificar se uma entrada pertence à linguagem definida por uma gramática.

Compreendendo a Gramática

A gramática apresentada define expressões aritméticas com precedência de operadores:

RegraProduçãoSignificado
1S → EExpressão principal
2E → E + TAdição (menor precedência)
3E → TExpressão básica
4T → T * FMultiplicação (maior precedência)
5T → FTermo básico
6F → ( E )Parênteses
7F → idIdentificador

Traçando a Análise LR(1)

Para a entrada **id + id * id**, acompanhamos o processo:

Estado inicial: pilha = [0], entrada = id + id * id $

Passo a passo:

  1. Shift 'id' → reduz para F → reduz para T → reduz para E
  2. Shift '+' → adiciona ao estado
  3. Shift 'id' → reduz para F → reduz para T → reduz para E

No momento crítico: após reconhecer "id + id" e antes do "*"

Elemento na PilhaPróximo SímboloAção Correta
E (do primeiro id)+Manter
E + T (segundo id)*SHIFT

Por que Deslocar (*)?

Conflito de Precedência: O analisador LR deve decidir entre:

  • REDUZIR (aplicar regra E → E + T)
  • SHIFT (deslocar o próximo símbolo)

Como '*' tem maior precedência que '+', a ação correta é deslocar para garantir que a multiplicação seja avaliada antes da adição.

Árvore de Derivação Esperada

      E
     /|\
    E + T
      /|\
     T * F
     |   |
     F   id
     |
     id

Conclusão

Quando o analisador chega ao ponto onde "id id" foi reconhecido (contexto: id + [id id]), ele deve:

  • Deslocar o operador * (alternativa C)

Isso garante a precedência correta dos operadores, permitindo que a multiplicação seja resolvida antes da adição.

Alternativa C.

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.