Вы находитесь на странице: 1из 19

Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 1 von 19
Modulprfung 47501
Formale Sprachen & Compilerbau
(WS 09 / 10)
12.02.2010

Hinweise
- Bevor Sie mit der Bearbeitung der Aufgaben beginnen, mssen Sie auf allen Blttern
Ihren Namen und Ihre Matrikelnummer eintragen.
- Bei der Bearbeitung der Klausur sind keine Hilfsmittel zugelassen!
- Der Klausurtext enthlt ausreichend Platz zur Lsung der Aufgaben. Sie knnen auch
die Rckseiten der Bltter fr Ihre Lsungen nutzen. Sollten Sie trotzdem zustzliches
Papier bentigen, wenden Sie sich an die Klausuraufsicht. Die Nutzung eigenen
Papiers ist nicht gestattet.
- Sollte Ihre Lsung nicht unmittelbar unter oder neben der Aufgabenstellung stehen,
machen Sie bitte einen entsprechenden Hinweis. Streichen Sie diejenigen Teile der
von Ihnen geschriebenen Texte deutlich durch, die nicht in die Bewertung eingehen
sollen.
- Zum Bestehen der Klausur sind 40 Punkte erforderlich.
- Bitte schreiben Sie deutlich.

Viel Erfolg !

Aufgabe Max. Punktzahl Erreichte Punktzahl
1 (Scanner / Parser) 6
2 (Formale Sprachen) 5
3 (lexikalische Analyse) 10
4 (Top-Down-Analyse) 4
5 (LL(1)-Grammatik) 21
6 (Predictive Parser) 10
7 (Attribut. Gramatik) 12
8 (Symbol-/Hilfstabellen) 15
9 (bersetzungsschema) 8
10 (Optimierung) 9

Gesamtpunktzahl 100
Note:


Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 2 von 19




Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 3 von 19
Aufgabe 1 (Scanner und Parser) 6 Punkte

Ein Compiler besteht u.a. aus einem Scanner und einem Parser. Fr welche Phasen der
bersetzung sind diese Teile jeweils zustndig und welche Aufgaben bernehmen sie?

















Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 4 von 19
Aufgabe 2 (Formale Sprachen) 5 Punkte

1) Geben Sie einen berblick ber die Arten Formaler Sprachen, die in der Vorlesung
vorgestellt wurden sowie deren Beziehungen zueinander.



















2) Welche Art dieser Formalen Sprachen ist relevant fr die lexikalische Analyse und
wofr werden diese Sprachen dort benutzt?





Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 5 von 19
Aufgabe 3 (Lexikalische Analyse) 10 Punkte

1) In der Vorlesung wurde vorgestellt, wie man Schritt fr Schritt vorgeht, um von der
Darstellung eines Tokens durch einen regulren Ausdruck schlielich zu einem
deterministischen Automaten zu kommen, der genau die zum Token gehrenden
Lexeme akzeptiert.
Nennen Sie die in der Vorlesung genannten Schritte in der richtigen Reihenfolge.












2) Die folgende regulre Definition beschreibt zulssige Gleitkommazahlen:

digit -> [0-9]
sign -> + | -
fpnumber -> sign?digit
+
. digit
*
(E sign?digit
+
)?

Geben Sie den zu dieser regulren Definition gehrenden deterministischen
Automaten in Form eines Zustandsdiagramms an. Der Automat darf nur einen
Endzustand besitzen. Verwenden Sie keine c-bergnge.

Hinweise:
- Beachten Sie, dass das Ende einer Gleitkommazahl erst erkannt werden kann,
wenn das Folgezeichen kein zulssiges Gleitkommazahl-Symbol ist.
- Verwenden Sie, wo ntig, als Kantenmarkierung other um von einem Zustand z
1

in einen Zustand z
2
zu wechseln. other steht fr alle Zeichen, fr die nicht andere
bergnge aus dem Zustand z
1
definiert sind.



Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 6 von 19
Aufgabe 4 (Top-Down-Analyse) 4 Punkte

Gegeben sei die Grammatik G = (N, E, P, chead) mit

N = { chead, smodifier, amodifier, supertypes, implist, idlist }
E = { public, abstract, final, class, id, ,, extends, implements }
P = { chead smodifier amodifier class id supertypes (1)
supertypes extends id | (2)
extends id implist | (3)
implist | (4)
c (5)
implist implements idlist (6)
idlist id | (7)
idlist , id (8)
smodifier public | (9)
c (10)
amodifier abstract | (11)
final | (12)
c (13)
}.
G beschreibt den (vereinfachten) Kopf einer Java-Klassendeklaration.
Aufgabe:
Geben Sie fr die Tokenfolge abstract class id implements id, id den bei der Top-Down-
Analyse letztendlich entstandenen Ableitungsbaum an. Stellen Sie die Reihenfolge der
Ersetzungen der Nichtterminale durch entsprechende Zahlen an den Knoten fr die
Nichtterminale dar.













Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 7 von 19
Aufgabe 5 (LL(1)-Grammatiken) 21 Punkte

