Inhaltsverzeichnis

Allgemein

Philippsen konnte nicht selber prüfen deshalb wurde ich nur von den Tutoren geprüft.

Eigentlich werden die 3 Phasen vom Compiler durchgegangen und zu den jeweiligen Stationen detailfragen gestellt. Diese sind allerdings vorbereitet also muss man vermutlich alle Verfahren in allen Stufen erklären und anwenden können. Habe relativ viel selbst geredet und erzählt bis mir nichts mehr einfiel. War trotzdem viel zu schnell und bin am Ende in die Detailfragen reingeschlittert.

Prüfungsathmosphäre war entspannt und man kann sich Dinge auch erarbeiten wenn man dabei sagt was man gerade denkt.

Prüfung

Analyse

Was ist denn ein Compiler?

Warum teilt man diese?

Variable wird „int“ genannt, wo schlägt das fehl (also statt „int a“ „int int“)?

Abbildung

Habe dann ein Codeschnipsel bekommen mit geschachtelten funktionen. Sah oBdA so aus:

int outersum(int[] arr) {
    ...
    int innersum(int a, int b) {  // [1]
        ...
        if(...) {
            return innersum(3,4)  // [2]
        } else {
            return innersum(arr[0], 5)  // [3]
        }
    }
    return innersum(1,2)  // [4]
}

Wie würde ein Compiler das denn transformieren?
Wie sieht die neue Funktion aus? (vorne oder hinten FP argument einzeichnen)
Wo werden Zugriffe transformiert?

Zwischensprachen, warum braucht man die?

Codierung

Baumtransformationsregeln mit Baum bekommen

        *
   +        +
a    b    c    d

gab alle normalen regeln und eine große:

          *
R -> R     +
           R   R

Nach was sieht das denn aus?

Worauf muss man dabei achten?

Habe dann bereits generierten Zwischencode bekommen. Weiss nicht mehr genau wie er aussah das Verfahren funktioniert aber immer gleich, es gab eine MOV instruktion auf die man eingehen hätte können.

Wie macht man danach dann hier die Registervergabe?

Mir wurde dann gesagt dass ich das Blatt umdregen solle. Blatt umgedreht, Graph war bereits angegeben, sah ungefähr so aus:

    --- (v4) --- (v0)======= <- MOVE Kante
   |       |    /    |                |
   |    (v3) --- (v1)--------(v5)
   |   /              |
(v2)-------------

(+ Registerclique, r0, r1, r2)

Für was stehen hier Knoten und Kanten?

Wie wenden sie das Verfahren nun an?

Un wie machen sie jetzt weiter?

[Hier hat er schon auf die Uhr geschaut hatte aber noch massig zeit]
Was kann man denn danach machen?

Wie genau siehr hier ein Schleifenzähler aus?

[Wieder ein Blick auf die Uhr]
Debugger, was ist das?

Wie implementiert man Breakpoints?

Was sind Watchpoints?

Wie würde man Watchpoints implementieren ohne Speicherschutz (Flat Memory)?