|
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