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.