Compilerconstructie

najaar 2018

Toren Academiegebouw

Compilerconstructie is een derdejaars vak binnen de bachelor Informatica aan de Universiteit Leiden. Het wordt gegeven in het najaarssemester.

Praktische informatie

Docent: Rudy van Vliet
te vinden op: kamer 140 van het Snellius
telefoon: 071-527 2876
email: rvvliet(at)liacs(dot)nl
Assistent: Dennis Roos
Onderwijsvorm: hoorcollege, werkcollege (in het Nederlands), en een practicum met vier programmeeropdrachten
Hoorcollege: negen vrijdagen van 11.00-12.45 uur van Rudy van Vliet, in zaal 412 (tot half oktober) of 312 (na half oktober), en woensdag 14 november, 11.00-12.45 uur in zaal 412
Werkcollege: vier vrijdagen van 13.30-15.15 uur van Rudy van Vliet, in zaal 312 en woensdag 14 november, 13.30-15.15 uur in zaal 405
Practicumbijeenkomsten: vier vrijdagen van 13.30-15.15 uur en drie woensdagen van 11.00-12.45 uur van de assistent, in een grote computerzaal.
Voor de exacte data van hoorcollege, werkcollege en practicumbijeenkomsten, zie het schema onderaan deze pagina, of bekijk het rooster op de universitaire website.

Studielast

