Compilerbau WiSe 2002/03

Übungsblatt 8

Gegeben sei folgende Grammatik in bison-Notation:
program: 'program' id '=' block '.' ;
block: 'begin' deklarationen anweisungen 'end' ;
deklarationen: | deklaration ';' deklarationen  ;
deklaration: 'var' id ':' type ;
type: 'int' | 'real' | 'bool' ;
anweisungen: anweisung ';' anweisungen ;
anweisung: einfache_anw | bedingte_anw | wielderhol_anw ;
einfache_anw: wertzuweisung ;
wertzuweisung: id ':=' ausdruck ;
bedingte_anw: 'if' ausdruck 'then' block 
   | 'if' ausdruck 'then' block 'else' block  ;
wiederhol_anw: 'while' ausdruck block ;
ausdruck: id | konstante | ausdruck binop ausdruck ;
binop: '*' | '/' | '+' | '-' | '=' | '<>' | '<' | '>' | '||' | '&&' ;
konstante: REALCONST | INTCONST | BOOLCONST ;
id: IDENTIFIER ;
Gegeben sei folgendes Programm
program check = 
begin
 var i: int;
 var j: int;
 var b: bool
 var r1: real;
 var r2: real;

 i := 5;
 j := 3.3;
 r1 := i/j;
 r2 := 1.0/r1;
 b = r1 > r2;
 if (b && i<j) 
 then
  begin b := TRUE end
 else 
  begin b := FALSE end
 fi 
end
      

Aufgabe 1

Geben Sie einen Strukturbaum für das (ggf. korrigierte) Programm an, und attributieren Sie ihn mit den Typen der jeweiligen Ausdrücke. Welche Attribute sind ererbt, welche generiert?

Aufgabe 2

Erweitern Sie die Grammatik um Attributregeln, die die Typüberprüfung automatisch durchführen.

Aufgabe 3

Erweitern Sie die Grammatik um Attributregeln, die eine Identifikatiortabelle erstellen und die Identifikatorauftretn mit den entsprechenden Indizes attributieren.

Dietmar Lammers
Last modified: Mon Dec 8 09:25:22 CET 2003