KTH

Skolan för datavetenskap och kommunikation

2D1373 Artificiella språk och syntaxanalys

Kursanalys

Period 3, 2003/04

Författare: Mikael Goldmann, NADA

Kursdata

Kurs 2D1373, Artificiella språk och syntaxanalys 6p
Examination Tenta (2p), Labb (2p)
Genomförd Period 3, 2003/04
Föreläsningar 24 timmar (12 st)
Labbar 18 timmar (9 st)
KurslitteraturEn exempelsamling samt någon av
  1. Parsons: Introduction to compiler construction
  2. Appel: Modern compiler implementation (2a upplagan)
  3. Aho et al: Compilers -- principles, techniques and tools
Antal studenter 55 (*)
Ansvarig/
föreläsare
Mikael Goldmann
Gästföreläsare/
labbassistent
Lars Engebretsen
(*) 48 FFG-registrerade på KTH, 4 omregistrerade på KTH, 3 från SU har registrerat sig i res.

Sammanfattning

I år har ett flertal saker provats:

  1. ny kursbok (Appel) som alternativ till den gamla (Parsons),
  2. ett nytt möjligt projekt, hämtat från nya kursboken,
  3. nya verktyg för lexikal och syntaktisk analys som alternativ till de tidigare.
Meningen har varit att prova om kursen kan göras om så att den tydligare anknyter till 2D1375 genom att använda samma kursbok och de labbuppgifter som finns i den. Parallellt har många använt den tidigare kursboken och gjort samma labbar som förekommit tidigare år. Slutsatsen är att det nya upplägget fungerar men att det inte är bra att ha flera alternativa kursböcker och uppgifter, och därför kommer vi nästa år att övergå helt till det nya upplägget.

Dessutom har studenterna i år haft två nya verktyg att välja på förutom de som använts på kursen tidigare. Eftersom det inte är rimligt att föreläsa om samtliga verktyg (de är ganska lika) har föreläsningarna bara i liten utsträckning handlat om hur verktygen används på konkreta exempel. Förhoppningen var att deltagarna själva skulle kunna sätta sig in i det genom att studera doumentationen. Även om många klarat detta är det flera som varit missnöjda med det och det är också svårt för dem att välja verktyg på ett rationellt sätt eftersom de inte har kunskaperna som krävs i kursens början. Till nästa år bör man stryka ett av verktygen helt och koncentrera sig på ett par av alternativen för Java-användare. Bison och flex kommer fortfarande att vara tillgängliga för den som föredrar C, men föreläsningarna kommer inte att behandla flex och bison.

Studenter

Studenterna går i huvudsak tredje eller fjärde året av sin utbildning, huvudsakligen på D-linjen (men F, MD (SU), Media, V och E finns också representerade).

Nyckeltal

45 av de 55 har klarat tentan (8 har inte skrivet vid vare sig ordinarie tillfälle eller på omtentan). 30 har klarat labben. 28 är helt klara med kursen.

Prestationsgrad och Examinationsgrad (2004-05-24) är 68% respektive 51%. Förmodligen beror detta till en del på att många tidigt valt att inte fullfölja kursen. Det är dock 80% av de som checkat in i res som klarat tentan (av återstående 20% är det endast 2 personer som gått upp men inte klarat tentan under något av de två tillfällen som funnits). Problemet är att inte fler redovisat labbuppgiften.

Mål

Kursens mål är att ge
  • ge de teoretiska grunderna för definition och analys av programspråk och andra artificiella språk
  • ge förmåga att utveckla lämpliga notationer för beskrivning av olika typer av problem
  • ge förmåga att konstruera översättare från en notation till en annan
för att studenterna
  • ska känna till kraftfullheten och begränsningarna hos automater och formella språk
  • i praktiska situationer ska kunna specificera lämpliga inmatningsnotationer för datorprogram och konstruera analysatorer för dem.

Nytt för i år

Kursen har anpassats till 2D1375 Programspråksimplementation. I samband med detta har det varit möjligt att använda flera olika kursböcker (se kurslitteratur ovan).

Undervisning

