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: Rintse van de Vlasakker Onderwijsvorm: hoorcollege, werkcollege (in het Nederlands),
en een practicum met vier programmeeropdrachten Hoorcollege:
tien vrijdagen van 11.15-13.00 uur
van Rudy van Vliet,
in zaal B02.
Werkcollege: zes vrijdagen van 14.15-16.00 uur
van Rudy van Vliet,
in zaal 403.
Practicumbijeenkomsten:
vier vrijdagen van 16.15-18.00 uur of van 14.15-16.00 uur,
en drie andere momenten,
van de assistent,
in computerzaal 302-304.
Voor de exacte data van hoorcollege, werkcollege en practicumbijeenkomsten,
zie het schema onderaan deze pagina.
Studielast
Met het behalen van dit vak verdient u 6 EC.
Het niveau van het vak wordt aangeduid als `300'.
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
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.
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 19 december 2019,
14.15-17.15.
Hertentamen:
donderdag 23 januari 2020,
14.15-17.15.
Beide tentamens zijn nog terug te vinden in de lijst met oude tentamens
onderaan deze pagina. Bij het eerste tentamen is daar ook
een handgeschreven uitwerking van de docent te vinden.
Beide tentamens zijn nagekeken.
De cijfers, inclusief eindcijfers, staan
in Blackboard.
Bij de kolommen in Blackboard geldt de volgende
legenda.
Je kunt je nagekeken tentamen inzien bij de docent.
Vragenuur
Op woensdagochtend 18 december 2019 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 een of anderhalve week later een practicumbijeenkomst van twee uur
(op ...).
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.
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 een of meer opdrachten die jaar niet (voldoende) had afgerond,
kon die herkansen met als nieuwe deadline 14 februari 2020, 23.59 uur.
Alle inzendingen, ook die van de herkansingen, zijn nagekeken.
De cijfers staan in
Blackboard.
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:
Hieronder staat het
gehanteerde
schema voor de hoorcolleges, de werkcolleges en
de practicumbijeenkomsten.
Voor wie door omstandigheden een hoorcollege of werkcollege moest
missen,
zijn ook de bij de colleges gebruikte slides / behandelde
opgaven 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.
Vrijdag 6 september 2019, 11.15-13.00:
hoorcollege 1: Overview.
Slides college 1
Vrijdag 13 september 2019, 11.15-13.00:
hoorcollege 2: Symbol Table / Lexical Analysis.
Slides college 2
Vrijdag 20 september 2019, 11.15-13.00:
hoorcollege 3: Syntax Analysis 1.
Slides college 3
Slides 65-72 over error handling zijn niet behandeld en horen dus niet
tot de tentamenstof. De ge-interesseerde lezer kan wel kijken naar met name
het concrete voorbeeld op slide 71.
Vrijdag 20 september 2019, 14.15-16.00:
werkcollege.
Opgaven werkcollege 3.
We zijn hier niet aan toegekomen.
Kijk derhalve zelf naar deze opgaven.
Vrijdag 27 september 2019, 11.15-13.00:
hoorcollege 4: Syntax Analysis 2.
Slides college 4
Vrijdag 27 september 2019, 16.15-18.00:
introductie programmeeropdracht 1,
gevolgd door
practicumbijeenkomst.
Vrijdag 11 oktober 2019, 11.15-13.00:
hoorcollege 5: Syntax DAG / Types.
Slides college 5
Vrijdag 11 oktober 2019, 14.15-16.00:
introductie programmeeropdracht 2 (in 403), gevolgd door
practicumbijeenkomst (in 302-304).
Vrijdag 18 oktober 2019, 11.15-13.00:
hoorcollege 6: Intermediate Code Generation 1.
Slides college 6
werkcollege.
Opgave werkcollege 6.
We zijn hier niet aan toegekomen.
Kijk derhalve zelf naar deze opgave.
Vrijdag 18 oktober 2019, 14.15-16.00:
practicumbijeenkomst: programmeeropdracht 2.
Vrijdag 25 oktober 2019, 14.15-16.00:
practicumbijeenkomst: programmeeropdracht 2.
Vrijdag 1 november 2019, 11.15-13.00:
hoorcollege 7: Intermediate Code Generation 2.
Slides college 7
Het vak Compilerconstructie wordt al vele jaren gegeven bij de opleiding
Informatica.
Zie bijvoorbeeld
de website van Compilerconstructie, najaar 2018.
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: 18 augustus 2020
- http://www.liacs.leidenuniv.nl/~vlietrvan1/coco/