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

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
Letzte ÜberarbeitungBeide Seiten, nächste Überarbeitung
pruefungen:hauptstudium:ls2:ueb1-2013-02-07 [07.02.2013 10:38] chrislpruefungen:hauptstudium:ls2:ueb1-2013-02-07 [10.02.2014 12:22] mantra
Zeile 1: Zeile 1:
-Grundlagen des Übersetzerbaus” uebbau WS 2012/2013 +====== Übersetzerbau 1 ====== 
-Übungen zu Grundlagen des Übersetzerbaus +  * "Grundlagen des Übersetzerbausuebbau WS 2012/2013 
-~ 30 min. +  * "Übungen zu Grundlagen des Übersetzerbaus" 
-Prüfung oder benoteter Leistungsnachweis zu Programmiersysteme (7,5 ECTS) +  ~ 30 min. 
-Prüfer: Prof. Dr. Michael Philippsen  +  Prüfung oder benoteter Leistungsnachweis zu Programmiersysteme (7,5 ECTS) 
-Beisitz: Dipl.-InfStefan Kempf  + 
-Papier + Stift bereitgestellt +**Prüfer:** Prof. Dr. Michael Philippsen \\ 
 +**Beisitz:** Dipl.-MathJakob Krainz \\ 
 +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>
-(x == 0) { +void f(int x) { 
-} else if (x == 1) { +    a = b + c                         (1) 
-} else if (x =2) +    x[2][b][3+4] +a                  (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. 
  
-Wie ändern Sie die Grammatik, wenn Sie ein Switch-Case einbauen wollen? (Grammatik des Übungscompilers lag vor)+(PWas macht der Compiler?
  
-Was müssen Sie an Ihrem Compiler dazu ändern?+(S) Lexer geht durch, ist endl automat. Eintrag in Namenstabelle nicht vergessen!(lalala)
  
-Würde jemand einen Fehler in einem Case programmieren (zBcase //j//:), wo müssten Sie den Fehler in Ihrem Compiler abfangen?+Parser: 
 +Parst Ergebnis vom Lexer, versucht Grammatik anzuwendenBuzzwordRekursiver Abstieg 
 +(Pwas kommt dabei raus?
  
-Auf was müsste man achten, wenn man If zu Switch-Case optimiert? (Vorteile, Nachteile etc)+(STeilw. Atr. Sr. Tbaum
  
-Wie stellt man ein Switch-Case, das x mit 0..1000 vergleicht, am besten dar? (Layout ist gefragt) +(Pwas kommt danach?
-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 kannWir haben dazu noch den alten CompilerErklären siewie sie das machen. (Stichwort Tombstone)+(S) SemantAnalysemit typpruefungSemantische ueberpruefung auf korrektheit (hier war ich wohl bissl ungenau)
  
-Zurück zum Switch-Case: Oben, beim Grenzen prüfen, kann man da optimieren? Sonstige Vorteile? (Hint: Pipelining) +(Pwie geht die Typueberpruefung in (1) s.O.
-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+(S) baum hinmalendurchlaufen, prototypen mitnehmen 
-<code c> + 
-g() {....  +(P) geht das immer so? 
- return;  + 
- +(S) nein, wenn infos von spaeter gebraucht werden um den typ festzustellen
-f(int x)  + 
- g() +(Pwir ham da dieses +=, wie baut man das ein 
- L2;  + 
- return; +(S) an die richtige stelle in der grammatik einfuegen, lexer muss es kennen etc 
- + 
-main()  +(P) jetz soll die Zielsprache das nicht koennen, was tun? 
- f(2) + 
- L1 ..+(S) auf einfache addition abbilden (tmp = x[].... + bx[].... = tmp;) 
-+ 
-</code> +(P) was kann schiefgehen? 
-Wie würden Sie jetzt optimieren+ 
-Antwort: Stack ist voller Jumps zu Labelnalso: Inlining;  +gemeint war wenn im array zugriff eine funktion steht (x[b()]) wird sie 2mal aufgerufen. 
-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.