Compiladores - Atividade 16

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

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

Valor: 3,0 pontos na 3ª Nota.

Data da Entrega Limite: 04/09/2021

Questão 01 - 3,0 Pontos

Considere a seguinte extensão da gramática da Figura 6.22 (página 332), para incluir declarações de funções e ativações:

programa -> var-decls ; fun-decls ; decls var-decls -> var-decls ; var-decl | var-decl var-decl -> id : tipo-exp tipo-exp -> int | bool | array [num] of tipo-exp fun-decls -> fun id( var-decls ) : tipo-exp ; corpo corpo -> exp decls -> decls ; decl | decl decl -> if exp then decl | id := exp exp -> exp + exp | exp or exp | exp [ exp ] | id (exps) | num | true | false | id exps -> exps, exp | exp

  1. Construa uma estrutura de subárvore adequada para as novas estruturas de tipos de funções e escreva uma função tipoIgual para dois tipos de funções.
  2. Escreva regras semânticas para a verificação de tipos das declarações e ativações de funções (representadas pela regra exp -> id (exps)), similar às regras da Tabela 6.10, página 333.