Nada

Programspråksimplementation, Läsåret 03/04

Författare: Lars Engebretsen, NADA

Kursanalys

Kursdata

Kurs2D1375, Programspråksimplementation, 4p
ExaminationTentamen (2p), Laboration (2p)
Kursen genomfördHT 2003
Föreläsningar2 timmar (1 tillfälle)
Kurslitteratur Appel, Modern compiler implementation in Java, second edition
Antal registrerade studenter36
Kursansvarig/föreläsareLars Engebretsen

Mål

Kursens mål är att ge: 1) teorin bakom och principerna för konstruktion och implementation av kompilatorer och andra översättare, 2) detaljförståelse för mekanismerna i programspråk och hur en kompilator kan realisera dem, 3) förmåga att konstruera översättare från en notation till en annan; för att studenterna ska kunna 1) modifiera en existerande översättare, 2) med hjälp av verktyg konstruera en kompilator från ett givet programspråk till maskinkod eller ett annat programspråk.

Examination

Kursen examineras med laborationer och muntlig tentamen. Studenterna kan själva bestämma sitt betyg genom att göra olika många laborationer; betyget fastställs sedan efter godkänd muntlig tentamen.

Nyckeltal

Totalt har tjugofem studenter klarat kursen; tio med betyg 3, två med betyg 4 och tretton med betyg 5. Eftersom kursen är en läskurs är det svårt att uppskatta hur många som har gått den. Jag vet att några studenter inte hann klart med laborationerna i tid.

Eftersom studenterna tenterar när de har gjort sina laborationer blir de godkända på båda kursmomenten samtidigt. Därför är examinations- och prestationsgraden per definition 100%. Som andel av antalet registrerade studenter är examinations- och prestationsgraden ungefär 70%.

Utvärdering och kommande förändringar

I samband med den muntliga redovisningen intervjuade jag studenterna. Det kom då fram att de flesta tyckte att kursen var trevlig och givande. Det fungerade för de flesta relativt bra att arbeta i självstudieform.

Via mail frågade jag de studenter som klarat kursen hur mycket tid de lagt ner på den. Jag fick svar från 15 personer och svaren varierade kraftigt – från 30 timmar (sic!) till 140 timmar med en tyngdpunkt på (70±10) timmar. Helt klart är att det är viktigt att ha god programmeringsvana i denna kurs. Studenterna förväntas också själva utföra vissa designmoment i projektet; är man inte van vid sådant arbete kan det naturligtvis ta extra tid.

Den främsta kritiken gällde boken, som av i princip alla ansågs oprecis och vag i varierande utsträckning. Författaren diskuterar ett mer generellt problem i boken än vad som omfattas av projektet och är inte alltid så tydlig med vilka tekniker man behöver använda för att genomföra projektet. Speciellt kapitel 6 ligger på en ganska abstrakt nivå och är svårt att ta till sig om man inte har rätt förkunskaper.

Några tyckte också att det kunde vara lite jobbigt att arbeta helt självständigt eftersom det var lätt att haka upp sig länge på vissa saker. I år har fler studenter än vanligt kontaktat mig med frågor under kursens gång; det kom dock fram under muntan att några som hade mått bra av att kontakta mig inte hade tänkt på att göra det.

Några studenter tyckte att det kunde vara bra med ytterligare någon föreläsning mitt på terminen som klargör oklara avsnitt i boken. En sådan föreläsning kan också användas som kontrollstation för att få studenterna att komma igång med projektet. Jag har beställt tid för en sådan föreläsning till nästa kursomgång från schemaläggningen.

Den nya upplagan av kursboken, som användes för första gången i år, innehåller ett nytt projekt: En kompilator för MiniJava, en liten delmängd av Java. Det nya projektet är betydligt mer väldesignat än det första men verkar ha några mindre brister som gör att ett MiniJava-program inte behöver vara ett korrekt Java-program: 1) MiniJava tillåter nästlade kommentarer, Java gör inte det. 2) Boken innehåller en svepande formulering om att betydelsen hos ett MiniJava-program definieras av programmets betydelse som ett Java-program. Java-specifikationen (kapitel 16) kräver dock att lokala variabler »definitivt ska vara initerade» innan de används. Eftersom denna problematik inte behandlas i boken är det förmodligen inte författarens avsikt att en sådan kontroll ska implementeras i den semantiska analysen.

Som en följd av att 2D1373 har något ändrat innehåll i år kommer nästa kursomgång att omfatta andra avsnitt i boken. Rent konkret innebär det att de flesta studenter kommer att producera en någorlunda färdig kompilator inom kursens ram.

^ Upp till kurssidan.


Sidansvarig: <enge@nada.kth.se>
Senast ändrad 2004-06-23.
Tekniskt stöd: <webmaster@nada.kth.se>