Difference between revisions of "Semantic Analysis/The Tiny language: semantic analysis example and C generation"

From Wiki**3

< Semantic Analysis
(New page: == The Problem (in Portuguese) == Considere a seguinte gramárica (ε representa a produção nula), onde os operadores '''WRITE''' (não associativo), '''=''' (associativo à direita) e ...)
 
Line 17: Line 17:
 
expr -> INTEGER | ID | ID '=' expr | expr '+' expr | WRITE expr
 
expr -> INTEGER | ID | ID '=' expr | expr '+' expr | WRITE expr
 
</text>
 
</text>
 +
 +
== Solution ==
 +
 +
[[category:Compilers]]
 +
[[category:Teaching]]

Revision as of 19:19, 11 May 2008

The Problem (in Portuguese)

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

<text> 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 </text>

Solution