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.
- Construa a árvore sintáctica, utilizando as classes disponibilizadas na CDK (subclasses de cdk::node::Node).
- 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).