Compilerconstructie

najaar 2014

Toren Academiegebouw

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

Practische informatie

Docent: Rudy van Vliet
te vinden op: kamer 124 van het Snellius
telefoon: 071-527 5777
email: rvvliet(at)liacs(dot)nl
Assistent: Mathijs van de Nes
email: s0828599(at)umail(dot)leidenuniv(dot)nl
Opzet college: hoorcollege, werkcollege (in het Nederlands), en practicum
Collegetijden: Hoorcollege en practicum: dinsdag van 11:15 - 13:00 uur in zaal 402,
van Rudy van Vliet (hoorcollege) en Mathijs van de Nes (practicum)
van dinsdag 2 september tot en met dinsdag 2 december 2014.
Bij de practicumbijeenkomsten beginnen we vaak met een introductie in zaal 402, waarna we aan het werk gaan in een grote computerzaal.
Werkcollege: dinsdag van 13:45 - 15:30 uur in zaal 402,
van Rudy van Vliet op 16 september, 23 september, 21 oktober, 4 november, 11 november en 25 november 2014.

Studielast

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

Tentamens

Er zijn twee (schriftelijke) tentamens geweest:
Eerste tentamen: maandag 15 december 2014, 14:00-17:00, in zaal B03 van het Snellius.
Hertentamen: dinsdag 10 maart 2015, 14:00-17:00, in zaal 174.
Omdat het hertentamen vrij lang was, waren er 109 punten te verdienen. Het cijfer is wel gewoon het totaal aantal punten, gedeeld door 10.

Beide tentamens zijn nog terug te vinden in de lijst met oude tentamens onderaan. Alle cijfers, inclusief eindcijfers, zijn hier te bekijken. Het nagekeken werk is in te zien bij de docent, op kamer 124.

Vragenuur

Er was een vragenuur voor het tentamen op maandagochtend 15 december, vanaf 10:30 uur, in zaal B03 van het Snellius. Tijdens het vragenuur konden die vragen gesteld worden die opgekomen waren bij het leren van 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. Alle programmeeropdrachten moeten (goed) worden gemaakt. Bij het begin van elke programmeeropdracht is er een introductie en practicumbijeenkomst van twee uur (gewoon op dinsdagochtend). Vervolgens is er nog drie weken de tijd om de opdracht af te ronden (behalve bij de eerste opdracht).

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.

Cijfers

Het eindcijfer van het vak is een gewogen gemiddelde van de cijfers voor het tentamen en het practicum: 50% tentamen + 50% practicum.
N.B.: om het vak te halen, moet zowel voor het tentamen als voor alle vier programmeeropdrachten een voldoende zijn gehaald.

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.

Doelstelling

Inzicht verwerven in de functionaliteit van de verschillende fasen van het compileerproces, en hoe deze fasen aan elkaar gerelateerd zijn. Vertrouwd raken met de verschillende stappen in de constructie van een compiler en de problemen die daarbij optreden.

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.

Voorkennis

Algoritmiek en Fundamentele Informatica 2.

Literatuur

Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman: "Compilers: Principles, Techniques, & Tools", second edition, Pearson / Addison Wesley, 2007, ISBN: 978-0-321-49169-5.
Eventueel kan ook de eerste editie van het boek, uit 1986, nog gebruikt worden. De auteurs van die editie zijn Aho, Sethi en Ullman.

Vanwege de draak op de voorkant van het boek (ook bij een voorganger van het boek) wordt het boek ook wel het `dragon book' genoemd. Helaas is de draak verdwenen van de voorkant van de internationale editie van de tweede editie...

Editie 1 (red dragon), Editie 2 (purple dragon), Internationale editie van Editie 2.

De tweede editie is de officiele editie. Tijdens de colleges zal dan ook daarnaar verwezen worden. Heb je nog de eerste editie, dan kan de volgende verwijslijst (uit najaar 2012) van de tweede naar de eerste editie handig zijn. Voor zover er in de verwijslijst over tentamenstof wordt gesproken, betreft dat de tentamenstof uit najaar 2012. De tentamenstof in najaar 2014 wijkt hier licht vanaf.

Tentamenstof

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

Schema en slides

Hieronder staat het gehanteerde schema voor de hoorcolleges, de werkcolleges en de practicumbijeenkomsten. De slides die tijdens het college gebruikt zijn en de opgaven van de werkcolleges, zijn hieronder nog te bekijken:
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 2013.
Vragen en opmerkingen kunt u sturen naar:
Rudy van Vliet; rvvliet(at)liacs(dot)nl
Laatste wijziging: 4 augustus 2015 - http://www.liacs.leidenuniv.nl/~vlietrvan1/coco/