Skriftlig eksamen, Programmer som Data 2. 3. januar 2014



Relaterede dokumenter
Skriftlig eksamen, Programmer som Data Onsdag 6. januar Spørgsmål 1 (20 %): Regulære udtryk og automater

Skriftlig eksamen i Datalogi

Skriftlig eksamen, Programmer som Data Mandag 9. januar 2012

Skriftlig eksamen i Datalogi

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

Skriftlig eksamen i Datalogi

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet)

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Skriftlig eksamen, Programmer som Data Onsdag 5. januar 2011

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

Udleveret 1. oktober, afleveres senest ved øvelserne i uge 44 (29. oktober-1. november)

Løsningsforslag Skriftlig eksamen 3. januar 2013

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

Yderligere udvidelser af oversætter for Minimal

DM507 Algoritmer og datastrukturer

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Sproget Rascal (v. 2)

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Basal statistik for lægevidenskabelige forskere, forår 2014 Udleveret 4. marts, afleveres senest ved øvelserne i uge 13 (25.

Oversættere Vejledende løsninger til Skriftlig eksamen onsdag d. 24. januar 2007

DM507 Algoritmer og datastrukturer

DANMARKS TEKNISKE UNIVERSITET

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

DM507 Algoritmer og datastrukturer

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

Oversættere Skriftlig eksamen onsdag d. 24. januar 2007

DM507 Algoritmer og datastrukturer

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Eksamen dcomnet Q2/2012. Studiekortsnummer Navn

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

BEREGNINGSTEKNIK INDENFOR ELEKTRONIKOMRÅDET 1

Løsning af møntproblemet

Danmarks Tekniske Universitet

Løsningsforslag Skriftlig eksamen 9. januar 2012

Bogfunktionen eller Slægtsbogen i FTM

DRONNINGER (QUEENS) Opgave 1

SRP Retningslinjer for studieretningsprojekter ved Holstebro Tekniske Gymnasium

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DATALOGI 1E. Skriftlig eksamen mandag den 23. juni 2003

Dat 2/BAIT6/SW4: Syntaks og semantik En manual for studerende

Systemkald DM Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/ Afleveret af: Jacob Christiansen,

Hjemmeopgave. I bedes benytte sidste side fra denne opgavetekst i udfyldt stand som forside på jeres opgavebesvarelse. Siden findes også på nettet.

Eksamen i Diskret Matematik

Projekt arbejde til kurset Advanced Models and Programs, SASP-AMP 2008 Poul Brønnum, IT Universitetet i København, Maj Indholdsfortegnelse

DM507 Algoritmer og datastrukturer

Basal statistik for lægevidenskabelige forskere, forår Udleveret 12. februar, afleveres senest ved øvelserne i uge 10 (6.-9.

Basal statistik for lægevidenskabelige forskere, forår Udleveret 12. marts, afleveres senest ved øvelserne i uge 14 (2.-4.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

4 Basal Objekt-orienteret Programmering I.

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

Skriftlig Eksamen Kombinatorik, sandsynlighed og randomiserede algoritmer (DM528)

Danmarks Tekniske Universitet

Skriftlig eksamen i Datalogi

IT-manual August 2014

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Kursus navn: Indledende programmering Kursus nr

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

Opgaveløsninger til eksamensopgaver. Opgavesæt 46

Introduktion til R. March 8, Regne- og tegneprogrammet R kan frit downloades fra adressen. http : //mirrors.sunsite.dk.cran

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

Danmarks Tekniske Universitet

Skriftlig eksamen - med besvarelse Topologi I (MM508)

Skriftlig prøve i Beregningsteknik indenfor elektronikområdet

Software Construction 1 semester (SWC) Spørgsmål 1

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Vejledning for vurdering af redesign-forslag fra Design & Usabilityevalueringsprojektet

Kursusarbejde 3 Grundlæggende Programmering

Skriftlig Eksamen Beregnelighed (DM517)

SRP Retningslinjer for studieretningsprojekter ved Holstebro Tekniske Gymnasium

Eksamen dcomnet 2012Q4. Årskortsnummer Navn

DATALOGI 1E. Skriftlig eksamen fredag den 7. juni 2002

Forelæsning Uge 5 Mandag

DM13-1. Obligatorisk opgave E.05. Jacob Aae Mikkelsen

Opgaveløsninger til eksamensopgaver. Opgavesæt 22

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing

Kursistmanual til Større skriftlig opgave. 2 Hf,

5. Vælg den udgave du ønsker, og skriv det antal du ønsker at købe i rubrikken efter antal og

Varmeligningen og cosinuspolynomier.

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

SWC eksamens-spørgsmål. Oversigt

Kontrol-strukturer i PHP

Computerarkitektur Eksamen 2014Q2. Niels Olof Bouvin A. Studienummer Navn

Basal statistik for sundhedsvidenskabelige forskere, efterår 2014 Udleveret 30. september, afleveres senest ved øvelserne i uge 44 (

Københavns Universitet, Det naturvidenskabelige Fakultet. Afleveringsopgave 1

Eksamen forår og sommer 2015

Test af It-komponent

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Computerarkitektur Eksamen 2014Q3. Niels Olof Bouvin. Studienummer Navn

2og sf.pdf?menuid=150560

Skriftlig prøve i Beregningsteknik indenfor elektronikområdet

Forelæsning Uge 4 Mandag

Oplysninger, regler og gode råd

Opgaveløsninger til eksamensopgaver. Opgavesæt 42

Basal statistik for sundhedsvidenskabelige forskere, efterår 2015 Udleveret 29. september, afleveres senest ved øvelserne i uge 44 (

Transkript:

Skriftlig eksamen, Programmer som Data 2. 3. januar 2014 Dette eksamenssæt har 5 sider. Tjek med det samme at du har alle siderne. Eksamenssættet udleveres elektronisk fra kursets hjemmeside torsdag 2. januar 2014 kl 09:00. Besvarelsen skal afleveres på papir senest fredag 3. januar 2014 kl 14:00 som følger: Besvarelsen skal afleveres til studieadministrationen (fløj 3D) på IT-Universitetet. Som altid skal der bruges ITU-projektforside, se http://studyguide.itu.dk/en/swu/your-programme/forms Som altid skal der afleveres tre eksemplarer. Der er 4 opgaver. For at få fulde point skal du besvare alle opgaverne tilfredsstillende. Hvis der er uklarheder, inkonsistenser eller tilsyneladende fejl i denne opgavetekst, så skal du i din besvarelse beskrive disse og beskrive hvilken tolkning af opgaveteksten du har anvendt ved besvarelsen. Din besvarelse skal laves af dig og kun dig, og det gælder både programkode, lexer- og parserspecifikationer, eksempler, osv., og den forklarende tekst der besvarer opgavespørgsmålene. Det er altså ikke tilladt at lave gruppearbejde om eksamen. Din besvarelse skal indeholde følgende underskrevne erklæring: Jeg erklærer hermed at jeg selv har lavet hele denne eksamensbesvarelse uden hjælp fra andre. (underskrift) (dato) Du må bruge alle bøger, forelæsningsnoter, forelæsningsplancher, opgavesæt, dine egne opgavebesvarelser, internetressourcer, lommeregnere, computere, og så videre. Du må naturligvis ikke plagiere fra andre kilder i din besvarelse, altså forsøge at tage kredit for arbejde som ikke er dit eget. Din besvarelse må ikke indeholde tekst, programkode, figurer, tabeller eller lignende som er skabt af andre end dig selv, med mindre der er fyldestgørende kildeangivelse, dvs. at du beskriver oprindelsen af den pågældende tekst (eller lignende) på en komplet og retvisende måde. Det gælder også hvis den inkluderede kopi ikke er identisk, men tilpasset fra tekst eller programkode fra lærebøger eller fra andre kilder. Hvis en opgave kræver at du definerer en bestemt funktion, så må du gerne definere alle de hjælpefunktioner du vil, men du skal definere den ønskede funktion så den har netop den type og giver det resultat som opgaven kræver. Udformning af besvarelsen Besvarelsen skal bestå af forklarende tekst (på dansk eller engelsk) der besvarer spørgsmålene, med væsentlige programfragmenter indsat i den forklarende tekst, eller vedlagt i bilag (der klart angiver hvilke kodestumper der hører til hvilke opgaver). Vær omhyggelig med at programfragmenterne beholder det korrekte layout når de indsættes i den løbende tekst, for F#-kode er som bekendt layoutsensitiv. Baggrund for opgavesættet Opgaverne går ud på at udvide micro-c sproget på forskellige måder som angivet nedenfor. Micro-C sproget er beskrevet i Programming Language Concepts kapitel 7 og 8 samt i de tilsvarende forelæsninger i kursusuge 40 41. Som udgangspunkt for opgavebesvarelsen skal du bruge implementationen af micro-c fra microc.zip, der kan downloades fra kursushjemmesiden. Brug den almindelige forlæns oversætter i Comp.fs, ikke den baglæns i ContComp.fs. 1

Opgave 1 (25 %): For-to-løkker Udvid MicroC med en for-to-løkke som de kendes fra BASIC eller Pascal, så man kan skrive eksempelvis: for i=0 to 100 do sum = sum+i; For at gøre dette skal du udvide lexer- og parser-specifikationerne CLex.fsl og CPar.fsy. Du kan dernæst udvide den abstrakte syntaks i Absyn.fs ved at definere en ny konstruktor ForTo i stmt typen, og tilføje et passende gren i cstmt funktionen i oversætteren i Comp.fs. Men det er nok nemmere simpelthen at lade parseren generere passende abstrakt syntaks uden at ændre i Absyn.fs eller Comp.fs. En for-to-løkke på den generelle form: for x = e1 to e2 do stmt er nemlig ækvivalent med en blok af denne form, indeholdende en while-løkke: { int x; x = e1; while (x <= e2) { stmt x=x+1; Det er altså nok at lade den semantiske aktion {... i parseren konstruere abstrakt syntaks der bygger på de eksisterende konstruktorer såsom Block, While, Expr, Dec, Stmt og så videre. 1. Vis, i udklip, de modifikationer du har lavet til CLex.fsl og CPar.fsy og eventuelt Absyn.fs og Comp.fs, og giv en skriftlig forklaring af modifikationerne på 10 20 linjer. 2. Lav et testeksempel der viser at din implementation af for-løkker fungerer korrekt. Vis testeksemplet og forklar hvilket resultat det skal give. 3. Forklar (fx med angivelse af F#-udtryk og kommandolinjeordrer) hvordan du har oversat og kørt testeksemplet, og vis det faktiske resultat af at køre det. (Husk at et problem i fsyacc giver 16 shift/reduce fejlmeldinger på grund af nonassoc-direktivet for tokens LT, GE, LE, osv. i CPar.fsy. Disse fejlmeldinger kan du se bort fra). 2

Opgave 2 (25 %): Sammensatte tildelinger Udvid micro-c med sammensatte tildelinger af formen x += e og x -= e. Du skal modificere lexer- og parserspecifikationerne, den abstrakte syntaks, og oversætterens cexpr funktion. Ligesom for almindelige tildelinger x = e skal venstresiden x være en lvalue, dvs. af abstrakt syntaks typen access. Venstresiden x må kun evalueres én gang. For eksempel skal udførelsen af: arr[i=i+1] += 100; kun udregne arr[i=i+1] én gang, og dermed kun lægge 1 til variabel i, ikke 2. 1. Vis (i udklip) de modifikationer du har lavet til CLex.fsl og CPar.fsy og Absyn.fs og Comp.fs, og giv en skriftlig forklaring af modifikationerne på 20 40 linjer. 2. Angiv et testprogram der viser at arr[i=i+1] += 100 virker som det skal: både at det relevante element af arr er blevet øget med 100, og at i er blevet øget med 1. 3. Vis resultatet fra en kørsel af testprogrammet. 3

Opgave 3 (25 %): Simple arrayindekstjek Som forklaret i forelæsningen fra uge 40 (lecture06.pdf, slide 19), og som det fremgår af Comp.fs, så repræsenterer micro-c et n-element array int arr[n] ved hjælp af n+1 stakpladser, således: q q + 1 q + n 1 a... arr[0] arr[1]... arr[n-1] q... Her er arr[0]... arr[n-1] arrayets elementer, der efterfølges af q, som er adressen på arr[0]. Denne repræsentation kan udnyttes til at lave et fattigmands -indekstjek i micro-c: Hvis a er adressen på stakpladsen der indeholder q, så er (a q) = n. Når man udfører koden svarende til en arrayindeksering arr[i] kan man altså først tjekke om 0 <= i < n og skrive en fejlmelding hvis dette ikke er tilfældet. Bemærk at det kun virker hvis arr er erklæret og allokeret som et array, enten globalt eller lokalt, i micro-c. Det duer ikke hvis arr er et parameteroverført array eller hvis man laver pointerbaseret indeksering p[i]. Derfor er der tale om et fattigmands-indekstjek. I opgavebesvarelsen nedenfor skal du ignorere disse begrænsninger og bare håndtere det beskrevne tilfælde hvor det virker. For at implementere denne type indekstjek skal du udvide den abstrakte maskine med en ny ordre INDEX der beregner adressen på et arrayelement, og du skal modificere micro-c oversætteren lidt. Virkningen af den nye ordre kan beskrives som i tabellen side 140 i bogen Programming Language Concepts: Instruction Stack before Stack after Effect 0 CSTI i s s, i Push constant i... 26 INDEX s, a, i s, s[a] + i Checked array indexing I tabellen ovenfor er den eksisterende ordre 0 CSTI medtaget til sammenligning. I den nye ordre 26 INDEX er a adressen på stakpladsen lige efter arrayets elementer, og denne plads indeholder tallet q = s[a] som er adressen på arrayets element 0, sådan at adressen på arrayets element i er s[a] + i. Arrayets længde er således a q. Ordren INDEX skal først tjekke at i er et lovligt indeks i arrayet. Hvis indekset er lovligt, så lægges adressen q + i på stakken; og hvis indekset er ulovligt, så udskrives en fejlmeddelelse (fx med System.out.println) og den abstrakte maskine standses. For at tilføje den nye ordre til den abstrakte maskine skal du tilpasse både filen Machine.fs og filen Machine.java. Vink: Se efter hvordan en eksisterende ordre, såsom STOP, håndteres i disse to filer. Du skal også ændre micro-c oversætteren i Comp.fs sådan at koden der genereres for arr[idx] ikke længere er: <arr> LDI <idx> ADD men i stedet bliver: <arr> <idx> INDEX 1. Vis (i udklip) de modifikationer du har lavet til Machine.fs og Machine.java og Comp.fs og giv en skriftlig forklaring af modifikationerne på 20 40 linjer. 2. Forklar hvordan dette bevirker at der kommer indekstjek både på arrayopslag x = arr[i] + 2 og på array-tildelinger arr[i] = 42. 3. Skriv et micro-c testprogram baseret på denne skitse: void main(int i, int j) { int arr[3];... initialisering af arr... print arr[i]; arr[j] = 42;... for at demonstrere at det fungerer som ventet for lovlige og ulovlige værdier af i og j. 4. Vis det komplette testprogram og resultaterne fra relevante kørsler af det. Forklar det forventede og det faktiske resultat af hver kørsel. 4

Opgave 4 (25 %): Typetjek af lvalue-udtryk Skriv en funktion taccess til at typetjekke lvalue-udtryk i micro-c, altså udtryk af en formerne x eller *p eller a[i], svarende til abstrakt syntaks type access fra filen Absyn.fs. Typetjekfunktionen skal have denne type: taccess (access : access) (varenv : varenv) (funenv : funenv) : typ hvor typerne access og typ er fra Absyn.fs og varenv og funenv er fra Comp.fs. Funktion taccess skal returnere typen for det givne udtryk hvis det er veltypet, og ellers kaste en exception ved hjælp af funktionen failwith "type error" eller lignende. Du kan antage at der allerede findes en tilsvarende funktion texpr til at typetjekke rvalue-udtryk: texpr (e : expr) (varenv : varenv) (funenv : funenv) : typ Husk på at i C og micro-c kan man indeksere både ud fra arrays arr[i] og ud fra pointere p[i] hvor p har type int* eller en anden pointertype. Hvis du vil typetjekke din definition af taccess-funktionen med F#-oversætteren kan du fingere en tom definition af texpr sådan her i filen Comp.fs: let rec texpr (e : expr) (varenv : varenv) (funenv : funenv) : typ = failwith "not implemented" and taccess (access : access) (varenv : varenv) (funenv : funenv) : typ =... din funktionsdefinition... 1. Vis din taccess funktion i sin helhed og skriv 15 30 linjers forklaring af den. (Bemærk at det ikke kræves at du skal udføre taccess-funktionen; det kan jo ikke gøres når der ikke er defineret en fungerende texpr funktion). 5