bild
Skolan för
elektroteknik
och datavetenskap

Laboration 6 - Formelkoll

Detta program ska läsa in molekylformler och kolla att dom är syntaktiskt korrekta. Lydelsen för labben finns i Kattis! Gör så här:
  1. Följ länken: Kattis
  2. Logga in (längst upp till höger) med ditt KTH-id
  3. Välj "Kurser" i övre blå menyn
  4. Välj "tildav13" (långt ner i listan)
  5. Klicka på "Jag är student på den här kursen och vill registrera mig på Kattis."
  6. Välj "Problemlista".
    Här finns två testproblem (hello och different) och labb 6 (formelkoll)
  7. Välj "Skicka in" för att komma till inskickningssidan.
  8. Fyll i fälten "Problem ID" (hello/different/formelkoll) och "Språk" (Python 2/Python 3)
  9. Välj en fil (ditt python-program)
  10. Om du har flera programfiler måste du ange vilken som innehåller main (bortse från att det står "Java only" - detta gäller även Python!)
  11. Tryck på knappen "Skicka in"
  12. Uppdatera webbsidan för att få se Domarstatus.
Öva först med testproblemen innan du skickar in din lösning till labb 6.

Indata

Programmen du skickar till Kattis ska läsa indata från stdin. Det fungerar som att läsa från fil! Exempel:
from sys import stdin

inrad = stdin.readline()
while inrad:
    lista = inrad.split()
    tal1 = int(lista[0])
    tal2 = int(lista[1])
    ...
    inrad = stdin.readline()

Utdata

Utdata kan du skriva ut med print som vanligt.
Skriv först en spec
I specen ska du skriva upp namnen på alla funktioner du ska skriva och vad varje funktion ska göra. Exempel (som inte ska finnas med i just denna labb):
readPlus()
""" Denna funktion ska plocka tecknet '+' från kön. Om nästa tecken inte är '+' ska ett syntaxfel ('Saknat plustecken') genereras """

Tips

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 för att veta vilken gren man ska följa i syntaxträdet. Inför metoden peek() i din köklass, så kan du titta på nästa tecken utan att plocka ut det ur kön.

Den här labben ska redovisas tillsammans med labb 7.






En jätteprestation av................................. enligt............................ den ...............
Sidansvarig: Linda Kan <lk@csc.kth.se>
Uppdaterad 2013-02-22