Tópicos

Processamento semântico.

Considere a seguinte gramática (ε 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 a classe (cdk::semantics::SymbolTable) e uma classe para símbolos semelhante à utilizada no Compact (CompactSymbol).

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).