Undervisningen bygger på traditionella föreläsningar och frivilliga labborationer med handledarstöd. Enkätsvaren tyder på att detta fungerar bra. Eventuellt skull det vara bra med något eller några tillfällen då man ägnade tiden åt att tillämpa teorierna för att lösa problem, det vill säga det som på KTH normalt kallas övning.

På många av labbtillfällena har det varit ganska glest. Det ger i och för sig möjlighet att ge god hjälp åt de som är intresserade, men det är synd att inte fler utnyttjar möjligheten att få handledning.

Examination

Kursen har två delmoment: en tenta och en större labbuppgift.

Kurslitteratur

I år har vi provat med två olika kursböcker parallellt. Meningen är att de som tänker läsa 2D1375 ska kunna använda sig av den boken även i den här kursen. Vissa problem uppstår eftersom notation och definitioner av vissa begrepp inte är exakt lika i de båda böckerna.

Det finns också en Exempelsamling som innehåller problem med lösningar, men också ett kapitel med teori för formella språk. Somliga studenter upptäcker inte teorikapitlet vilket leder till missnöje med kursboken ("den täcker inte hela kursen").

Studenternas arbetsbelastning

Inget tyder på att kursen skulle vara för omfattande eller för arbetskrävande.

Förkunskaper

De formella förkunskapskraven verkar tillräckliga. Det skadar naturligtvis inte att även ha gått en kurs i stil med Algortimer, datastrukturer och komplexitet för att få en viss vana vid formella resonemang, men det går mycket bra att följa denna kurs ändå.

Verkligt kursinnehåll

Kursen har delvis följt den föreläsningsplanering som fanns på kurshemsidan.

Enkät