Gegeben sei die Grammatik G aus Aufgabe 4.
1) Bestimmen Sie fr alle nichtterminalen Symbole die zugehrigen FIRST
1
Mengen
und fr alle Produktionsregeln die initialen Steuermengen. Tragen Sie die ermittelten
Mengen in die untenstehende Tabelle ein.

Hinweis: Fr eine Produktion A y ist die zugehrige initiale Steuermenge
FIRST
1
(y).

FIRST
1

Produktionsregel initiale Steuermenge
chead smodifier amodifier
class id supertypes

supertypes extends id
supertypes extends id implist
supertypes implist

supertypes

implist implements idlist
idlist id
idlist idlist , id
smodifier public

smodifier

amodifier abstract
amodifier final

amodifier




Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 8 von 19

2) Tragen Sie in unten stehende Tabelle die FOLLOW
1
-Mengen fr alle Produktionen
ein, fr die diese Mengen noch zur Bestimmung der endgltigen Steuermengen
bentigt werden. Tragen Sie anschlieend fr alle Produktionen die endgltigen
Steuermengen in die Tabelle ein.


Produktionsregel FOLLOW
1
endgltige Steuermenge
chead smodifier amodifier
class id supertypes

supertypes extends id
supertypes extends id implist
supertypes implist
supertypes
implist implements idlist
idlist id
idlist idlist , id
smodifier public
smodifier
amodifier abstract
amodifier final
amodifier














Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 9 von 19
3) Begrnden Sie mithilfe Ihrer Ergebnisse aus 2), warum G keine LL(1)-Grammatik ist.













4) Ersetzen Sie die problematischen Produktionen mit Hilfe der Verfahren aus der
Vorlesung durch LL(1)-fhige Produktionen. Nennen Sie jeweils das angewendete
Verfahren. Zeigen Sie fr die genderten Regeln durch Angabe der Steuermengen,
dass diese jetzt LL(1)-fhig sind.






Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 10 von 19
Aufgabe 6 (Predictive Parser) 10 Punkte

Gegeben sei die LL(1)-Grammatik G = (N, E, P, E) mit N = { E, T, R } und
E = { (, ), +, -, num }.
Zu G gehren die folgenden Produktionsregeln und Steuermengen:















1) Erstellen Sie die zu G gehrende Analysetabelle. Tragen Sie in die Tabelle auch die
error-Angaben ein.
Nummer Produktionsregel Steuermenge
(1)
E T R
{ (, num }
(2)
R + T R { + }
(3)
R - T R { - }
(4)
R { $, ) }
(5)
T ( E ) { ( }
(6)
T num { num }


Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 11 von 19


2) Analysieren Sie die Eingabe ( num ) num, indem Sie die Analyse mit Hilfe des
abstrakten Parsers durchfhren. Geben Sie an, ob die Tokenfolge syntaktisch korrekt
ist oder nicht und begrnden Sie Ihre Antwort mithilfe des Analyseverfahrens.


Stack Eingabe Ausgabe
E $ ( num ) num $



















Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 12 von 19
Aufgabe 7 (Attributierte Grammatiken) 12 Punkte

1) Geben Sie zu der untenstehenden attributierten Grammatik G an, welche der Attribute
synthetisiert, intrinsisch oder vererbt sind, indem Sie in unten stehender Tabelle an der
richtigen Stelle ein X eintragen. (num.val ist ein Tokenattribut, dessen Wert von der
lexikalischen Analyse geliefert wird.)



























Attribute vererbt synthetisiert intrinsisch
A.val
F.val
F.base
B.val
Z.val
Produktionsregeln Semantische Regeln
A F / B A.val := F.val
F.base := B.val
F F
1
Z F
1
.base := F.base
F.val := F
1
.val * F
1
.base + Z.val
F F.val := Z.val
Z 0 Z.val := 0

Z 9 Z.val := 9
B num B.val := num.val


Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 13 von 19

2) Zeichnen Sie den Abhngigkeitsgraphen zur Tokenfolge 497 / num. Tragen Sie dabei
vererbte Attribute links und synthetisierte rechts vom zugehrigen Knoten des
Ableitungsbaums ein. Das Startsymbol der Grammatik ist A.































3) Ist G eine L-attributierte Grammatik oder nicht? Begrnden Sie Ihre Antwort.












Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 14 von 19
Aufgabe 8 (Symbol- und Hilfstabellen bei der bersetzung) 15 Punkte

