Laboration 9: Formelkoll
- Inlämningsdatum Inget inlämningsdatum
- Poäng 1
- Lämnar in en filuppladdning
- Filtyper py
Mål | Läs |
Föreläsning 12: Syntax, rekursiv medåkning, testning |
I denna labb ska du
- Skriva ett program som läser in molekylformler och kontrollerar om dom är syntaktiskt korrekta, med hjälp av rekursiv medåkning.
Förberedelser
- Läs instruktionerna i Kattis för problemet formelkoll.
- Skriv ett testprogram med unittest för den första omgången med testdata (Sample Input 1/Sample Output 1).
- Skriv ett testprogram för den andra omgången med testdata (Sample Input 2/Sample Output 2).
Formelkoll
Ditt program ska läsa formeln tecken för tecken och med rekursiv medåkning kolla syntaxen. Rekursiv medåkning innebär att huvudprogrammet först gör anropet readformel(), varefter readformel() anropar readmol() som anropar readgroup() och sedan eventuellt sej själv (men inte om inmatningen är slut eller om den just kommit tillbaka från ett parentesuttryck).
Funktionen readgroup() anropar antingen readatom() eller läser en parentes och anropar readmol() etc - allt enligt grammatiken. När ett syntaxbrott upptäcks genereras en exception (raise Syntaxfel("Saknad högerparentes")) som fångas i huvudprogrammet och där skrivs hela resten av indataraden ut.
Man måste ofta tjuvtitta på nästa tecken i kön (med peek()) för att veta vilken gren man ska följa i syntaxträdet.
Testning
Kattis kommer troligen att klaga på ditt program. Använd de två unittesterna du skrev i förberedelserna ovan för att kontrollera om programmet fungerar för de två givna omgångarna testdata.
Om du öppnar ett Terminalfönster kan du köra testerna på kommandoraden. Skriv:
python3 DITT_PROGRAM.py < SampleInput1.txt
(Byt ut DITT_PROGRAM.py mot vad ditt program heter.) Jämför utskriften med SampleOutput1.txt
Förutom de två givna omgångarna med testdata kör Kattis många andra tester. Du måste själv hitta på egna tester, och testa med dom för att ditt program ska bli tillräckligt bra för att godkännas av Kattis. Lägg till dina nya tester i unittest-programmet.
Betyg
Denna labb kan endast ge betyg E. Du måste lämna in den och redovisa den i tid för att få göra labbarna för högre betyg.
Redovisning
Labben lämnas in indivuellt med "Lämna in uppgift"-knappen högst upp på sidan, och ska redovisas muntligt av bägge gruppmedlemmarna. Skriv gruppmedlemmarnas namn i kommentarsfältet!
Vid redovisningen ska du kunna
- Visa godkänd kattisinskickning
- Beskriva hur rekursiv medåkning fungerar
- Visa hur dina funktioner speglar den givna syntaxen
- Förklara varför man inte måste räkna antalet parenteser
- Visa ditt unittest-program