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:
-
Que interpretação (valor) seria dada às expressões legais (- 2 3 4) e (- 2)? E às expressões (+ 2) e (* 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.
-
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.
-
Desenhe a árvore sintática para a expressão (- 34 (*3 43)), utilizando sua resposta para o item anterior.