Göm menyn

Minispråk

Denna uppgift går ut på att skriva en interpretator eller en kompilator för ett litet enkelt språk. Språket kan vara ett enklet programspråk av typen BASIC, ett litet kalkylspråk eller något annat intressant språk. Givetvis kan man även hitta på ett eget språk. Projektet kan vara en fortsättning på laboration 5, där ni implementerade en interpretator och kompilator för KALKYL.

Målsättningen är att man ska kunna mata in ett program och sedan få det exekverat. Man kan eventuellt även lägga in rutiner som rättar enstaka fel i ett program. Det finns flera möjliga alternativ inom projektet.

Alternativ 1: BASIC-liknande språk

Väljer du ett enkelt Basic-liknande språk bör följande funktioner bör finnas tillgängliga:

  1. Radering av ett gammal program.
  2. Inskrivning av ett program. Intepretatorn ska kontrollera att inmatningen är korrekt (att den stämmer överens med programspråkets syntax).
  3. Exekvering av ett program.
  4. Ändringar i ett existerande program. Man ska kunna lägga till och ta bort programrader samt ersätta en rad med en annan.
  5. Listning av ett program.

Programspråket bör innehålla följande:

  1. Tilldelningssats
  2. Val (t.ex. if, then och else)
  3. Repetition (t.ex. for eller while)
  4. Enkel I/O-hantering
  5. Enkel underprogramstruktur (t.ex. gosub eller underprogram med parametrar)

Uppgiften kan lösas på olika sätt. Man kan tänka sig en ren interpretator eller ett system av kompilerande typ som genererar Lisp-kod. Varje programkonstruktion översätts då till ett ekvivalent Lisp-uttryck. Uttrycket evalueras sedan när programmet körs.

Exempel: BASIC-satsen LET A=3+X skulle kunna översättas till Lisp-uttrycket (SETQ A (+ X 3)).

Alternativ 2: Språk med annan exekveringsmodell (t.ex. logikprogrammmering)

Här koncentrerar vi oss på en annan beräkningsmodell för exekveringen. I logikprogrammering utför vi slutsatsdragning genom trädsökning. För uppgiften krävs en mindre inläsning av t.ex. Prolog. Det andra förslaget är ett kalkylprogram, som t.ex. Microsoft Excel, där beräkningarna drivs av ändringar. Ett nytt värde till en ruta (eller variabel) ger upphov till nya beräkningar, som i sin tur kan ge upphov till ytterligare nya.

Alternativ 3: Parsning

I detta alternativ koncentrerar vi oss på att definiera en konkret syntax och skriva en parser till t.ex. KALKYL-språket från laboration 4. I den konkreta syntaxen har vi infix-notation som i alternativ 1 ovan.

Alternativ 4: Kompilering

Här kan vi koncentrera oss på att generera kod till ett annat språk (t.ex. Ada) eller till en påhittad maskinarkitektur med maskinnära instruktioner.


Sidansvarig: Peter Dalenius
Senast uppdaterad: 2005-03-04