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

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
pruefungen:hauptstudium:ls2:ueb1-2013-02-07 [10.02.2014 12:22] mantrapruefungen:hauptstudium:ls2:ueb1-2013-02-07 [10.02.2014 12:24] (aktuell) – alte Version wieder hergestellt (ops) mantra
Zeile 6: Zeile 6:
  
 **Prüfer:** Prof. Dr. Michael Philippsen \\ **Prüfer:** Prof. Dr. Michael Philippsen \\
-**Beisitz:** Dipl.-MathJakob Krainz \\+**Beisitz:** Dipl.-InfStefan Kempf \\
 Papier + Stift bereitgestellt \\ Papier + Stift bereitgestellt \\
 versch. Blätter mit Pseudo-Code für Prüfungsfragen vorhanden 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> <code c>
-void f(int x) { +(x == 0) { 
-    a = b + c                         (1) +} else if (x == 1) { 
-    x[2][b][3+4] +a                  (2)+} else if (x =2) 
 +} else if (x == 3) {
 } }
 </code> </code>
 +Was macht der Compiler? 
 +Lexer: Tokens malen für einen Teil.
 +Parser: Baum malen für if und ein else if.
  
-(PWas macht der Compiler?+Wie ändern Sie die Grammatik, wenn Sie ein Switch-Case einbauen wollen? (Grammatik des Übungscompilers lag vor)
  
-(S) Lexer geht durch, ist endl automat. Eintrag in Namenstabelle nicht vergessen!(lalala)+Was müssen Sie an Ihrem Compiler dazu ändern?
  
-Parser: +Würde jemand einen Fehler in einem Case programmieren (zBcase //j//:), wo müssten Sie den Fehler in Ihrem Compiler abfangen?
-Parst Ergebnis vom Lexer, versucht Grammatik anzuwendenBuzzwordRekursiver Abstieg +
-(Pwas kommt dabei raus?+
  
-(STeilw. Atr. Sr. Tbaum+Auf was müsste man achten, wenn man If zu Switch-Case optimiert? (Vorteile, Nachteile etc)
  
-(Pwas kommt danach?+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.
  
-(S) SemantAnalysemit typpruefungSemantische ueberpruefung auf korrektheit (hier war ich wohl bissl ungenau)+Wir wollen zu unserem erweiterten Compiler jetzt ein Binary haben, das auch Switch-Case übersetzen kannWir haben dazu noch den alten CompilerErklären siewie sie das machen. (Stichwort Tombstone)
  
-(Pwie geht die Typueberpruefung in (1) s.O.+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.
  
-(S) baum hinmalendurchlaufen, prototypen mitnehmen +Malen sie den Stack zu folgenden Aufrufen. Minimalistisch ohne FP-Sicherung etc., geht hier um Optimierung
- +<code c> 
-(P) geht das immer so? +g() {....  
- + return;  
-(S) nein, wenn infos von spaeter gebraucht werden um den typ festzustellen+ 
- +f(int x)  
-(Pwir ham da dieses +=, wie baut man das ein + g() 
- + L2;  
-(S) an die richtige stelle in der grammatik einfuegen, lexer muss es kennen etc + return; 
- + 
-(P) jetz soll die Zielsprache das nicht koennen, was tun? +main()  
- + f(2) 
-(S) auf einfache addition abbilden (tmp = x[].... + bx[].... = tmp;) + L1 ..
- +
-(P) was kann schiefgehen? +</code> 
- +Wie würden Sie jetzt optimieren
-gemeint war wenn im array zugriff eine funktion steht (x[b()]) wird sie 2mal aufgerufen. +Antwort: Stack ist voller Jumps zu Labelnalso: Inlining;  
- +Nachtrag von Prüfern: Einfach direkt anspringen.
- +
-(Pwenn man den code jetz uebersetzen will, wie geht man vor +
- +
-(S) man muss moegl. ersetzungsstrategien wissen (-> risc) dann kann man G&G machen, DP oder Baumersetzung etc. kurz darauf eingegangen dass da registerverteilung unabh. gemacht wird -> suboptimal, aber leichter. dann baum in praefix hinschreiben, shift reduce machen, lookahead damits keine toten enden gibt. +
- +
-(Pund was macht man jetz mit den registern? +
- +
-(Sget reg, graph faerben. +
-graph faerben dann ansatzweise ausgefuehrtwas machen wenn Grad <( oder = ) Registerzahl etc siehe Folien +
-{(P) was ist eine kante, was ein knoten, was ist eine lebensspanne+
- +
-(P) zeit is rum +
- +
-(S) echtmist. +
- +
-note war 1.7. das war auch fair. +
-mein problem war hauptsaechlich dass ich nicht exakt genug auf die frage geantwortet hab. ein grosses wissen und verstaendniss darueber zu haben was man tut genuegt nicht unbedingt. man muss auch bei den fragen verstehen was genau gefragt ist und schnell genug antworten. note waere wohl besser geworden wenn ich am anfang schneller auf die namenstabelle & den rekursiven abstieg gekommen waer. das is an sich was echt einfachesaber dann fehlt die zeit um am ende zu zeigen was man eigtl alles kann.+