Till KTH:s startsida Till KTH:s startsida

Laboration 9

water



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

  1. Läs instruktionerna i Kattis för problemet formelkoll.
  2. Skriv ett testprogram med unittest för den första omgången med testdata (Sample Input 1/Sample Output 1).
  3. 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.

Du kan köra de första två kattisterna själv genom att ladda ner datafilerna och på kommandoraden skriva:

 more correct_sample.in | python DITT_PROGRAM.py   

Byt ut DITT_PROGRAM.py mot vad ditt program heter. Jämför utskriften med correct_sample.ans


Redovisning

Labben lämnas in på git och redovisas muntligt av bägge gruppmedlemmarna.

Vid redovisningen ska du kunna

  • 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 godkänd kattisinskickning

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 i period 2.