Om du er i tvil, forklar dine antakelser. Alle programmer skal skrives i Oz.

Like dokumenter
Eksamen i TDT4165 Programmeringsspråk

Eksamen i TDT4165 Programmeringsspråk (med rette- eller løsningsforslag) Fredag 18 Desember 2009

Eksamen i TDT4165 Programmeringsspråk (med rette- eller løsningsforslag) , 15. desember 2011

TDT4165 PROGRAMMING LANGUAGES. Exercise 01 Introduksjon til Oz

Eksamen i emne TDT4165 / SIF8028 Programmeringsspråk

UNIVERSITETET I OSLO

Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2)

Litt om kompilering og interpretering. Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2) Syntaks og semantikk

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

Hjemmeeksamen 2 i INF3110/4110

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

EKSAMEN I FAG. Del 1 Flervalg (hver underoppgave teller 2.86%) Side 1 av 7. Denne oppgaven skal besvares på vedlagt avkrysningsskjema.

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering

INF2810: Funksjonell Programmering

INF3110 Programmeringsspråk. Dagens tema. Typer (Kapittel 3 frem til ) Innføring i ML (Kapittel & ML-kompendiet.) 1/19

Typer. 1 Type: boolean. 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR... 1/19. Forelesning Forelesning

INF2810: Funksjonell Programmering

INF2810: Funksjonell Programmering

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

Eksamensoppgave i TDT4258 Energieffektive datamaskinsystemer

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

Eksamensoppgave i IFUD1025 Programmering i Java

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl

Eksamen i emne TDT4165 PROGRAMMERINGSSPRÅK

TDT Øvingsforelesning 1. Tuesday, August 28, 12

UNIVERSITETET I OSLO

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

UNIVERSITETET I OSLO

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

Eksamensoppgave i MA0301 Elementær diskret matematikk løsningsforslag

INF2810: Funksjonell Programmering. Tilstand og verditilordning

Rekursjon og lister. Stephan Oepen & Erik Velldal. 1. februar, Universitetet i Oslo

Semantisk Analyse del I

INF2810: Funksjonell Programmering. Kommentarer til prøveeksamen

UNIVERSITETET I OSLO

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF2810: Funksjonell Programmering. En metasirkulær evaluator

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

INF2810: Funksjonell Programmering. En metasirkulær evaluator

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

INF2810: Funksjonell Programmering. Eksamensforberedelser

INF2810: Funksjonell Programmering. Tilstand og verditilordning

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

INF2810: Funksjonell Programmering. Dataabstraksjon og Trerekursjon

Eksamensoppgave i TDT4258 Energieffektive Datamaskinsystemer

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

UNIVERSITETET I OSLO

Eksamensoppgave i FIN3006 / FIN8606 Anvendt tidsserieøkonometri

Eksamensoppgave i TMA4140 Diskret matematikk

INF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer

INF2810: Funksjonell Programmering. Strømmer og utsatt evaluering

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

Løsningsforslag for Eksamensoppgave i TDT4190 Distribuerte systemer

Eksamensoppgave i TDT4258 Energieffektive Datamaskinsystemer

Sideeekter og makroer i Lisp

Haskell. Kjetil Ørbekk. Programvareverkstedet, 19. mars 2009

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering. Mer om strømmer

INF2810: Funksjonell Programmering. Mer om strømmer

INF2810: Funksjonell Programmering. Tilstand og verditilordning

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid:

INF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer

EKSAMEN I FAG. Del 1 Flervalg (hver underoppgave teller 2.86%) Side 1 av 7. Denne oppgaven skal besvares på vedlagt avkrysningsskjema.

Eksamensoppgave i TMA4140 Diskret matematikk

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

INF2810: Funksjonell Programmering. Lokale variabler. Og trær.

EKSAMEN med løsningsforslag

Eksamensoppgave i TMA4320 Introduksjon til vitenskapelige beregninger

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

TDT4100 Objektorientert programmering

Eksamen i SLI230, vår 2003.

Med Svarforslag UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet. 3 sider (side 6, 7 og 8, rives ut, fylles ut og leveres)

Eksamensoppgave i MA0301 Elementær diskret matematikk løsningsforslag

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din.

INF2810: Funksjonell Programmering. Strømmer og utsatt evaluering

Eksamen i HUMIT 2710, Funksjonell programmering, våren Ingen hjelpemidler er tillatt. <resten av forsiden> Side 1 av 7

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF2810: Funksjonell Programmering. Lokale variabler. Og trær.

Eksamensoppgave i TDT4100 Objektorientert programmering med Java

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Beskrivelse av programmeringsspråket Simpila INF Kompilatorteknikk Våren 2012

Dagens tema: Sjekking

Eksamensoppgave i TDT4186 Operativsystemer

