Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » ueb1-2015-02-04
04.02.2015
- Grundlagen des Übersetzerbaus
- 30 Minuten
- Prüfer: Prof. Dr. Michael Philippsen
- Beisitz: Marius Kamp M. Sc.
- Papier und Stift bereitgestellt
- Ein Blatt mit ausgedrucktem Code vorbereitet
- Ein weiteres Blatt für die Anwendung von dynamischem Programmieren
Gegebeber Code (beispielhaft!):
int a[5][20]; // 1 int main() { int y; int fak() { // 2 int x = 1; if() { x += 17 } else { x -= 17 y = x * 5; // 3 return x; } } int x = y * 3; a[3][x] = fak(); // 4 }
P: Was macht der Compiler bei 1?
S: Lexer erklärt, Parser erklärt, Semantische Analyse (Typcheck, Symboltabelle)
P: Malen Sie den AST zu 1.
S: Ast hingemalt, wichtig: Variable wird hier noch nicht initialisiert.
P: Man möchte innere Funktionen unterstützen, siehe 2. Was ist zu tun?
S: Lexer muss nicht angepasst werden, Parser schon → Funktionendeklaration in Blöcken muss möglich sein. AST verändert sich auch. Grammatik erweitert.
P: Man möchte jetzt die Funktion rausziehen, also die Hierarchie flach machen. Was passiert bei 3?
S: Variable y ist nicht mehr zugreifbar → Referenz dazu muss her.
P: Wo fügt man die in den Baum ein? Wie funkioniert das genau? Wie geht das in Java
S: […]
P: In Java geht das nicht, warum? Wann geht es?
S: Wollte hören dass es nur mit final
Variablen geht und die sind unveränderlich.
P: Malen sie den Zwischencode zu 4.
S: Offset: (x * 50 + 3) * sizeof(int), CSTORE und CALL noch hingemalt.
P: Wie funktioniert in Java o isinstanceof K
?
S: Klassendeskriptoren vergleichen […]. Wusste ich net so genau, ewig drauf rumgeritten.
P: Hier ist ein AST (war sowas wie a*b+c), dynamisch Programmieren:
S: Algorithmus mehr oder weniger korrekt angewandt, wollte nach Phase 1 (Kostenberechnung) dann noch Phase 2 (dyn. Programmieren) und Phase 3 (Top-Down durchlauf) erklärt haben.
Mir wurde recht viel geholfen, die Benotung war sehr fair. Das Javazeug sollte man schon drauf haben, auch wenn man die Übung in Python geschrieben hat.