Göm menyn

TDP019 Projekt: Datorspråk

Projekt


Projekt: Implementation av ett datorspråk

Den huvudsakliga uppgiften är att skapa ett språk, t ex ett mer vanligt programspråk, ett mer specialiserat språk för någon tillämpning eller ett språk för beskriva format på data.

Ni skall själva bestämma hur språket skall se ut, dess syntax, och göra en detaljerad beskrivning med en grammatik samt en beskrivning vad de olika konstruktionerna skall göra. Sedan skall ni ta fram ett verktyg för språket, tex en interpretator, som direkt kan exekvera program från språket, eller en kompilator eller översättare som tar ett program i ert språk och översätter detta till ett program i något annat språk, där det sedan kan exekveras. Detta verktyg skall implementeras i Ruby. Sedan skall vi utvärdera både det språk som ni skapade och hur ni implementerat detta i ert verktyg.

Det är ganska fritt att skapa detta språk, vi kommer att ge förslag på några olika språk.

Kunskapen om språk har ni ju via egen erfarenhet; ett par språk har ni lärt er här under utbildningen, några språk kunde ni kanske redan innan ni kom hit, och ni lär er även nya språk parallellt med detta projekt, i första hand Ruby.

I TDP007 Konstruktion av datorspråk får ni en hel del teori för datorspråk. Detta kommer vi i TDP019 komplettera med några föreläsningar och övningar på mer specifika områden som ni kommer att behöva, delvis beroende på era val av språk.

Betygskriterier

Kursen ger på projektarbetet ett graderat betyg, som vanligtvis blir samma som slutbetyget på hela kursen.

Betyget baseras på följande:

  • Val av datorspråk. Ett mer "innovativt" språk kan premieras, som kan innehålla mer speciella eller "svårimplementerade" konstruktioner. Generalitet i språket och tydligt realisering av hur olika konstruktioner skall fungera, t ex statisk bindning av variabler, rekursiva funktioner etc.
  • Grammatiken. Hur välspecificerad är den i t ex BNF-notation. Hur väl överenstämmer den med det implementerade språket.
  • Sättet att implementera språket. Val av verktyg, där mer egen kod kan premieras, t ex att skriva en egen lexer/parser i stället för att använda ett verktyg.
  • Implementeringen i form av kod. Själva programkoden, systematik och kodstandard, layout, abstraktion och val av namn på identifierare för läsbarhet, uppdelning i moduler, funktioner/metoder. Ändringsbarhet och testbarhet. Hur väl ni använt Ruby.
  • Det implementerade språket. Vad blev implementerat, hur bra klarar man av de olika konstruktionerna, gör lexern/parsern det den borde göra, fungerar nästling av konstruktioner (en repetition i en annan repetition). Hur vältestat är språket. Själv förstå vad som fungerer och inte fungerar.
  • Dokumentationen. Både innehåll och layout. Kommunikationsläraren kommer att ge en informell betygsättning på dokumentet, som kan påverka slutbetyget (ett betygsteg upp eller ned). Mycket bra dokumentation kan höja slutbetyget från betyget på projektet, eller vice versa.
  • Granskning och opposition av andra projekt.
  • Individuell språkdagbok och kunna diskutera konstruktioner i programmeringsspråk i allmänhet. Ha egna synpunkter och kunna väga för- och nackdelar med olika språk (som ni hittills har lärt er) och konstruktioner i dessa.
  • Hela projektet. Hur det genomförts, ambitionsnivån, slutprodukten, packeteringen och dokumentationen.
Till sist blir det en sammanvägning av alla dessa kriterier och bedömning av examinatorn. Det kan förekomma att examinatorn ger förslag på förbättringsarbeten, som kan ge betygshöjning.
Viktigast för betyget är språkets omfattning, definition och implementation. - de 5 första punkterna i listan. Eftersom typerna av språk som implementeras kan variera väldigt är det svårt att ge generella betygsgränser.

Exempel på betygsgränser vid imperativ klon

Det brukar vara ganska vanligt med någon sorts imperativt grundspråk med inspiration från t.ex. C++, Python o/el Ruby - ev. med viss objektorientering tillagt - följer här en lista av vad som bör vara uppfyllt för att en viss betygsnivå ska kunna uppnås om samtidigt implementationen är bra gjord - med ökande krav för högre betyg:
3: Aritmetik med rätta prioriteter och associativiteter, kontrollstrukturer (åtm både någon sorts iteration och val), funktioner/procedurer med parametrar och scopehantering,
4: Dessutom rekursion och någon sorts sammansatt datastruktur (t.ex. arrayer) med tillhörande operationer
5: Dessutom någon "avancerad" feature i språket eller implementationen, t.ex. typhärledning, objektorientering med arv, egen parser, olika parameteröverföringsmetoder
För språk av andra typer görs individuella bedömningar av konstruktioner som bedöms vara av motsvarande komplexitet och omfattning.
Det kan bli en kompromiss mellan betygsnivåer. Om t,ex, typhärledning är implementerat bra, men rekursion inte riktigt fungerar kan betyget bli 4.

Utläggning av projektet på kursens hemsida

Vi önskar att ni ger tillåtelse att vi lägger ut ert projekt på kursen hemsida. För detta vill vi ha en pdf-version (eller motsvarande) för dokumentationen och tillgång till er kod, packeterad på något sätt och kanske en länk till ett kodbibliotek, samt instruktioner hur man kan köra språket.

Detta vill vi ha när kompletteringarna på dokumentation och kod har utförts, så det är den slutgiltiga produkten som läggs ut.

Sidansvarig: Pontus Haglund
Senast uppdaterad: 2024-02-01