Eksamensoppgave i TDT4100 Objektorientert programmering med Java

INF106 Objektorientert programmering

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Transkript:

Institutt for datateknikk og informasjonsvitenskap Eksamensoppgave i TD4165 Programmeringsspråk Faglig kontakt under eksamen: Lars Bungum a, Øystein Nytrø b Tlf: a 92046135, b 91897606 Eksamensdato: 5. august 2014 Eksamenstid (fra til): 09.00 13.00 Hjelpemiddelkode/Tillatte hjelpemidler: C: Ingen trykte og håndskrevne hjelpemidler tillatt. Bestemt, enkel kalkulator tillatt. Annen informasjon: Oppgaven har 4/18 deloppgaver/punkter. Alle har samme vekt. Skriv tydelig, kort og presist. Gardering og ulne formuleringer trekker ned. Om du er i tvil, forklar dine antakelser. Alle programmer skal skrives i Oz. Målform/språk: bokmål Antall sider: 10 Antall sider vedlegg: 0 Kontrollert av: Dato Sign Merk! Studenter finner sensur i Studentweb. Har du spørsmål om din sensur må du kontakte instituttet ditt. Eksamenskontoret vil ikke kunne svare på slike spørsmål.

TDT4165 Programmeringsspråk, 5. august 2014 Side 1 av 10 Retteveiledningen er ikke noe komplett løsningsforslag! Oppgave 1 Lat og annen programmering i Oz (5 punkter) a) Hva er hensikten med lat programmering? Forklar med et eksempel. Vis hvordan et uttrykk med syntakssukkeret lazy blir oversatt til ByNeed i kjernespråket. Hensikten er å muliggjøre behov- eller datadrevet utførelse. kunne bruke uelige/rekursive datastrukturer. gjøre kontrollflyt implisitt, - som del av uttrykksevaluering spare minne og beregning ved bare å evaluere det som faktisk etterspørres Eksempel: fun lazy { SumSquares N1 N2} N1*N1+N2*N2 blir i kjernespråket: SumSquares = proc { $ N1 N2? Result } local Compute in Compute = proc {$?R} local M1 in local M2 in M1 = { Number. * N1 N1} M1 = { Number. * N2 N2} R = { Number. + M1 M2} { ByNeed Compute Result } b) Bruk lat utførelse til å implementere ListOddIntegers som genererer alle odde heltall fra og med 1.

Side 2 av 10 TDT4165 Programmeringsspråk, 5. august 2014 fun { ListOddIntegers } fun lazy { Enumerate N} N { Enumerate N +2} in { Enumerate 1} c) Implementer fun {PickListItem Itemno List} som plukker element nummer Itemno, nummeret fra 1, fra listen List. fun { PickListItem Itemno List } case List of Head Tail then if Itemno == 1 then Head else { ListItem Tail Itemno -1} d) Hva blir resultatet av Browse-kallene eller å evaluere uttrykkene vist under? Forklar. OI1 ={ ListOddIntegers } OI2 ={ ListOddIntegers } { Browse local N in { PickListItems N OI1 } } { Browse local H T =[10 100] in T } local LowerBound Y C in Y = 5 proc { LowerBound X?Z} if X >=Y then Z=X else Z=Y

TDT4165 Programmeringsspråk, 5. august 2014 Side 3 av 10 { LowerBound 1 C} { Browse C} { Browse local Y in local X =[1 2] in X.1= Y.1 } local Dodat X = 2 Y in proc { Dodat Z} Z = 1 { ByNeed Dodat X} { Browse Y} Y = X + 1 1. Ingenting 2. 100 3. 5 4. Susps 5. 3 e) Implementer en funksjon som returnerer n-fakultet (n!) av et gitt tall. local Factorial in fun { Factorial N} fun { Factorial N F} if N < 2 then F else { Factorial N -1 F*N} in { Factorial N 1} { Browse { Factorial 5}}

