Tópicos

Processamento semântico.

Exercício 1

Considere a seguinte gramárica ( ε representa a produção nula), onde os operadores WRITE (não associativo), '=' (associativo à direita) e '+' (associativo à esquerda) têm precedências crescentes.

  1. Construa a árvore sintáctica, utilizando as classes disponibilizadas na CDK (subclasses de cdk::node::Node).
  2. Traduza a árvore sintáctica para um programa em C, utilizando o padrão de desenho Visitor (mantenha informação sobre símbolos utilizando as classes cdk::Symbol e cdk::SymbolTable).

prog -> decls exprs '.'

decls -> ε | decls decl ';'

decl -> INT ID | STR ID init

init -> ε | '=' STRING

exprs -> expr | exprs ',' expr

expr -> INTEGER | ID | ID '=' expr | expr '+' expr | WRITE expr

Resolução

A solução está disponível no wiki da disciplina, assim como um exemplo de utilização da tabela de símbolos e do "visitor" de validação de tipos no gerador de C do Compact (tal como apresentado na aula teórica e que pode também ser útil no projecto).