Programmiersprachen und -systeme Klausur WS 04/05 1. Aufgabe S -> E # E -> E + T T -> id 1.1 Grammatik umformen, so dass sie sich für einen Top-Down Parser eignet 1.2 Direktormengen für originale und umgeformte Grammatik berechnen und über LL(1)-Eigenschaft entscheiden 2. Aufgabe S -> E # E -> T E' E' -> - T (2) E' | epsilon T -> (E) | id (1) 2.1 Absy für die Grammatik erstellen 2.2 Parser eigener Wahl für die Grammatik schreiben 3. Aufgabe SECD Handsimulation von (\\x. dup(x))(2) 4. Aufgabe 4.1 Strategien der Garbage Collection vergleichen dh. zu Mark & Scan sowie Reference Count jeweils einen Vor- und einen Nachteil aufzählen 4.2 Handsimulation von Copying Garbage Collection Entry Table -> 1 -> 2 -> 3 -> 1 (die 1 vom Anfang) 5. Aufgabe Interpretation / Coder - Absy vorgegeben, in etwa: (a * b) / (c - (d + e)) - Pseudo-Assembler benutzen: load a, load b, mult, load c, load d, load e, add, sub, div - daneben immer den Stackinhalt schreiben (a, b | a, a * b, ...) - danach das ganze nochmal auf Stackgröße optimieren: d.h. den größeren Teilbaum zu erst auswerten und ggf. swap-Operationen einfügen: load d, load e, add, load c, swap, sub, load a, load b, mult, swap, div - begründen warum es sinnvoll es auf Stacktiefe hin zu optimieren (Stichwort: Register) 6. Aufgabe Unifikation: - Absy vorgegeben - jeder Knoten ist schon mit einer Typvariable annotiert (tau0, tau1 ...) - Typgleichungen sind aufzustellen, Kontextinformationen (bekannte Funktionen) sind einzusetzen (Funktionen waren vorgegeben) - in dem Baum ging es um eine Verknüpfungsfunktion "o", die per mehrfacher Lamdba-Abstraktion (Curry-Notation) angesprochen worden ist - die Aufgabe habe ich zeitlich nicht geschafft...bin auch über das "parameters" gestolpert...wusste nicht so recht, was das sein sollte !DSPAM:43e92b2142501283711908!