| Compilerbau-Klausur im WS99/00
Name: |
|
Vorname: |
|
Matrikelnummer: |
|
A1 (16) |
A2 (10) |
A3 (12) |
A4 (16) |
A5 (9) |
A6 (11) |
A7 (16) |
A8 (14) |
A9 (16) |
|
|
|
|
|
|
|
|
|
|
Aufgabe 1
Gegeben Sei folgende Sprache:
L = { axnb | x=a oder x=b, n>=0 }
-
Zeichnen Sie einen Automaten auf, der diese Sprache
akzeptiert (5Pkt)
-
Geben Sie den Automaten formal an, entsprechend der Definition
endlicher Automaten. (5Pkt)
-
Gibt es einen deterministischen endlichen Automaten, der L
akzeptiert? Falls ja, geben Sie einen solchen an. (6Pkt)
Aufgabe 2
Zeigen oder wiederlegen Sie, das
L
kontextfrei ist,
für
-
L = { anb2nc3n | n>0 } (10Pkt)
Aufgabe 3
Sei folgende Grammatik gegeben:
G = ( {S,A,B,C}, {a,b}, P, S)
P = { S ::= eps | ABA | BC | DB ,
A ::= eps | aA ,
B ::= eps | bB ,
C ::= cC ,
D ::= dD | A }
Geben Sie eine
eps
-freie Version der
Grammatik an (12Pkt)
Aufgabe 4
Für die Grammatik
G = ( {A,M}, {a,t}, P, A )
P = { M ::= v | M * v , A ::= M | A + M }
-
Attributieren Sie die Produktionen von
G
so,
daß A.val
als Wert die Auswertung der Eingabe
erhält. Gehen Sie dabei davon aus, das der Lexer beim
Einlesen einer Zahl das Symbol v
und dann die
Funktion Value(v)
den Zahlwert liefert, der zu
v
geparsed wurde.
(9Pkt)
-
Prüfen Sie ihre Attributierung aus dem ersten Teil, indem
Sie den Strukturbaum für den Ausdruck
4 * 3 + 2
aufzeichnen, und an den Knoten die jeweiligen Attribute
vermerken. (7Pkt)
Aufgabe 5
Zerlegen Sie den Ausdruck
(((( a + b ) / c ) + ( a * f )) / b )
nach der Kellermethode. Geben Sie dabei bei jedem Schritt auch
die freien Hilfsvariablen an. (9Pkt)
Aufgabe 6
-
Welche Bedeutung hat die reduzierte Anfangsadresse eines
Feldes, und wie berechnet man sie? (7Pkt)
-
Wieviel Speicherzeller werden für das Feld
var a array[0:12,-8:2] of boolean
benötigt? (4Pkt)
Aufgabe 7
Geben Sie den Identifikatorenkeller für folgendes Programm an (16Pkt):
programm Keller =
begin
var a: integer;
var x: real;
var f: array[0..2] of real;
proc mix(y:real) =
begin
var a: real;
a := y;
end;
proc max(u:integer,w:integer) =
begin
proc diff(v:integer) =
begin
var x: real;
x := 5.0/v;
end;
u := 2 * w;
diff(u);
end;
mix(x);
max(a,a);
end.
Aufgabe 8
Erläutern Sie, woher das Laufzeitsystem die notwendigen
Informationen erhält, um die Inhalte der 5 Linkage-Zellen eines
neu anzulegenden Festspeicherblocks festzulegen. (14Pkt)
Aufgabe 9
-
Welche Code wird für die folgende Anweisung
erzeugt, wenn
a
und b
gewöhnliche
Identifikatoren sind, und x
ein formaler
Parameter? (6Pkt)
a := b + x
-
Welcher Code wird für folgendes Programm erzeugt?
(Die Ellipsen stehen für beliebigen Code und können auch im
generierten Code durch drei Punkte dargestellt werden) (10Pkt)
programm Demo =
begin
...
var a: integer;
var b: integer;
proc p(x:integer) = begin a:=x end;
...
a := b;
p(a);
...
end.