Side 4 av 10 TDT4165 Programmeringsspråk, 5. august 2014 Oppgave 2 Programmeringsparadigmer og språkteori (5 punkter) a) Forklar hva komposisjonalitet betyr med hensyn til definisjon av et programmeringsspråk. Gi eksempler på språkegenskaper som er komposisjonelle (angi hvilket språk du bruker i eksemplet). Hva er fordeler og ulemper med komposisjonalitet i programmeringsspråk? Komposisjonalitet defineres av læreboken ( s. 411) som at Det skal være mulig å kombinere deler for å lage en ny del. Implisitt at vi kan abstrahere ved å navngi den nye delen. Definisjonen en del av flere egenskaper som har med abstraksjonsprinsippet å gjøre. Dette prinsippet går i korthet ut på at implementasjonen holdes adskilt fra spesifikasjonen, slik at det er mulig å bruke en komponent dersom man kjenner dens grensesnitt, uten å vite hvordan den er implementert. Et språk med komposisjonalitet er utvidbart: Det finnes uelige utvidelsesmuligheter. I Oz kan komposisjonelle språkegenskaper være proserdyrer, funktorer og moduler, som kan administreres via Modul-systemet. I mange språk har man muligheten for å definere nye typer. Dersom verdier er fastsatt eksplisitt i en rutine, vil ikke komponenten kunne la seg kombinere med andre for løse generelle problemer der verdien er parameterisert. Mangel på komposisjonalitet gir et språk som bare består av enkle koder for uttrykk/utsagn. Fordelen er at oversetting, parsing blir trivielt. Også arbeidet med å lese og å forstå et program blir tilsvare enkelt når alle navn/uttrykk/begrep er definert i språket og ikke av en programmerer. b) Hvilke deler har en komplett definisjon av et programmeringspsråk? Finnes det forskjellige måter å definere de forskjellige delene? Forklar! Syntaks - språkets form Semantikk - beregningsmodell som formaliserer betydning, utførelse og data. Pragmatikk - som omfatter programmering, verktøy, bibliotek, integrasjon osv. c) Kan du skissere hoveddelene av en komplett definisjon av kjernespråket for Oz (se punkt b)? Se lærebok.

TDT4165 Programmeringsspråk, 5. august 2014 Side 5 av 10 d) Hva er et typesystem i et programmeringsspråk? Forklar de viktigste egenskapene i et typesystem. Et typesystem knytter mengder av verdier til uttrykk i programmeringsspråket. Slike mengder kan være forhåndsdefinert, komponerbare på forskjellige måter, hierarkisk organisert mv. Eksempler er positivt! Se side 50 i lærboken, En type eller datatype er en mengde verdier sammen med operasjoner på disse verdiene. Eks heltall og addisjon og substraksjon. e) Forklar hva abstraksjonene prosedyre, funksjon og tråd betyr (i Oz). prosedyre: en procedure binder en variabel til en prosedyreverdi. En prosedyreverdi inneholder et statement som gjør operasjoner på variabler tilgjengelig i prosedyredefinisjonen eller det øvrige miljøet. funksjon: en function er syntaktisk sukker som kan oversettes til en proceduredefinisjon hvor returverdien må angis eksplisitt i en variabel tråd: en tråd en oppdeling av et samtidig program, der ulike deler av det kjører i ulike tråder. Trådene eksekveres for seg, slik at man for operasjoner det er mulig å dele opp kan utnytte parallel hardware-arkitektur ved å gjøre flere ting samtidig. Oppgave 3 Tråder og tjenere (4 punkter) Gitt følge tre definisjoner i Oz: /* Function Reactive takes a procedure Procedure as argument, and returns a value. This value, when called with a parameter Message, immediately applies Procedure to Message. */ fun { Reactive Procedure } proc { $ Message } { Procedure Message } /* Function Active takes a procedure Procedure as argument, and returns a value. This value, when called with a message Message, apps Message to a stream by sing it to the port ; messages are retrieved from the stream

Side 6 av 10 TDT4165 Programmeringsspråk, 5. august 2014 and Procedure is applied to them in a unique, separate thread. */ fun { Active Procedure } Stream Port = { NewPort Stream } proc { Process Message Messages } { Procedure Message } { Process Messages } in thread { Process Stream } proc { $ Message } { S Port Message } /* Function Hyperreactive takes a procedure Procedure as argument, and returns a value. The value, when called with a message Message, immediately starts a new thread in which the Procedure is applied to Message. */ fun { Hyperreactive Procedure } proc { $ Message } thread { Procedure Message } a) Hva slags verdier returnerer henholdsvis Reactive, Active og Hypereactive? Prosedyrer. Du ønsker å lage forskjellige klienter som skal pinge 1 en tjener. I det følge skal du anta dette brukseksemplet: /* server names */ A = ask. ntnu.no B = burle. ntnu.no /* Start logging */ { Browse startpinging (A)} /* Start pinging */ { Pinger A} 1 PING er en internettprotkoll og tjeneste for å sjekke at en tjener gir respons.

