Sie befinden sich hier: Termine » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » Übersetzerbau 1 + 3   (Übersicht)

Übersetzerbau 1 + 3

Prüfer: Michael Philippsen, Stefan Kempf
Ergebnis: 1.3

Compilerbau 1

Ausgangspunkt: An welchen Stellen im Compiler entstehen welche Fehlermeldungen?

Syntaktische Analyse:

  • Lexer, ein paar Beispiele für Fehler
  • Parser, etwas allgemeiner

Semantische Analyse:

  • Deklariertheit, kurz entspr. Tabellen erwähnt
  • Typprüfung, das wollte er etwas genauer ⇒ Typberechnung erklärt (Typen von Literalen eigentlich schon im Lexer bekannt!)
    Methodenauswahl (→ OOP? Neue Fehler bei obj.foo(2.0) statt foo(2.0) bei bekanntem stat. Typ von obj??)
    Prototypen
  • „Auslagerung“ von Sachen aus der syntakt. Analyse um Grammatik einfach zu halten (Lookahead; z.B. transient foo(), …)
  • Überprüfung von z.B. zykl. Vererbung…

An dieser Stelle war die Zeit für Teil 1 schon wieder mehr oder weniger vorbei, weil ich versucht hatte, doch relativ viel selbstständig zu erzählen und zum Teil etwas weiter ausgeholt hatte (ok, und an einer Stelle bin ich etwas auf dem Schlauch gestanden…). Philippsen hat das wohl weniger gefreut, jedenfalls war die hauptsächliche Begründung für die 1.3 „Leistung ist Arbeit pro Zeit, und bei anderen hätte ich in der Zeit doppelt so viel gefragt.“ – Also lieber kurz und knapp und auf den Punkt antworten…

Compilerbau 3

Diesen Teil hat Stefan geprüft, dran waren nur die VM-Kapitel.

  • Wie unterscheiden sich Übersetzer für nativen Code und für Bytecode?
    (nicht so arg?)
  • Wie unterscheiden sich normale Übersetzer und JIT-Übersetzer? (ah!)
  • Interpreter genauer erklärt → indirektes Durchfädeln.
  • Zusammenspiel Interpreter-Compiler, Aufrufe zwischen interpretiertem und compiliertem Code.
  • Registervergabe – ein Beispiel zu Linear Scan.
  • Welche Optimierungen gibt's bei VMs?
    Bin kurz auf Performance-Messung eingegangen und habe ein paar Beispiele gebracht, was man im Vergleich zu klassischen Compilern machen kann.