Met het behalen van dit vak verdient u 6 EC. Het niveau van het vak wordt aangeduid als `300'.

Voorkennis

Algoritmiek en Fundamentele Informatica 2.

Inhoud

Computerprogramma's in een hogere programmeertaal kunnen pas uitgevoerd worden door een computer als ze zijn vertaald naar lager-niveau code. In veel gevallen gebeurt dit door een compiler.
Bij dit vak leren we hoe compilers in verschillende stappen broncode omzetten in assemblycode. We bestuderen de theorie achter compilers, en passen deze toe bij het practicum, in een serie opdrachten waarbij we een eenvoudige compiler construeren.
Onderwerpen die aan de orde komen tijdens de colleges hebben betrekking op het proces van de constructie van een compiler, b.v.: lexical analysis, syntax analysis, semantic analysis, intermediate code generation, code generation, en code optimization.

Doelstelling

Toetsing

Schriftelijk tentamen aan het eind van het semester. Het eindcijfer van het vak is een gewogen gemiddelde van de cijfers voor het tentamen (50%) en het practicum (50%). Zowel tentamen als (alle) programmeeropdrachten moeten voldoende zijn.

Een voldoende cijfer voor het tentamen Compilerconstructie blijft staan tot het volgende jaar. Hetzelfde geldt voor een voldoende cijfer voor het complete practicum. Voldoende cijfers voor individuele onderdelen van het practicum blijven niet per se staan.

Tentamens

Er zijn twee (schriftelijke) tentamens geweest:
Eerste tentamen: donderdag 20 december 2018, 14.00-17.00.
Hertentamen: donderdag 14 maart 2019, 14.00-17.00.
Beide tentamens zijn nog terug te vinden in de lijst met oude tentamens onderaan. Voor het eerste tentamen staat daar ook een handgeschreven uitwerking van de docent.
Alle cijfers (voor practicum en/of tentamens, inclusief eindcijfers), zijn (als het goed is) te vinden in Blackboard. Hierbij geldt de volgende legenda.
Je kunt je tentamen inzien bij de docent.

Vragenuur

Op dinsdagmiddag 18 december 2018 was er een vragenuur voor het tentamen. Daarbij kon je de vragen stellen die opgekomen waren bij het leren voor het tentamen.

Practicum

In vier programmeeropdrachten wordt de theorie uit de hoorcolleges toegepast. De eerste opdracht is een eenvoudige opdracht, bedoeld om er een beetje in te komen. In de volgende opdrachten wordt in drie stappen een eenvoudige compiler opgebouwd; elke stap is een aparte programmeeropdracht. De opdrachten kunnen in teams van twee personen worden gemaakt. Alle programmeeropdrachten moeten (goed) worden gemaakt.

Bij het begin van de eerste programmeeropdracht is er een introductie en practicumbijeenkomst van twee uur (op vrijdagmiddag). Vervolgens is er een week tijd om de opdracht af te ronden.
Bij het begin van de tweede, derde en vierde programmeeropdacht is er steeds eerst een introductie (gewoon op vrijdagochtend), een week later een practicumbijeenkomst van twee uur (op vrijdagmiddag) en weer anderhalve week later een practicumbijeenkomst van twee uur (op woensdagochtend). Aan het eind van die laatste week moet je je oplossing inleveren. In totaal is er voor elk van deze drie opdrachten dus drie weken tijd om de opdracht af te ronden.

De eerste opdracht levert een + op, voor de andere drie opdrachten krijg je een cijfer. Het gemiddelde van die drie cijfers wordt het eindcijfer voor het practicum. Wie voor een of meer opdrachten geen voldoende haalt, kan eenmalig herkansen, aan het eind van het semester. Het maximale cijfer voor de betreffende opdrachten is dan een 5.5.

Als plagiaat wordt geconstateerd, krijgen de betrokken teams geen cijfer voor de betreffende opdracht en dit collegejaar ook geen mogelijkheid om de opdracht alsnog te doen.

Meer informatie over te laat, niet voldoende en plagiaat...

Studenten die vorig studiejaar alle vier programmeeropdrachten hebben afgerond, hoeven het programmeerwerk dit jaar niet opnieuw te doen. Ouderejaars studenten die het practicum helemaal niet of slechts gedeeltelijk hebben gedaan, moeten contact opnemen met de docent: rvvliet(at)liacs(dot)nl. Deelresultaten blijven niet automatisch geldig.

Wie in eerste instantie niet alle vier opdrachten (voldoende) had gemaakt, kreeg eenmalig de kans de ontbrekende opdracht(en) te herkansen / alsnog goed te maken. Zoals hierboven gemeld, kon je voor de betreffende opdrachten nog maximaal een 5.5 halen.

Literatuur

Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman: "Compilers: Principles, Techniques, and Tools", second edition, Pearson New International Edition, 2013, ISBN: 978-1-29202-434-9.

Ook eerdere versies van de tweede editie zijn bruikbaar. Het betreft dan de druk uit 2006 (de purple dragon, met ISBN: 9780321486813) of de internationale editie hiervan uit 2007 (met ISBN: 978-0-321-49169-5). De hoofdstukken die we bij Compilerconstructie gebruiken uit de editie van 2013 zijn namelijk identiek aan diezelfde hoofdstukken in de editie van 2006 en 2007.


Drie versies van editie 2: de internationale editie uit 2013, de Noord Amerikaanse editie uit 2006, de internationale editie uit 2007.

Tentamenstof

De tentamenstof is de stof die tijdens de colleges is behandeld. Dit komt neer op de volgende hoofdstukken/paragrafen uit het boek:

Schema, slides en opgaven

Hieronder staat het schema voor de hoorcolleges, de werkcolleges en de practicumbijeenkomsten. Voor wie door omstandigheden een hoorcollege of werkcollege moet missen, worden hier na elk hoorcollege/werkcollege de gebruikte slides / behandelde opgaven gepubliceerd.
N.B.: De slides zijn niet bedoeld ter vervanging van het boek. Het kan dus lastig zijn om de stof puur met behulp van de slides, zonder het boek, te begrijpen.

Oude tentamens

Oude website

Het vak Compilerconstructie wordt al vele jaren gegeven bij de opleiding Informatica. Zie bijvoorbeeld de website van Compilerconstructie, najaar 2017. U vindt daar ook nog meer oude tentamens.
Vragen en opmerkingen kunt u sturen naar:
Rudy van Vliet; rvvliet(at)liacs(dot)nl
Laatste wijziging: 23 augustus 2019 - http://www.liacs.leidenuniv.nl/~vlietrvan1/coco/