**Pruefer:** Michael Philippsen, Volkmar Sieh \\ **Themengebiete:** Uebersetzerbau 1, Virtuelle Maschinen \\ Uebersetzerbau 1: * Bootstrapping: * "Nehmen Sie mal Ihre Lieblingssprache und schreiben sie einen Compiler dafür" * Habe C++ genommen (Nein, nicht meine Lieblingssprache! Aber ich dachte halt an das einfachere Subset...) und wollte als Subset C nehmen. Ihm war C aber immernoch zu groß und wollte genau wissen, was man alles weglassen sollte und ob man den Compiler dann wirklich noch in Maschinensprache schreiben wuerde. * Semantische Analyse * gegebener Code: int c = true + 6; * Deklariertheitseigenschaft, Typpruefung * AST dafuer malen, da bin ich ueber die Deklaration gestrauchelt * Visitor-Pattern erklaeren * Zusatzfrage: muss man das Double-Dispatch in allen Sprachen machen oder liegt das nur an Java? * in dem Kontext auch Methodenauswahl kurz angeschnitten, z.B. a.foo() Virtuelle Maschinen: * Was muss man denn alles so machen, wenn man einen kompletten PC emulieren will? \\ (einzelne Komponenten emulieren, usw.) * Speicherzugriffe \\ (MMU emulieren, evtl. direkten Zugriff erlauben, nur bestimmte Seiten mappen) * Wie funktionieren I/O-Zugriffe? * Wie sind die Komponenten denn verbunden? \\ (Busse) * Wie macht man das effizient (Tabelle mit Mapping von Adressen zu Devices anlegen) * Wann fuellt man das aus? \\ (Da wollte er hoeren, dass man das inkrementell zur Laufzeit machen kann, waehrend ich irgendwie an der Konfiguration festgehalten hatte) * JIT erklaeren * Wie kann man das machen, wenn man nur ein Software-Programm emulieren moechte? \\ (JIT-freundliche Hardware, was kann man alles weglassen, usw.) * [Die letzte Frage war dann so ein bisschen ein Mix aus Uebersetzerbau und VM:] Wie ist das denn bei der JVM, kann man den Bytecode so einfach auf x86 ausfuehren? \\ (Kellermaschine vs. Registermaschine, Umwandlung noetig, Stichworte Registerfärben und Lebendigkeit von Variablen)