Gedächtnisprotokoll zur mündlichen Diplomprüfung
Kurs: 1810 Übersetzerbau
Datum: 11.4.2001
Prüfer: Prof. Güting
Beisitzer: Stephan Dieker
Dauer: ca. 25 min
Note: 1.0
Fragen:
-
Wofür werden Compiler eingesetzt? Ich habe dann die Beispiele aus
dem Kurs aufgezählt, k lassischerweise eben Übersetzung einer
höheren Programmiersprache in Assembler / Maschinensprache, ansonsten
Dokumentenbeschreibung etc. . Anmerkung von Prof. Güting: "Eben alles,
wo man syntaktische Strukturen erkennen kann".
-
In welche logischen Phasen wird ein Compiler gegliedert? Ich hab dann gesagt,
daß es eine Grobeinteilung in Analyse und Synthese gibt und dann
die 6 Phasen mit Ein- und Ausgabe aufgezählt.
-
Wie werden die Token in der lexikalischen Analyse beschrieben? -> reguläre
Ausdrücke
-
Was wird mit den Token beschrieben? Schlüsselwörter, Operatoren,
Bezeichner, Konstanten
-
Was sind reguläre Ausdrücke? Hier mußte ich erst mal die
Definition aus dem 1654 wieder aus dem Gedächtnis kramen und habe
mich so durchgeholpert, was ihm aber reichte. Er meinte noch, man müsse
da eigentlich zwischen regulären Ausdrücken und regulären
Mengen sauber unterscheiden.
-
Wie werden sie erkannt? endlicher Automat
-
Wie sieht so ein endlicher Automat aus?
-
Wie implementieren sie das von Hand?
-
Was machen sie, um es nicht von Hand implementieren zu müssen? Ich
verwende einen Scannergenerator wie z. B. lex.
-
Wie funktioniert das? Wirkungsweise von lex erklärt: Erzeugt aus regulären
Ausdrücken und C-Programmstücken ein C-Programm, daß den
DFA implementiert. Ihm war noch wichtig, daß in der Aktion der Wert
des Token mit return an den Parser zurückgegeben wird.
-
Welche Parse-Strategien kennen sie? Bottom-Up und Top-Down
-
Erläutern sie die beiden mal kurz! Hier habe ich wirklich kurz erläutert,
daß ich im ersten Fall die Eingabe auf einen Stack schiebe und versuche,
Handles zu erkennen und bis zum Startsymbol zu reduzieren, im anderen Fall
vom Startsymbol aus losgehe und versuche, die Eingabe zu erzeugen.
-
Welches ist der einfachste Bottom-Up-Parser, den sie kennen? Operator-Präzedenz-Parser
-
Erläutern sie mal, wie der funktioniert! Ich hab zunächst erzählt,
wie die Grammatik aussehen muß, daß ich die <,=,> -Relationen
festlege und dann beschrieben, wie das Parsen vor sich geht.
-
Top-Down-Analyse: Muß die Grammatik bestimmten Bedingungen genügen?
Ja, keine Linksrekursion, da sonst Endlosschleifen entstehen
-
Und wenn da welche drin ist, lassen sie das Parsen dann sein? Nein, hier
habe ich erzählt, daß man die Linksrekursion immer beseitigen
kann, Verweis auf Greibach-NF (steht im 1820, hat ihn wohl etwas überrascht,
daß das kam). Dann noch Linksfaktorisierung am Beispiel If-Statement
erklärt.
-
Wie erhalten sie die Steuermengen? Informal erklärt, saubere Definition
sollte ich nicht mehr aufschreiben
-
Wie implementieren sie daß? Direkt oder mit rekursivem Abstieg.
-
Wie implementieren sie den rekursiven Abstieg genau? Prozedur für
ein Nichtterminal in Pseudocode aufgeschrieben
-
Wie kommen wir jetzt vom Parser zur Übersetzung? Attributierte Grammatik:
Erweiterung der Symbole um Attribute und der Regeln um die Funktionen zur
Attribut-Berechnung
-
Was für Arten von Attributen kennen sie? Vererbt und Synthetisiert
-
Was ist eine Syntaxgesteuerte Definition? Erlaubt Seiteneffekte wie z.
B. Manipulation einer globalen Symboltabelle
-
Was ist ein Übersetzungsschema? Habe etwas in der Form von A -> B
{} C aufgeschrieben. Ihm war dabei wichtig, daß das Übersetzungsschema
die Reihenfolge der Aktionen genau festlegt. (Ich hatte mich ehrlich gesagt
beim Üben gefragt, wo eigentlich der Unterschied zwischen syntaxgesteuerter
Definition und Übersetzungsschema ist).
-
Was für spezielle Formen von attributierten Grammatiken kennen Sie?
S- und L-attributierte Grammatik, habe dabei noch erwähnt, daß
S-attributiert besonders geeignet für Bottom-Up-Parser ist
-
Wie kommen sie ausgerechnet auf diese komische Definition bei der L-attributierten
Grammatik? Das sind genau diejenigen Attribute, die ich mit rekursivem
Abstieg = Tiefendurchlauf durch Syntaxbaum berechnen kann
-
Wie genau implementieren sie eine L-attributierte Grammatik im rekursiven
Abstieg? Hier war ihm wichtig, daß die synthetisierten Attribute
zu den Rückgabewerten und die vererbten Attribute zu den Eingabeparametern
der Funktionen pro Nichtterminal werden.
Gesamteindruck:
Obwohl die Prüfung vom Ergebnis her problemlos verlaufen ist und
Prof. Güting bei einigen kleinen Ungenauigkeiten auch drüber
hinweggegangen ist, habe ich mich in der Prüfung ziemlich unwohl gefühlt.
Ich bin in Prüfungen immer sehr nervös, aber z. B. bei Prof.
Weihrauch oder Kamps ist das aber sonst in der Prüfung ziemlich verflogen.
Hier wurde es dauernd schlimmer, obwohl ich eigentlich merkte, daß
es gut läuft. Prof. Güting hat nicht einen Satz mit mir gewechselt,
der nicht inhaltlich zur Prüfung gehört hätte.
Thematisch war ich überrascht, daß er relativ wenige Themen
gefragt hat, diese dafür aber sehr stark im Detail. Ich hatte eher
damit gerechnet, daß eher Top-Down- oder aber Bottom-Up-Analyse gefragt
wird und dafür aber auf jeden Fall etwas aus KE5, insbesondere zur
Speicherorganisation. Für die lexikalische Analyse hatte ich mich
ziemlich darauf verlassen, daß das noch sitzt, weil ich a) erst im
November mündliche Vordiplomprüfung in Theo hatte und b) im letzten
halben Jahr beruflich ein wenig mit lex zu tun hatte, und hatte eigentlich
nicht damit gerechnet, daß das in ernsthaftem Umfang dran kommt.
Das einzige, was mich ziemlich in Verlegenheit gebracht hätte,
wären tiefergehende Fragen zu KE6. Ich halte es zwar für relativ
unwahrscheinlich, daß er das prüft, aber ich würde es nicht
riskieren, in die Prüfung zu gehen, ohne wenigstens ein paar Grundbegriffe
daraus erläutern zu können.
Also, falls ihr euch entschließt, in die Prüfung zu gehen:
Viel Erfolg und Glück dabei! Es gibt zwar vielleicht spannendere Themen
und nettere Prüfer, aber ich finde den Kurs recht prüfungsfreundlich,
weil das Thema recht kompakt und überschaubar ist. Er finde ihn größtenteils
auch sehr verständlich geschrieben, insofern wird's schon klappen.