Här följer resultatet av enkäten. Fritextsvaren har sammanfattats av Mikael Goldmann (utom för de två sista frågorna).
  1. Upplever du kursen som lätt eller svår?

    1. 0% (0 st) Mycket lätt.
    2. 13% (3 st) Lätt.
    3. 61% (14 st) Medel.
    4. 26% (6 st) Ganska svår.
    5. 0% (0 st) Mycket svår.


  2. Fick du i början av kursen klart för dig vad kursens mål var?

    1. 78% (18 st) Ja.
    2. 17% (4 st) Tveksam.
    3. 4% (1 st) Nej.


  3. Tycker du att kursen är intressant och meningsfull?

    1. 30% (7 st) Ja, mycket.
    2. 52% (12 st) Ja.
    3. 13% (3 st) Neutral.
    4. 4% (1 st) Inte särskilt.
    5. 0% (0 st) Nej.


  4. Vilken bok har du haft som kursbok?

    1. 65% (15 st) Parsons.
    2. 35% (8 st) Appel.
    3. 0% (0 st) Aho, Sethi, Ullman.
    4. 0% (0 st) Annan bok.
    5. 0% (0 st) Ingen bok.

  5. Vad tycker du om den bok du använt?

    1. 17% (4 st) Mycket bra.
    2. 61% (14 st) Bra.
    3. 17% (4 st) Hyfsad.
    4. 4% (1 st) Mindre bra.
    5. 0% (0 st) Dålig.
    6. 0% (0 st) Har inte använt den.

    Ev. kommentar om boken:

    Parsons bok: I huvudsak bra. Något ytlig. En del tryckfel. Täcker inte hela kursen, framför allt inte all teori. Appels bok: I huvudsak bra. För lite teori. Täcker inte hela kursen. Mikaels kommentar: Eftersom kursen både behandlar teori för formella språk och tillämpningen syntaxanalys som är mer praktisk så är det inte helt lätt att hitta en bok som täcker allt som behandlas. Meningen är att det teoretiska avsnittet i exempelsamlingen ska täcka det som saknas i kursboken.


  6. Vad tycker du om exempelsamlingen?

    1. 17% (4 st) Mycket bra.
    2. 48% (11 st) Bra.
    3. 13% (3 st) Hyfsad.
    4. 4% (1 st) Mindre bra.
    5. 0% (0 st) Dålig.
    6. 17% (4 st) Har inte använt den.

    Ev. kommentar om exempelsamlingen:

    Bra. Utöka teoridelen med vissa begrepp. Övningarna på vissa avsnitt uppfattas av en del som väl svåra.


  7. Vad tycker du om kursmaterial på kurshemsidorna (manualer för scanner- och parsergeneratorer)?

    1. 4% (1 st) Mycket bra.
    2. 30% (7 st) Bra.
    3. 26% (6 st) Hyfsat.
    4. 9% (2 st) Mindre bra.
    5. 4% (1 st) Dåligt.
    6. 26% (6 st) Har inte använt det.

    Ev. kommentar:

    Önskemål om föreläsningsanteckningar.


  8. Hur stor del av föreläsningarna har du varit på?

    1. 17% (4 st) Mindre än 20%.
    2. 4% (1 st) 20-40%.
    3. 9% (2 st) 40-60%.
    4. 13% (3 st) 60-80%.
    5. 57% (13 st) Mer än 80%.


  9. Vad tycker du om föreläsningarna pedagogiskt sett? (Förklaras stoffet bra? Talar och skriver läraren tydligt?)

    1. 52% (12 st) Mycket bra.
    2. 30% (7 st) Bra.
    3. 13% (3 st) Acceptabelt.
    4. 0% (0 st) Mindre bra.
    5. 0% (0 st) Dåligt.
    6. 4% (1 st) Har inte deltagit.

    Ev. kommentar till föreläsningarna:

    Önskemål om föreläsningsanteckningar. Föreläsningarna i slutet lite ostrukturerade.


  10. Förbereder du dig till föreläsningarna (läser igenom relevanta avsnitt i boken/kompendiet etc)?

    1. 4% (1 st) Ja, alltid.
    2. 9% (2 st) Ofta.
    3. 26% (6 st) Ibland.
    4. 22% (5 st) Sällan.
    5. 39% (9 st) Aldrig.


  11. Vad tycker du om projektuppgiften?

    1. 22% (5 st) Mycket bra.
    2. 65% (15 st) Bra.
    3. 9% (2 st) Hyffsad.
    4. 0% (0 st) Mindre bra.
    5. 0% (0 st) Dålig.
    6. 4% (1 st) Har inte gjort den.

    Synpunkter på uppgiften, vilken gjorde du och vilka verktyg använde du?:

    De flesta som besvarat enkäten har antingen gjort Minijava-uppgiften eller en abstrakt datatyp för NFA/DFA. Någon som gjort en annan uppgift med en stor färdig bison-grammatik fann det mindre givande än det skulle varit att själv arbeta fram en mindre grammatik.


  12. Vad tycker du om årets bonussystem, att projektuppgift som redovisas i tid höjer kursbetyget ett steg?

    1. 30% (7 st) Mycket bra.
    2. 57% (13 st) Bra.
    3. 9% (2 st) Hyffsat.
    4. 0% (0 st) Mindre bra.
    5. 0% (0 st) Dåligt.

    Synpunkter på bonussystemet:

    En person tycker att bonusen borde kunna hjälpa en att få 3:a på tentan (i dagsläget höjer bonusen betyget för en godkänd tenta ett steg).


  13. Vilka applex gjorde du?

    1. 87% (20 st) Applex 1 (Simulering av NFA)
    2. 83% (19 st) Applex 2 (Lexikal analys med (J)Flex)
    3. 74% (17 st) Applex 3 (En enkel miniräknare)
    4. 61% (14 st) Applex 4 (Konvertering av reguljärt uttryck till NFA)

    Synpunkter på applexen (Vilka är bra? Vad kan förbättras?):

    Uppgifterna är bra. Viss praktisk information saknas dock (hur man kör verktygen).


  14. Hur tycker du att tentan speglade den teoretiska delen av kursinnehållet?

    1. 17% (4 st) Mycket bra.
    2. 48% (11 st) Bra.
    3. 22% (5 st) Hyfsat.
    4. 0% (0 st) Mindre bra.
    5. 0% (0 st) Dåligt.
    6. 13% (3 st) Tentade inte.


  15. Hur svår är tentan?

    1. 4% (1 st) För svår.
    2. 78% (18 st) Lagom.
    3. 4% (1 st) För lätt.

    Ev kommentar om tentan:

    Spridda kommentarer om vissa problem och tentans svårighetsgrad.


  16. Hur många andra kurser har du läst i period 3 (förutom syntaxen)?

    1. 0% (0 st) Ingen.
    2. 13% (3 st) En.
    3. 70% (16 st) Två.
    4. 13% (3 st) Tre.
    5. 4% (1 st) Fyra eller fler.


  17. Hur stor del av din totala studietid under period 3 har du ägnat åt den här kursen?

    1. 4% (1 st) Mindre än 15%.
    2. 65% (15 st) 15-30%.
    3. 26% (6 st) 30-50%.
    4. 4% (1 st) 50-70%.
    5. 0% (0 st) Mer än 70%.


  18. Kursen är på 4p (2p för tentan och 2p för laborationskursen). Vad tycker du om det jämfört med andra kursers poängantal?

    1. 9% (2 st) 4p är för lite.
    2. 83% (19 st) Lagom med 4p.
    3. 9% (2 st) 4p är för mycket.


  19. Vad tycker du saknas i kursen?:

    Om man jämför med t.ex. kryptografins grunder så känns dessa 4p mindre jobbiga. Man kanske kan lägga till fler av stegen av kompilering eller ställa högre krav på projektarbeten samt låta applexen utgöra grunderna till projektet så att man hinner med mer.
    ---
    Lite mer abstrakt teori. Mer övningar på teorin, t.ex. pumpningslemmat.Mer genomgång av något av verktygen.


  20. Vad känns överflödigt i kursen?:

    För mycket tid ägnades åt manuell konstruktion av parser-tabeller.


  21. Vad var bra med kursen?:

    Bra med projekt så man får tillämpa kunskaperna på ett roligt och realistiskt sätt.
    ---
    Det mesta.
    ---
    Den motsvarade förväntningarna.
    ---
    Projektuppgiften (MiniJava) som ger en bra bild av hur en kompilator fungerar


  22. Vad var mindre bra eller dåligt med kursen?:

    Det kändes som om projektuppgiften inte krävde lika mycket jobb som tentan, en poängfördelning på 1/3 hade kanske passat bättre.
    ---
    Om man kunde begränsa sig till att använda några få verktyg i kursen skulle det räcka med en kursbok och kraftigt minska förvirringen i början på kursen. En kortare genomgång av dessa verktyg på en föreläsning skulle nog också vara bra.
    ---
    SCHEMALÄGGNINGEN: Min andra kurs hade identiskt schema (även tentan var på samma dag)
    alltså kunde jag inte gå på någon föreläsning.

    ---
    Bra balans mellan teori och projektuppgift
    ---
    Saknar några övningstillfällen.


