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.
Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung | |||
pruefungen:hauptstudium:ls2:ueb1-2013-02-07 [10.02.2014 12:22] – mantra | pruefungen:hauptstudium:ls2:ueb1-2013-02-07 [10.02.2014 12:24] (aktuell) – alte Version wieder hergestellt (ops) mantra | ||
---|---|---|---|
Zeile 6: | Zeile 6: | ||
**Prüfer: | **Prüfer: | ||
- | **Beisitz: | + | **Beisitz: |
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& | ||
<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) { | ||
} | } | ||
</ | </ | ||
+ | Was macht der Compiler? | ||
+ | Lexer: Tokens malen für einen Teil. | ||
+ | Parser: Baum malen für if und ein else if. | ||
- | (P) Was macht der Compiler? | + | Wie ändern Sie die Grammatik, wenn Sie ein Switch-Case einbauen wollen? |
- | (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 (zB. case //j//:), wo müssten Sie den Fehler in Ihrem Compiler abfangen? |
- | Parst Ergebnis vom Lexer, versucht Grammatik anzuwenden. Buzzword: Rekursiver Abstieg | + | |
- | (P) was kommt dabei raus? | + | |
- | (S) Teilw. Atr. Sr. Tbaum | + | Auf was müsste man achten, wenn man If zu Switch-Case optimiert? |
- | (P) was kommt danach? | + | Wie stellt man ein Switch-Case, |
+ | Meine Antwort ungefähr, nach reichlich Nachfragen: Bereiche: 1: Grenzen prüfen, Offsettabelle an der richtigen Stelle anspringen, 2: Codeblöcke, | ||
- | (S) Semant. Analyse. mit typpruefung, Semantische ueberpruefung auf korrektheit | + | 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. |
- | (P) wie geht die Typueberpruefung in (1) s.O. | + | Zurück zum Switch-Case: |
+ | Meine Antwort beinhaltete ungefähr: Reordering damit Jumps nicht so arg die Pipeline leeren, cmp-Flag mehrfach verwenden. | ||
- | (S) baum hinmalen, durchlaufen, | + | Malen sie den Stack zu folgenden Aufrufen. Minimalistisch ohne FP-Sicherung etc., geht hier um Optimierung. |
- | + | <code c> | |
- | (P) geht das immer so? | + | g() {.... |
- | + | | |
- | (S) nein, wenn infos von spaeter gebraucht werden | + | } |
- | + | f(int x) { | |
- | (P) wir 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[].... + b; x[].... = tmp;) | + | L1 ... |
- | + | } | |
- | (P) was kann schiefgehen? | + | </ |
- | + | 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 Labeln, also: Inlining; |
- | + | Nachtrag von Prüfern: Einfach direkt anspringen. | |
- | + | ||
- | (P) wenn 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, | + | |
- | + | ||
- | (P) und was macht man jetz mit den registern? | + | |
- | + | ||
- | (S) get reg, graph faerben. | + | |
- | graph faerben dann ansatzweise ausgefuehrt. was 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) echt? mist. | + | |
- | + | ||
- | 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 | + |