Compiladores - Atividade 05

Leia com atenção as instruções abaixo.

Coloque os arquivos da atividade na pasta atividades/atividade05 no seu repositório. Use a sintaxe da linguagem Markdown e coloque as respostas no arquivo atividade05.md.

Valor: 3,0 pontos na 1ª Nota.

Data da Entrega Limite: 19/06/2021

Questão 01 - 3,0 Pontos

Considere a gramática a seguir:

lexp -> número | (op lexp-seq) op -> +|-|* lexp-seq -> lexp-seq lexp | lexp

Essa gramática pode ser vista como uma representação de expressões aritméticas de inteiros simples em forma prefixa similar a linguagem LISP. Por exemplo, a expressão 34 -3 * 42 seria escrita nessa gramática como (- 34 (* 3 42)).

Responda às perguntas abaixo:

  1. Que interpretação (valor) seria dada às expressões legais (- 2 3 4) e (- 2)? E às expressões (+ 2) e (* 2)?
  2. Precedência e associatividade são problemas para essa gramática? A gramática é ambígua? Mostre alguns exemplos de derivações para expressões e discuta se é possível considerar duas escolhas de regras em algum momento.
  3. Observando o exemplo da Figura 3.7 do livro texto, escreva declarações em C para uma estrutura de árvore sintática (abstrata) para a gramática. Novamente, é preciso entender as construções enum e struct em C para poder resolver esta questão.
  4. Desenhe a árvore sintática para a expressão (- 34 (*3 43)), utilizando sua resposta para o item anterior.