TENTAMEN I PROGRAMSPRÅK -- DVG C01 140605 kl. 08:15-13:15 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Bilaga A: BNF-definition Betygsgräns: Kurs: Max 60p, Med beröm godkänd 50p, Icke utan beröm godkänd 40p, Godkänd 30p (varav minimum 20p från tentan, 10p från labbarna) Tenta: Max 40p, Med beröm godkänd 34p, Icke utan beröm godkänd 27p, Godkänd 20p Labbarna: Max 20p, Med beröm godkänd 18p, Icke utan beröm godkänd 14p, Godkänd 10p SKRIV TYDLIGT LÄS UPPGIFTERNA NOGGRANT 1. Ange kortfattade svar på följande uppgifter: (a) Ge en definition av (i) aktuell parameter samt (ii) formell parameter (b) Vad är skillnaden mellan den lokala omgivningen (engelska: local environment) och den icke-lokala omgivningen (engelska: non-local environment)? (c) Vad betyder G = (S, P, NT, T)? (d) Vad är förhållandet mellan ett lexem och en token? (e) Vad är skillnaden mellan en derivation (engelska: derivation) och en parsning (engelska: parse)? (f) I en RDPP (engelska: Recursive Descent Predictive Parser) vad innebär Predictive? Ge ett exempel för att förklara denna aspekt. (g) Vad är ett reguljäruttryck (engelska: regular expression)? Ge ett exempel. (h) Vad är skillnaden mellan syntax och semantiken? (i) Ge ett exempel av en typkonstruktor (engelska: type constructor). (j) Vad betyder uttrycket referential transparency? Totalt 2. Symboltabell Vad är förhållandet mellan symboltabellen och den exekvering-tids omgivning (engelska: run-time environment)? Ge gärna exempel i Ditt svar. Vilka eventuella organisationer finns för en symboltabell? DFR/AA/ND 140605 PS tentamen Sidan 1 av 6
3. Felhantering och återhämting Titta på programmet nedan och resultatet från en parsning. program testp (input, output); var A, B, C: integer; A := B + C * 2 end. $ SEMANTIC: ID already declared: A SYNTAX: Symbol expected : found := SYNTAX: Type name expected found := SYNTAX: Symbol expected ; found := SYNTAX: Symbol expected begin found := SYNTAX: ID expected found := SEMANTIC: Assign types: error := integer Med hjälp av grammatiken i Bilaga A förklara vad har hänt under parsningen. Ge en trace (spår) av parsningsprocessen för just detta program. 3p Föreslå eventuella lösningar för att kunna få en bättre återhämtning än den som togs ovan. 4. Typer Diskutera ingående de olika aspekterna av typer i programspråk. 2p Totalt 5. Parametrar Diskutera ingående hur parametrar hanteras vid exekverings-tid (engelska: run-time environment). DFR/AA/ND 140605 PS tentamen Sidan 2 av 6
6. Lisp Vad är resultatet på varje print operation i följande kod i Lisp? (setf q (last (cons '(A B) (append (list '(A B) '(A B)) '(A B)) ) ) ) (setf q (remove-if-not #'listp (cons '(A B) (append (list '(A B) '(A B)) '(A B)) ))) (setf x 'A) (let* ((x 'B) (y x)) (setf q (list x y)) ) (setf q (mapcar #'(lambda (n) (* (+ n 1) 2)) '(5 6 7 8))) 1p 1p (defun p (a b c) (list (list 'a a) (list 'b b) (list 'c c) ) ) (defun q (r s) (if (eql 'b (first (first r))) (cons (list 's (list (second (first r)) s)) (rest r)) (cons (first r) (q (rest r) s)) ) ) (setf b (p '(a b) '(c d) '(e f))) (print b) (setf q (q b 'b)) Förklara stegvis hur proceduren q ovan fungerar med de givna parametrarna. 1p 2p Totalt DFR/AA/ND 140605 PS tentamen Sidan 3 av 6
7. Objektorienterat A. Vad betyder det att en klass är abstrakt? 0, B. Varför deklarerar man vissa klasser som abstrakta? 1,0p C. Vad är skillnaden mellan metoder och funktioner? 0, D. Vad är virtuella metoder? 0, E. Givet följande program skrivet i Java. Vad skrivs ut när programmet körs och varför? Utöver att ange rätt utskrift från programmet så skall du även redovisa för de mekanismer som gör att utskriften blir som den blir. 2, class A { void print() { System.out.println("A"); class B extends A { void print() { System.out.println("B"); public class Program { static void print(a a) { a.print(); public static void main(string[] args) { A a = new A(); B b = new B(); A ab = new B(); print(a); print(b); print(ab); Totalt DFR/AA/ND 140605 PS tentamen Sidan 4 av 6
8. Prolog 1. Skriv ett predikat, vand(+inlista, -Utlista), som tar en lista, Inlista, som parameter och returnerar en lista, Utlista, med elementen i omvänd ordning. Exempel på körning:?- vand([1, 2, 3], X). X = [3, 2, 1] Alla predikat som används måste definieras. 3p 2. Beskriv utförligt med egna ord och med kodexempel hur lexerdelen i laborationen omvandlar listan av lexem till en lista av tokens. 2p Totalt DFR/AA/ND 140605 PS tentamen Sidan 5 av 6
Bilaga A - Grammatik: Pascallik språk 1. [prog] ::= [prog header] [var part] [stat part] 2. [prog header] ::= program id ( input, output ) ; 3. [var part] ::= var [var dec list] 4. [stat part] ::= begin [stat list] end. 5. [var dec list] ::= [var dec] [var dec list] [var dec] 6. [var dec] ::= [id list] : [type] ; 7. [stat list] ::= [stat] [stat list] ; [stat] 8. [stat] ::= [assign stat] 9. [assign stat] ::= id := [expr] 10. [expr] ::= [term] [R1] 11. [R1] ::= e + [term] [R1] 12. [term] ::= [factor] [R2] 13. [R2] ::= e * [factor] [R2] 14. [factor] ::= ( [expr] ) [operand] 15. [type] ::= integer 16. [id list] ::= id [id list], id 17. [operand] ::= id number DFR/AA/ND 140605 PS tentamen Sidan 6 av 6