Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » Allgemeines
Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Allgemeines
B: Beisitzer (Kreutzer)
P: Prüfer (Philippsen)
S: Student
Zeit: 30min (Voll ausgenutzt)
Stimmung
Nervoes. Unter anderem nach dem Kommentar von P, dass ich mich in die Mitte setzen soll, damit B und P mich von beiden Seiten in die Zange nehmen koennen zum zerstoeren..
Refactoring
int x // <= soll v werden. float foo(float v) // <= soll baz werden. { return v + 42.0; } int foo(int n) { // Code } int main() { a[10][4]; int n; int s; float k; // Wertezuweisung if((n > 25) || (s < 20 && foo(a[..][..] * ...) < 5)) //[1] { int x; x := 5; n := foo(5); } else { x := 6; } k := foo(a[..][..] + (13.0 + 11.0)); s := foo(13); //... }
B: Wir wollen ein Refactoring Tool schreiben. Hier ist ein Stueck Code mit einer globalen Variable x und mehreren Funktionen. Was machen wir damit? S: Zuerst lexen und dann AST inklusive Definitionstabelle aufbauen. B: Und dann? Woher weiss ich, wann ich welche Variable umbenennen muss? S: Man guckt in der Definitionstabelle nach, worauf das Symbol zeigt. Symboltabelle hingezeichnet und kurz erklaert… B: Ok, und jetzt haben wir hier noch die Funktion foo, die wir umbennen wollen. P: Die ist aber ueberladen. Wie geht das da? S: Naja, der obere Teil (Funktionsdefinition) ist noch identisch zur Methode. Danach darf man sich die Funktionsaufrufe angucken und anhand der Parameter entscheiden, um welchen Aufruf es sich handelt.
Abbildungsphase
B: Was macht man in der Abbildungsphase? S: Transformationen und Optimierungen. B: Ok, welche Art von Transformationen? S: Variablenfaltungen. (Zeigt auf 13.0 + 11.0) P: Ja, ok. Aber was ist der eigentliche Sinn der Abbildungsphase? Was will man danach haben? S: Oh, man will eine Zwischensprache erzeugen! Weil man so mit ziemlich wenig Aufwand auch Programme fuer andere Architekturen erstellen kann. B: Gut, und was passiert sonst noch in der Abbildungsphase? S: (Etwas verunsichert) Erm, naja es werden auch teilweise noch Operationen vertauscht, um so Hardware optimal auszunutzen und weil es manchmal effizienter ist. B: Ok, wir haben hier einen Baum einer Bedingung. Wie generiere ich hierfuer Code mit Cut-off-Semantik? (Es handelt sich bei dem Baum um die Condition bei [1]) S: (Kurz durchgefuehrt. Einfach das bekannte Schema angewendet.) P: Ok, jetzt fehlt da aber noch was.. S: Stimmt, ich hab hier einen Sprung vom Ende des „true“-blocks zum ende des „false“-blocks vergessen. P: Richtig. Und was passiert, wenn wir zu true bzw. false springen? S: Naja, es wird halt der entsprechende Codeblock ausgefuehrt. (zeigt auf Programmbeispiel weiter oben)
Codierungsphase
B:
Besprechung
TODO