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
Op de homepage
van de docent kunt u zien of hij op zijn werk te bereiken is.
Assistent: Mathijs van de Nes
email: mvdnes(at)liacs(dot)nl Opzet college: hoorcollege en enkele werkcolleges (in het Nederlands),
en practicum Collegetijden: Hoorcollege en practicum:
dinsdag van 11:15 - 13:00 uur in zaal 403,
van Rudy van Vliet (hoorcollege)
en Mathijs van de Nes (en Teddy Zhai) (practicum)
van dinsdag 3 september tot en met dinsdag 3 december 2013.
Bij de practicumbijeenkomsten beginnen we vaak met een introductie in
zaal 403, waarna we aan het werk gaan in zaal 302-304. Werkcollege: dinsdag van 13:45 - 15:30 uur in zaal 403,
van Rudy van Vliet op 24 september, 22 oktober en 12 november 2013.
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: dinsdag 17 december 2013, 10:00-13:00, in zaal 174.
Hertentamen: dinsdag 11 maart 2014, 14:00-17:00.
Beide tentamens zijn nog terug te vinden in de lijst met oude tentamens
onderaan.
Studenten kunnen hun eigen uitwerkingen van de tentamens,
inclusief correcties, inzien bij de docent.
Alle cijfers (practicum, tentamen, hertentamen, eindcijfers) kunt u
hier bekijken (inclusief herkansingen
opdracht 4).
Vragenuur
Op vrijdagmiddag 13 december 2013 was er vanaf 14:00 uur een vragenuur
voor het tentamen.
Tijdens het vragenuur konden die vragen gesteld worden die opkwamen 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
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.
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 2013 wijkt hier licht vanaf.
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.
De slides die tijdens het college gebruikt zijn,
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.
Dinsdag 3 september 2013:
hoorcollege 1: Overview.
Slides college 1,
en desgewenst een
kleine versie,
om zuinig af te drukken.
Dinsdag 10 september 2013:
hoorcollege 2: Symbol Table / Lexical Analysis.
Slides college 2,
en desgewenst een
kleine versie,
om zuinig af te drukken.
Dinsdag 17 september 2013:
hoorcollege 3: Syntax Analysis 1.
Slides college 3,
en desgewenst een
kleine versie,
om zuinig af te drukken (gekomen t/m slide 39, een week later afgemaakt).
Dinsdag 1 oktober 2013:
practicum bijeenkomst: programmeeropdracht 1.
Dinsdag 8 oktober 2013:
hoorcollege 5: Static Type Checking + introductie programmeeropdracht 2.
Slides college 5,
en desgewenst een
kleine versie,
om zuinig af te drukken.
Dinsdag 15 oktober 2013:
practicum bijeenkomst: programmeeropdracht 2.
Dinsdag 22 oktober 2013:
hoorcollege 6: Intermediate Code Generation.
Slides college 6,
en desgewenst een
kleine versie,
om zuinig af te drukken.
's Middags werkcollege.
Slides werkcollege 6,
en desgewenst een
kleine versie,
om zuinig af te drukken.
Dinsdag 29 oktober 2013:
practicum bijeenkomst: programmeeropdracht 3.
Dinsdag 5 november 2013:
hoorcollege 7: Storage Organization en Code Generation.
Slides college 7,
en desgewenst een
kleine versie,
om zuinig af te drukken.
Dinsdag 12 november 2013:
hoorcollege 8: Code Generation en Code Optimization.
Slides college 8,
en desgewenst een
kleine versie,
om zuinig af te drukken.
's Middags werkcollege:
opgaven werkcollege 8.
Dinsdag 19 november 2013:
practicum bijeenkomst: programmeeropdracht 4.
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/najaar2013/