Compiladores - Atividade 11

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

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

Valor: 3,0 pontos na 2ª Nota.

Data da Entrega Limite: 31/07/2021

Questão 01 - 3,0 Pontos

Para as gramáticas das atividades 09 e 10, realize os seguintes passos:

  1. Construa o DFA de itens LR(1) para a gramática.
  2. Construa a tabela de análise LR(1) geral.
  3. Construa o DFA de itens LALR(1) para a gramática.
  4. Construa a tabela de análise sintática LALR(1).
  5. Descreva as diferenças que podem ocorrer entre as ações de um analisador LR(1) geral e um analisador LALR(1).

Questão 02 - 2,0 Pontos - Extra

A gramática a seguir representa expressões aritméticas simples em notação prefixa similar a de LISP:

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

Por exemplo, a expressão (*(- 2) 3 4) tem como valor -24. Escreva uma especificação Yacc para um programa que compute e imprima o valor das expressões nessa sintaxe. (Dica: Isso requer que a gramática seja reescrita, bem como seja utilizado um mecanismo para passar o operador para lexp-seq.)

Observação: Existe um pacote chamado clisp no Ubuntu e derivados que instala um interpretador LISP. Ele é meio arcaico e complicado de usar, mas serve para verificar os valores que vocês possam ter dúvida para as sentenças. Ao utilizá-los, lembre de usar espaços em branco para separar o operador dos operandos.