Wichtige Hinweise:
• Schalten Sie, soweit noch nicht geschehen, sofort Ihr Mobiltelefon aus!
• Schalten Sie auch alle anderen medizinisch nicht notwendigen potentiellen Lärmquellen aus.
• Entfernen Sie jetzt alle Gegenstände vom Tisch, außer einen Stift (kein Rot-, Grün-, oder Bleistift),
Ihren Studentenausweis und Ihren Personalausweis/Reisepass, Getränke.
• Schreiben Sie jetzt auf jedes Blatt in Druckbuchstaben Ihren Namen und Ihre Matrikelnummer. Blät-
ter ohne Namen ergeben 0 Punkte und werden nicht korrigiert! Füllen Sie insbesondere auch fol-
gende Tabelle in Druckbuchstaben aus:
Vorname
Nachname
Matrikelnummer
Fachbereich
Studienfach
Angestrebter Abschluss
Semester
Aufgabe 1 2 3 4 5 6 Σ
Punkte 8 20 27 18 10 22 105
Erreicht
Note, Unterschrift:
Vorname: Nachname: Matrikelnummer:
a) Nennen Sie jeweils eine Compiler-Phase im Front-End und Back-End und beschreiben Sie
diese in 1-2 Sätzen. (2P)
b) Ist die Menge der Sprachen, die durch einen nicht-deterministischen endlichen Automaten
(NFA) erkannt werden können größer als die Menge der Sprachen, die durch einen de-
terministischen endlichen Automaten (DFA) erkannt werden können? Begründen Sie Ihre
Antwort kurz. (2P)
c) Gegeben eine Menge von regulären Ausdrücken über dem Alphabet Σ und ein Wort aus
Σ+ . Wenn es für das Wort eine vollständige Zerlegung gibt, impliziert das, dass es auch
eine first-longest-match Zerlegung geben muss? Begründen Sie Ihre Antwort kurz. (2P)
d) Welche Informationen können von einem Bottom-Up Parser als Fehlerbericht ausgegeben
werden, wenn der Parser auf ein ungültiges Token stößt? Gehen sie davon aus, dass keine
Error-Recovery stattfindet. (2P)
2
Vorname: Nachname: Matrikelnummer:
3
Vorname: Nachname: Matrikelnummer:
Über dem Alphabet Σ = {A, B} sind über die folgenden regulären Ausdrücke zwei Symbolklas-
sen mit den angegebenen Prioritäten definiert:
a) Erstellen Sie einen DFA für jeden der regulären Ausdrücke. Dabei brauchen Sie keine Po-
tenzmengenkonstruktion anwenden. Konstruieren Sie anschließen den Produktautomaten
aus den DFAs. Sie können dabei davon ausgehen, dass alle nicht eingezeichneten Zu-
standstransitionen in den Senkenzustand übergehen. (12P)
b) Klassifizieren Sie die Endzustände nach den gegebenen Prioritäten. Geben Sie dazu an,
welcher der Teilautomaten in welchem Endzustand des Produktautomaten vorrangig ak-
zeptieren sollte. Geben Sie für die first-longest-match-Analyse des Wortes ABABAABA die
Zustandstripel aus ({N } ∪ ∆) × Σ∗ QΣ∗ × ∆∗ · {ε, lexerr} an, die beim Abarbeiten vom
Produktautomaten durchlaufen werden. Dabei sei Q die Menge der Zustände des Produkt-
automaten. Gehen Sie davon aus, dass der Backtrack-DFA im entsprechenden Modus aus
∆ startet, falls der Startzustand des Automaten ein akzeptierender Zustand ist. (8P)
4
Vorname: Nachname: Matrikelnummer:
5
Vorname: Nachname: Matrikelnummer:
6
Vorname: Nachname: Matrikelnummer:
S0 → S
S → id | id I | let E
E → I E | id
I → lpar S rpar
Stellen Sie die LR(0)-Itemsets für G auf. Ist G eine LR(0)-Grammatik? Begründen Sie Ihre
Antwort. (11P)
b) Gegeben Sei die Grammatik H mit
S0 → A
A→Bc|dnABf
B→r|ε
Bestimmen Sie die first1 - und follow1 Mengen der einzelnen Nonterminale und stellen
Sie anschließend die action- und goto-Tabellen zu H auf. (12P)
7
Vorname: Nachname: Matrikelnummer:
S0 → S
S → S; T | T
T → V | V assign E
E → V | num
V → id
Verwenden Sie zur Umwandlung der Grammatik Linksfaktorisierung und Eliminierung von
Linksrekursionen. Benennen Sie die einzelnen Verfahren, die Sie bei der Umwandlung ver-
wenden. (4P)
8
Vorname: Nachname: Matrikelnummer:
9
Vorname: Nachname: Matrikelnummer:
10
Vorname: Nachname: Matrikelnummer:
11
Vorname: Nachname: Matrikelnummer:
12
Vorname: Nachname: Matrikelnummer:
a) Kreuzen Sie in der Tabelle auf der nächsten Seite für Attribute L.l, L.p und B.v an, ob es
sich um ein synthetisches, oder ein vererbtes/inherites Attribut handelt. Richtige Antworten
werden mit einem Pluspunkt, falsche mit einem Minuspunkt gewertet. Die Teilaufgabe wird
minimal mit 0 Punkten gewertet. (3P)
b) Definieren Sie den Begriff „vererbtes Attribut“. (3P)
c) Gegeben sei die Grammatik G mit den Produktionen:
S → List
List → Item List | ε
Item → num
Mit G lassen sich Listen von Zahlen erstellen. Erweitern sie G zu einer Attributgrammatik,
sodass im Startzustand S das Attribute avg vorhanden sind, das den Durchschnittswert der
Liste angibt. Gehen Sie dabei davon aus, dass die mit G erstellten Listen nur positive, ganze
Zahlen (0 inklusive) enthalten. (12P)
13
Vorname: Nachname: Matrikelnummer:
Synthetisch
Vererbt
14
Vorname: Nachname: Matrikelnummer:
15
Vorname: Nachname: Matrikelnummer:
(a + b) ∗ (a + b) − c + (a + b) ∗ c
Geben Sie einen äquivalenten DAG ohne Redundanzen um. Beschriften Sie die Kanten
gegebenenfalls mit l und r, um zu verdeutlichen, auf welcher Seite der Operation der Kind-
knoten steht. Es gelten dabei die üblichen Eigenschaften der mathematischen Operatoren.
(5P)
b) Nutzen Sie die Value-Number-Methode, um zu dem folgenden Ausdruck einen DAG zu
konstruieren:
(n ∗ n + n)/2
16
Vorname: Nachname: Matrikelnummer:
17
Vorname: Nachname: Matrikelnummer:
18
Vorname: Nachname: Matrikelnummer:
1 n = -50
2 goto L 3
3 L1 sqr = n * n
4 sum = sqr + n
5 sum = sum / 2
6 if sqr < sum goto L2
7 a[n] = 1
8 L2 n = n + 1
9 L3 if n <= 50 goto L1
1 a = b * c
2 f = a - e
3 b = a + x
4 d = b * c
5 a = a + d
6 e = c * b
19
Vorname: Nachname: Matrikelnummer:
20
Vorname: Nachname: Matrikelnummer:
21
Vorname: Nachname: Matrikelnummer:
22
Vorname: Nachname: Matrikelnummer:
Beachten Sie, dass Konstanten anstelle von Adressen in den jeweiligen Befehlen verwendet
werden können. Diese werden mit einem vorangestellten # kenntlich gemacht. So bewirkt
beispielsweise der Ausdruck LD R1, #100, dass der Wert 100 in Register R1 geladen wird.
23