OMTENTAMEN I PROGRAMSPRÅK -- DVG C01 130823 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 svansrekursion? I vilket sammanhang förekommer den? (c Vad används den statiska länken i en stackframe till? (d Ange för- och nackdelar till värdeanrop ( call-by-value jämfört med referensanrop ( call-by-reference (e Ange ett exempel av en Lisp programmingcliché. (f Vad är förhållendet mellan en programmeringparadigm och ett programspråk? (g Ange ett exempel av bindningar vid fyra olika tidspunkter i processen språkdesign till programexekvering (totalt 4 olika exempel. (h Vilka är de två absolut nödvändligaste flödeskontrollkonstructionerna ( flow-of-control constructions för att kunna skriva ett program. (i Vad händer under den lexikaliska analysfasen? (j Vilka aspekter av att programspråk skulle man ta hänsyn till när man vill snabbt sätta sig in i ett språk? 2. Grammatik parser Totalt 10p Titta noggrant på grammatiken i bilaga A. Förklara ingående hur man kan skriva en RDPP (Recursive Descent Predictive Parser utifrån grammatiken. 5p 3. Parametrar Förklara ingående de olika sätten att hantera parametrar i programspråk. Ange gärna konkreta exempel. 5p DFR/EJN/ND 130823 PS omtentamen Sidan 1 av 7
4. Exekveringstidsystem ( Run-time System Givet programmet nedan, förklara ingående förhållandena mellan programmets text (källkoden, symboltabellen och hur den exekveringsstack hanteras under programexekvering. Rita symbolltabelerna samt stackens innehåll efter varje anrop. Ange alla antagande. 5p program xyz (input, output; var a, b, c: integer; p, q: boolean; integer function x(fp1: integer, fp2: integer; begin var i: integer; integer function y(fp1: integer, fp2: integer; var i: integer; begin i := fp1 * fp2; return i; end y. begin i := y(fp1, fp2 + y(fp1, fp2; return i; end x. a := 2; b := 3; c := x(a, b; print c; end xyz. DFR/EJN/ND 130823 PS omtentamen Sidan 2 av 7
5. Lisp - Läs noggrant följande Lispkod samt dess outputfil:- (defun make-book (title author class (list (list 'title title (list 'author author (list 'class class (defun book-author-writer (book author (if (eql 'author (first (first book (cons (list 'author author (rest book (cons (first book (book-author-writer (rest book author (defun book-class-add (book class ;; att skriva (setf book (make-book '(Common Lisp '(Guy Steele '(Computer Languages (book-author-writer book '(Guy L Steele (book-class-add book 'Lisp MAKE-BOOK BOOK-AUTHOR-WRITER BOOK-CLASS-ADD ((TITLE (COMMON LISP (AUTHOR (GUY STEELE (CLASS (COMPUTER LANGUAGES ((TITLE (COMMON LISP (AUTHOR (GUY L STEELE (CLASS (COMPUTER LANGUAGES ((TITLE (COMMON LISP (AUTHOR (GUY STEELE (CLASS (COMPUTER LANGUAGES LISP Bye. 1. Skriv Lisp-koden till functionen book-class-add. Ange alla antagande. 2p 2. Förklara stegvis och ingående hur din function book-class-add fungerar. 3p Totalt 5p DFR/EJN/ND 130823 PS omtentamen Sidan 3 av 7
6. Prolog Du har följande predikat: add([], L, L. add([x L1], L2, [X L3 :- add(l1, L2, L3. del(x, [X Tail], Tail. del(x, [Y Tail], [Y Tail1] :- del(x, Tail, Tail1. a Predikatet add brukar ha ett annat, engelskt eller svenskt, namn som beskriver hur predikatet fungerar. Vilket namn? 0.5 p b Vad blir resultatet (svaret när frågan?- del(a, [a, b, a, c, a], X. exekveras? 0.5 p c Hur många olika svar kan man få på föregående fråga om man skriver ett ; efter varje nytt svar? 1 p d Vilka svar får man? Skriv i den ordningsföljd de erhålls. 2 p e Egentligen vill man bara ha ett svar. Hur ska koden förändras (tillägg för att eliminera falska svar? 1 p Totalt 5p DFR/EJN/ND 130823 PS omtentamen Sidan 4 av 7
7. Objektorientering 5 poäng: A. Vilka följder får det att en klass är abstrakt inom objektorientering? Varför deklarerar man vissa klasser abstrakta? B. Givet följande program skrivet i Java. Vad skrivs ut när programmet utförs och varför? Utöver att ange rätt utskrift från programmet ska du alltså även redogöra för de mekanismer som gör att utskriften blir som den blir. class A { public void f( {System.out.println ("A.f";} } (1p (1,5p class B extends A { public void f( {System.out.println ("B.f";} } class Program { static void p(a o {o.f(;} public static void main(string[] args { A a = new A(; B b = new B(; A ab = new B(; p(a; p(b; p(ab; } // main } // class Program (OBS: uppgiften fortsätter på nästa sida! DFR/EJN/ND 130823 PS omtentamen Sidan 5 av 7
C. Antag att följande klass Integer är definierad i Java med metoderna getvalue som läser av det aktuella värdet och setvalue som definierar ett nytt: class Integer { public Integer(int value {setvalue(value;} public int getvalue( {return value;} public void setvalue(int newvalue {value = newvalue;} //... more functions... private int value; }; // Integer (2,5p Vi önskar definiera addition av heltal och utvidgar därför klassdefinionen av Integer med följande metoder och tillhörande implementationer: void add1(integer i {setvalue(getvalue( + i.getvalue(;} void add2(integer i {this.setvalue(this.getvalue( + i.getvalue(;} Integer add3(integer i {return new Integer(value + i.getvalue(;} Integer add4(integer i {return new Integer(getValue( + i.getvalue(;} void add5(integer i, Integer j {j = new Integer(getValue( + i.getvalue(;} Förklara och kommentera skillnaden i synsätt, utförande och resultat mellan följande par av funktioner: i. add1 och add2 ii. add1 och add4 iii. add3 och add4 iv. add4 och add5 För vart och ett av de fem förslagen, kommentera om namnet add på funktionen (bortse från numret är lämpligt och föreslå ev ett bättre namn, allt enligt minsta förvåningens princip *. * Minsta förvåningens princip (The Principle of Least Astonishment, POLA eller PLA sager bl.a.: Speciellt ska en programmerare försöka tänka på vilket beteende som kommer att förvåna någon som använder sig av programmet minst, snarare än det beteende som verkar mest naturligt för någon som känner till programmets inre arbetssätt. DFR/EJN/ND 130823 PS omtentamen Sidan 6 av 7
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/EJN/ND 130823 PS omtentamen Sidan 7 av 7