Slutsatser och kommande förändringar

Det verkar som om många deltagare skulle föredra att kursen anpassades till en bestämd kursbok och ett eller ett par verktyg. Förhoppningsvis kan det leda till ökad examination av labbarna att tillmötesgå detta. Därför planeras att

  • övergå helt till Appels bok,
  • använda uppgifterna i Appels bok som labbuppgifter,
  • bygga ut teoriavsnittet i exempelsamlingen (anpassning till Appel),
  • koncentration på en eller två uppsättningar verktyg (antagligen jflex, java_cup och javacc),
  • det ska finnas möjlighet att föreslå en egen projektuppgift att göra istället för den i Appels bok.
Förhoppningsvis kommer detta också att leda till att föreläsningarna i slutet av kursen kan bli mer fokuserade eftersom de kan anknyta till den specifika labbuppgiften som finns i Appels bok.

För den som inte tänker läsa 2D1375 kan Appels bok kännas som ett onödigt dyrt alternativ. Jag ska undersöka om det finns en alternativ bok som är billigare för dessa personer.

Det finns fortfarande anledning att gå igenom hur parsertabeller konstrueras. Annars blir det svårt att förstå sig på verktygen, speciellt när man får varningar och felutskrifter.




Sidansvarig: Mikael Goldmann <migo@nada.kth.se>
Uppdaterad: 2004-12-09