Gegeben sei das folgende Programmfragment:

program main;

type string = array[8] of char;
type stud = record
matr : integer;
name : string;
end;
var name : string;
st : stud;


procedure make (matr : integer; name : string; var st : stud)

** begin
...
end;

begin
...
end.

Tragen Sie die fr dieses Programm bei der bersetzung erzeugten Eintrge in die unten
stehenden Tabellen fr Variablen & Konstanten, Prozeduren etc. ein.
Stellen Sie den Stack von Namenstabellen zu dem Zeitpunkt dar, an dem die bersetzung die
durch ** gekennzeichnete Zeile erreicht hat.
Hinweise: Nehmen Sie an, dass der erste auszufhrende Befehl von make an Byte 16 des
Codespeichers beginnt. Nehmen Sie weiterhin an, dass char 1-Byte Lnge und integer
4-Byte-Lnge besitzen und ein entsprechendes Alignment auf Byte bzw. 4-Byte-Grenzen
bentigen. Alle Variablen, die nicht zu den Grunddatentypen gehren, bentigen ein
Alignment auf 8-Byte-Grenzen.
(Die Tabellen besitzen mglicherweise mehr Zeilen als ntig.)

Variablen & Konstanten

Index type
1
name s_depth offset size value alignm.








1
Folgende Werte sind fr die Spalte 'type' zulssig: 'var', 'const', 'refparam', 'valparam', 'recordfield'


Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 15 von 19
Prozedurtabelle

Index name static_depth static_size start



Typtabelle

Index type
2
name nocomps compsize compindex fieldtable
1 integer
2 real
3 boolean
5 char




Feldtabelle (Fieldtable)

Index fieldname index_in_vartab




Stack von Namenstabellen

Tabelle fr Hauptprogramm Tabelle fr make
name index_in_vartab







name index_in_vartab







2
Zulssige Werte fr die Spalte 'type': 'integer', 'real', 'boolean', 'char', 'record', 'array'


Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 16 von 19
Aufgabe 9 (bersetzungsschema fr Kontrollstrukturen) 8 Punkte

Geben Sie das bersetzungsschema an fr

loop do stmt while boolexpr

Der durch die gesuchten semantischen Regeln des bersetzungsschemas generierte Code soll
untenstehender Grafik bzw. untenstehendem Codeschema gengen.





Hinweise:
- Die Sprungmarken alpha und beta, an die spter im bersetzten Code bei
Auswertung des booleschen Ausdrucks zu true bzw. false gesprungen wird, mssen in
semantischen Regeln vor der bersetzung von boolexpr mit Hilfe der Funktion
newlabel() erzeugt und den entsprechenden Attributen von boolexpr (nmlich
boolexpr.true bzw. boolexpr.false) zugewiesen werden.
- Die Sprungbefehle zu alpha und beta (z.B. goto beta) werden erst bei der
bersetzung von boolexpr (d.h. bei der Generierung von Code(boolexpr)) erzeugt.
Das bersetzungsschema fr loop do stmt while boolexpr braucht diese
Arbeit also nicht zu bernehmen.
- Verwenden Sie in semantischen Regeln die Funktion putcode, um bentigten
3-Adress-Code zu erzeugen wie z.B. putcode(start ':' 'noop').
- Die Funktion newlabel() erzeugt einen neuen Eintrag in der Labeltabelle und gibt
den zugehrigen Tabellenindex zurck.


alpha: noop

// Code fr stmt

// Code fr boolexpr
// Enthlt Sprungbefehle
// nach alpha & beta

beta : noop


Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 17 von 19


Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 18 von 19
Aufgabe 10 (Optimierungen) 9 Punkte

1) Teilen Sie das unten stehende 3-Adress-Programm in Basisblcke auf.



Basisblock Anweisungen Grund fr Einteilung

(1) a := 3
(2) b := 2
(3) x := a + b
(4) z := a
(5) m := x * z
(6) y := m + x
(7) if m > z then goto 10
(8) y := z - y
(9) if y < m then goto 16
(10) z := x + z
(11) i := m + x
(12) if i > z then goto 5
(13) y := x - z
(14) i := i * 3
(15) goto 8
(16) x := z * y
(17) z := x + y




Name, Vorname, Matrikelnummer Bitte unbedingt leserlich ausfllen

Seite 19 von 19
2) Geben Sie den zugehrigen Flussgraphen an.




















3) Fhren Sie im ersten Basisblock nacheinender Konstantenpropagation und
Konstantenentfaltung durch. Kennzeichnen Sie jeweils die Anweisungen, bei denen
Konstantenpropagation bzw. Konstantenentfaltung durchgefhrt wurde. Eliminieren
Sie anschlieend tote Variable aus dem Basisblock.

Вам также может понравиться