Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » Übersetzerbau 1   (Übersicht)

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
pruefungen:hauptstudium:ls2:ueb1-2013-02-07 [07.02.2013 09:54] – angelegt chrislpruefungen:hauptstudium:ls2:ueb1-2013-02-07 [10.02.2014 12:24] (aktuell) – alte Version wieder hergestellt (ops) mantra
Zeile 1: Zeile 1:
-TODO+====== Übersetzerbau 1 ====== 
 +  * "Grundlagen des Übersetzerbaus" uebbau WS 2012/2013 
 +  * "Übungen zu Grundlagen des Übersetzerbaus" 
 +  * ~ 30 min. 
 +  * Prüfung oder benoteter Leistungsnachweis zu Programmiersysteme (7,5 ECTS)
  
-inhalt kommt gleich+**Prüfer:** Prof. Dr. Michael Philippsen \\ 
 +**Beisitz:** Dipl.-Inf. Stefan Kempf \\ 
 +Papier + Stift bereitgestellt \\ 
 +versch. Blätter mit Pseudo-Code für Prüfungsfragen vorhanden 
 + 
 + 
 +War hinterher verwundert, dass viele Verfahren und Fragen (Graham&Glanville, Dyn.Prog., Registerzuteilung, Scheduling..) aus vorherigen Prüfungen nicht wieder verwertet wurden. Gute Atmosphäre, faire Benotung. Es wird erwartet, dass man nicht zu lange zögert, bevor man Lösungen präsentiert. 
 + 
 + 
 +<code c> 
 +(x == 0) { 
 +} else if (x == 1) { 
 +} else if (x == 2) { 
 +} else if (x == 3) { 
 +
 +</code> 
 +Was macht der Compiler?  
 +Lexer: Tokens malen für einen Teil. 
 +Parser: Baum malen für if und ein else if. 
 + 
 +Wie ändern Sie die Grammatik, wenn Sie ein Switch-Case einbauen wollen? (Grammatik des Übungscompilers lag vor) 
 + 
 +Was müssen Sie an Ihrem Compiler dazu ändern? 
 + 
 +Würde jemand einen Fehler in einem Case programmieren (zB. case //j//:), wo müssten Sie den Fehler in Ihrem Compiler abfangen? 
 + 
 +Auf was müsste man achten, wenn man If zu Switch-Case optimiert? (Vorteile, Nachteile etc) 
 + 
 +Wie stellt man ein Switch-Case, das x mit 0..1000 vergleicht, am besten dar? (Layout ist gefragt) 
 +Meine Antwort ungefähr, nach reichlich Nachfragen: Bereiche: 1: Grenzen prüfen, Offsettabelle an der richtigen Stelle anspringen, 2: Codeblöcke, 3: Offset Tabelle mit Sprüngen in Codeblöcke. 
 + 
 +Wir wollen zu unserem erweiterten Compiler jetzt ein Binary haben, das auch Switch-Case übersetzen kann. Wir haben dazu noch den alten Compiler. Erklären sie, wie sie das machen. (Stichwort Tombstone) 
 + 
 +Zurück zum Switch-Case: Oben, beim Grenzen prüfen, kann man da optimieren? Sonstige Vorteile? (Hint: Pipelining) 
 +Meine Antwort beinhaltete ungefähr: Reordering damit Jumps nicht so arg die Pipeline leeren, cmp-Flag mehrfach verwenden. 
 + 
 +Malen sie den Stack zu folgenden Aufrufen. Minimalistisch ohne FP-Sicherung etc., geht hier um Optimierung. 
 +<code c> 
 +g() {....  
 + return;  
 +}  
 +f(int x) {  
 + g();  
 + L2;  
 + return; 
 +}  
 +main() {  
 + f(2);  
 + L1 ... 
 +
 +</code> 
 +Wie würden Sie jetzt optimieren? 
 +Antwort: Stack ist voller Jumps zu Labeln, also: Inlining;  
 +Nachtrag von Prüfern: Einfach direkt anspringen.