TDT4165 Programmeringsspråk, 5. august 2014 Side 7 av 10 /* Start logging */ { Browse startpinging (B)} /* Start pinging */ { Pinger B} Gitt proc { Ping Host } proc { Do Attempt } if Attempt < 3 then { Delay 1000} { Browse ping ( Host )} { Do Attempt +1} in {Do 0} så kan Pinger implementeres på tre alternative måter: 1. Pinger = {Reactive Ping} 2. Pinger = {Active Ping} 3. Pinger = {Hypereactive Ping} b) Pinger er implementert ved hjelp av Reactive. Hva blir resultatet (skrevet ut i Browsevinduet)? Er det flere mulige resultat? Ingen resultat? Deterministisk resultat? Intet retteforslag a. Se ordinær eksamen 2007. Utskrift må bli: pinging( ask.idi.ntnu.no ) ping( ask.idi.ntnu.no ) ping( ask.idi.ntnu.no ) ping( ask.idi.ntnu.no ) pinging( burle.idi.ntnu.no ) ping( burle.idi.ntnu.no ) ping( burle.idi.ntnu.no ) ping( burle.idi.ntnu.no ) c) Pinger er implementert ved hjelp av Active. Hva blir resultatet (skrevet ut i Browsevinduet)? Er det flere mulige resultat? Ingen resultat? Deterministisk resultat? fortsatt ordinær eksamen 2007

Side 8 av 10 TDT4165 Programmeringsspråk, 5. august 2014 d) Pinger er implementert ved hjelp av Hyperreactive. Hva blir resultatet (skrevet ut i Browsevinduet)? Er det flere mulige resultat? Ingen resultat? Deterministisk resultat? fortsatt ordinær eksamen 2007

TDT4165 Programmeringsspråk, 5. august 2014 Side 9 av 10 Oppgave 4 Syntaks og parsing (4 punkter) Lisp 2 er et tidlig (stort sett) funksjonelt, interpretere språk. Vi skal definere et nytt Lisp-likne språk Epsum 3. Et eksempel på et Epsum-program kan være: ;;; the value of one defined variable one to be 1 ( define one 1) ;;; the value of qq defined as a function qq to be the result ;;; of applying q on the result of applying q ( whatever q ;;; may be) on ( parameter ) n ( define (qq n) (q (q n ))) ;;; the value of applying qq to one (qq one ) Epsum er et uttrykksspråk, og alle uttrykk er applikasjoner, anvelser, av funksjoner på et argument (verdier kan sees på som funksjoner uten argumenter). Syntaksen til Epsum er enkel: et program er en sekvens av én eller flere uttrykk; er uttrykk er enten en definisjon, en anvelse, en identifikator eller et numerisk literal. en definisjon er enten en variabel-definisjon, (define variable uttrykk), eller en definisjon av en unær funksjon (define (function argument) uttrykk) en anvelse er et uttrykk på formen (funksjonsnavn uttrykk). a) Skriv en EBNF-grammatikk for Epsum utifra definisjonen gitt over slik at kodeeksemplene kan genereres av grammatikken. Husk å definere identifikatorer og tall (numeriske literaler) i grammatikken også! Hva er terminaler og ikke-terminaler i Epsum-grammatikken? Hva er startsymbolet? Likner sterkt på σ fra kont 2007 (august 2008). Grammatikk: definisjon ::= (define <id> <uttrykk>) (define (<id> <id>) <uttrykk>) id ::= {alfa} alfa ::= <a b...y z> anvelse ::= (<id> <uttrykk>) uttrykk ::= <definisjon> <anvelse> <numlit> numlit ::= {<siffer>} siffer ::= 0 1 2 3 4 5 6 7 8 9 2 List Processing language 3 Et ProgrammeringsSpråk Uten stor Mening

Side 10 av 10 TDT4165 Programmeringsspråk, 5. august 2014 b) Er grammatikken du har laget kontekstsensitiv? Forklar. Er den flertydig? Forklar. Intet retteforslag: Avhenger av grammatikken i forrige oppgave. Anta at det finnes en leksikalsk analysator som omformer programteksten til en Oz-liste av symboler. Hver identifikator er representert som en post med etikett id og tall med etikett num. Kodeeksemplet over vil bli representert som: [ ] ( define id( one ) num ( 1 ) ) ( define ( id( qq ) id( n ) ) ( id( q ) ( id( q ) id( n ) ) ) ) ( id( qq ) id( one ) ) c) Hvilke parsestrategier kan du bruke for å kontrollere syntaks for grammatikken? Skisser hvordan du kan bruke relasjonell utførelse for parsing. For den enkle grammatikken til Epsum er rekursiv nedstigningsparsing tilstrekkelig. I praksis ville man kanskje ha latt en parsergenerator (Bison... ) lage en LR(0)-parser og inkludere evaluering av uttrykkene og symboltabellgenerering. d) Implementer en samling prosedyrer, én for hvert ikke-terminal. Hver skal ha ett innparameter som inneholder en liste av symboler fra den leksikalske analysatoren som vist over. Hver prosedyre skal returnere true om den mottar en symbolliste som oppfyller ikke-terminalens definisjon i følge grammatikken din, false ellers. Ikke ta hensyn til feilretting eller feiltoleranse. Intet retteforslag a.