Göm menyn

TDP019 Projekt: Datorspråk

Exempelprojekt


Exempel på datorspråk för projektet

Här ges exempel på några olika typer av språk, som skulle kunna ge idéer till ett projekt. Språken kan vara mer eller mindre baserade på de ni redan tidigare kan, t ex Python eller C/C++. Ni skall själva forma ett språk och om ni går utanför de mer vanliga språken så hjälper vi till med att se om det är möjligt att skapa något nytt och intressant.

Imperativt programspråk

Här implementerar vi det som i stort finns i alla vanliga språk, den imperativa grunden. Vi skall klara de 3 grundstrukturerna
  • sekvens av ett antal satser, ett block av satser
  • val mellan satser (if mm)
  • repetition av ett antal satser, finns många alternativ (for, while, repeat mm)
  • samt ha någon form av underprogram (t ex funktion, procedur, metod mm)
och kunna hantera dataobjekt av någon/några grundläggande typer (t ex tal och strängar) och någon sammansättning i form av t ex array och post.

Syntaxen kan följa olika modeller. Här är ett exempel på hur det skulle kunna se ut:

begin
  res := 0;
  write("ge inmatning: ");
  read(n);
  while (n > 0) do
     res := res + n;
     n := n - 1;
  end;
  write("summan är: ");
  write(res):
end
Sedan kan man diskutera om man skall ha deklarationer av variabler eller ej. För de valda datatyperna man skall kunna hantera behöver man en minimal uppsättning av primitiva funktioner.

Objektorienterat språk

Man kan bygga på det imperativa språket så att det följer en mer objektorienterad modell med ett klass-begrepp och metodansrop. Vill man gå långt så kanske man vill realisera typhierarkier och med detta kunna associera olika metoder för olika slags objekt i hierarkin.

Språk med annan beräkningsmodell

Detta kan vara mer deklarativa språk, tex logikprogrammering / villkorsprogrammering / regelbaserat språk, där man har andra sätt att beskriva data och programmen blir mer uttryck för att beskriva vilka resultat man vill åstadkomma. I databassammanhang har vi SQL, som bygger på relationsprogrammering. Dessutom har vi klassen med funktionella språk, t ex Haskell och pure Lisp. Där finns även den lata beräkningsmodellen.

Ett spread-sheet program av excel-typ har en beräknignsmodell som via formler propagerar ut nya värden, man ändrar i en ruta, som i sin tur triggar formler som medför beräkningar i nya rutor, som i sin tur etc.

Domänspecifikt språk

Kan vara ett språk specialiserat för en viss tillämpning. Det betyder att dataobjekten är av en viss karaktär och många konstruktioner och algoritmer är mer specifika. Språk för att skapa grafik hör till denna kategori.

Beskrivningsspråk

Detta kan vara notationer för att beskriva strukturen på data, t ex XML, html men även interna representationsspråk för ordbehandlare mm. Hur lagra all den extra informationen i själva textfilen i en ordbehandlare, markering av fonter, halvfet stil mm mm. Gör din egen ordbehandlare.

Översättare mellan datorspråk

Skriva en generell översättare av syntax mellan olika språk. Översättaren styrs av en uppsättning regeler för syntax och där varje regel anger hur denna form av uttryck skall översättas.

Exempel på regel för att ändra syntaxen på ett villkorsuttryck:

if (?a) ?b; ?c; -> if ?a then ?b else ?c;

Syntaxen måste skilja sig så pass mycket mellan språken att det inte bara är att översätta t.ex. ord för ord, utan det givna programmets struktur måste analyseras.

Tidigare implementerade språk inom denna projektkurs

För att få ideer om språk, så ges här ett urval av språk som implementerats i denna kurs.
  • Constraint-språk för mängder, som löser kniviga mängdproblem.
  • Enkelt språk för barn för att illustrera geometriskt matematiska begrepp.
  • Olika typer av nybörjarspråk.
  • Interpretator för Lisp.
  • Beskrivningsspråk för att beskriva maträtter och recept.
  • Språk för att beskriva och simulera brädspel.
  • Implementering av delmängder av C/C++.
  • Språk för att beskriva spelvärldar, äventyrsspel, med regler vad som skall hända då specifika händelser uppstår mm.
  • Implementering av assemblerspråk med emulator.
  • Specifikation av arkitektur - planritningar för lokaler.

Tidigare utförda projekt

Här finns projekt som IP-studenter har gjort under tidigare år. Använd gärna som inspiration.

För varje projekt finns dokumentationen med användarhandledning, systemdokumentation och kod, samt en länk till plats där ett kodbibliotek finns.

  • TTT {TwenTy Twelve}
    TTT är ett imperativt språk med influenser från C++ och Ruby. Språket exekveras vi en interpretator. Spåket är riktad mot nybörjare med Rubys lättare syntax med nyckelord och C++'s typning. Språket har även en datatyp all som täcker all datatyperna. Utöver de sedvanliga datatyperna har man lista och hastabell. Språket hanterar funktioner med räckvidd av variabler.

    (Dokumentation) (Kodbibliotek)

  • Dunder
    Dunder är ett imperativt språk, med interaktiv tolk. Utöver sedvanliga konstruktioner finns funktioner och lambda-uttryck.
    (dokumentation) (projektlänk)
  • C> - CSHARK
    CHARK är ett imperativ språk, likt C++ och Java. Det kompileras till Ruby. Språket innehåller styrstrukturer och funktioner, som kan kan anropas rekursivt.
    (kodbibliotek)
  • OpenJ
    OpenJ är ett imperativt språk med konstruktioner från Python och C++. Dynamisk typning, listor och array från Python, syntax och konstruktioner från C++.
    (dokumentation)
  • SYM Programming Language
    SYM är ett imperativt språk med klasser och metoder. Till viss del egen syntax med specialtecken. Både statiska och dynamiska variabler. Egen lexer och parser, samt integrering i JEdit har genomförts inom projektet.
    (dokumentation) (kodbibliotek)
  • Prometheus
    Prometheus är ett objektorienterat språk med det bästa från C, Objective-C Ruby och Python. Det är starkt typat. Det innehåller sedvanliga konstruktioner, som tilldelning, villkor och repetitioner. Det innehåller block, som anonyma funktioner. Dessa funktioner bildar ett procedurobjekt med sin statiska omgivning (closure). I och med detta kan man använda högre ordningens funktioner.

    (Dokumentation) (Kodbibliotek (github)) (Kodbibliotek (zip))

  • SWE#
    SWE# är ett språk där alla konstruktioner är på svenska- Det är tänkt som ett första programmeringsspråk för nybörjare. Det är ett interpreterat språk, där programmet ges i form ave en fil. Språket är nyckelordsstyrt, med nyckelorden och övriga benämningar på svenska. Språket innehåller sedvanliga satser (tilldelning, villkor och repetition) för ett imperativt språk samt funktioner. Räckvidden är sådan att man kommer åt lokala och globala variabler.

    (Dokumentation)
    (Kodbibliotek)

  • Swepp
    Swepp är ett imperativt nybörjarspråk med nyckelord på svenska. Språket innehåller sedvanliga styrstrukturer och funktioner mm, som tillåter rekursivitet.
    (dokumentation) (grammatik) (kodbibliotek)
  • flip/flop
    flip/flop är ett roligt/flippat språk som är bakvänt i jämförelse med vanliga språk. Kan till vissa delar jämföras med "postfix"-syntax. Även nyckelorden är bakvända, som t ex fi oxh esle. Språket är imperativt och innehåller de vanliga satserna med tilldelnin, villkor, repetition och funkton. Spårekt har en dynamisk räckvidd (Scope).

    (Dokumentation)

  • Skywalker
    Skywalker är ett språk tänkt för att beskriva hur man kan styra externa "maskiner", med motor och servon, t ex radiostyrt flygplan. Programmet innehåller olika moduler, ett interface för att beskriva vilka motorer som ingår och en rutin som anger hur dessa motorer skall styras. Det senare skrivs i Skywalker. Språket i sin tur innehåller sedvanliga imperativa konstruktioner som tilldelning, villkor och repetition. Koden i Skywalker översötts till RUby-kod. Exekveringen styrs av en tidslinje och programmet exekveras via en "runtime"-modul som baseras på korutiner, som finns i ett paket i Ruby med benämningenn Fibers. Det möjliggör nu att en rutin i Skywalker kan överlämna kontrollen till en annan rutin, och senare få tillbaka den, med bibehållen omgivning.

    (Dokumentation)

  • Caews - Contemporary and easy web script
    Språket är tänkt att enklare skriva privata hemsidor. Tanken är att i samma språk beskriva det som görs i html och css. Man inför ett koncept virtuella fönster. Språket innehåller konstruktioner, som återfinns i vanliga programmeringsspråk, som variabler och repetitioner. Det är tänkt att caews-koden kompileras till två filer, en med html-kod och en med css-kod. Användarhandledningen är konstruktivt skriven och språket blev partiellt implementerat.
    (Dokumentation)
  • WINAML - IsNot A Markup Language
    WINAML är ett språk för att enklare kunna skriva www-sidor, där språket ger möjlighet till matematiska beräkningar, styrstrukturer, återanvändning av kod och enklare beskriva tabeller. WINAML genererar HTML-kod, som sedan körs i en webbläsare.
    (dokumentation)
  • Web Presentation Generator
    Ett språk för att skapa enklare html-sidor. Språket innehåller de vanliga imperativa konstruktionerna, funktioner samt funktioner för att hämta fram data ur en enklare databas.
    (dokumentation) (kodbibliotek)
  • RIPPLE
    RIPPLE är ett språk med grundläggande satser och funktioner. Program skrivs som funktioner. Matematiska och logiska uttryck skrivs i prefixnotation. Språket använder statisk bindning/räckvidd, där funktioner exekveras i den omgivning/kontext som funktionen skapades i.
    Programmet kan köras under en tolk eller exekvera funktioner lagrade på fil. Det finns kod (Elisp) för att anpassa emacs-editorn till RIPPLE-mode.
    (Dokumentation) (Kodbibliotek)
  • {paxl}
    Ett generellt språk fört att kunna skriva program för beräkningar i en kalkylmodell, organiserat för att möjliggöra parallell exekvering. Språket är uppbyggt runt funktioner i form av block, där block hanteras, som data. När blocket definieras sparas dess omgivning (closure), som möjliggör statisk bindning. I överigt innehåller språket sedvanliga konstruktioner för uttryck och styrstrukturer.
    (Dokumentation)
  • ImgPL
    ImgPL - eller Image Processing Language - är ett interpreterat och indenteringsstyrt språk med syfte att möjliggöra bearbetning av bilder på ett smidigt sätt. Språket är objektorienterat och har en enkel och ren syntax inspirerad av Python och är därför lätt för nybörjare att lära sig. Språket kan användas dels som ett enkelt verktyg för bildredigering direkt via den interpreterande miljön, dels i form av ett större program riktat mot en slutanvändare.
    (Dokumentation) (Kodbibliotek)
  • AutoSystem
    AutoSystem är ett språk för att simulera vissa egenskaper i ett Windowssystem, t ex musrörelser, knapptryckningar mm. Man har skapat ett eget språk, inspirerat av Pyrhon och Ruby och innehåller sedvanliga konstruktioner i ett imperativt språk med möjllighet att definiera egna funktioner. Ett stort antal funktioner från AutoIT finns tillgängliga från språket, vilket möjliggör simulering i en Windowsmiljö.
    (Dokumentation) (Kodbibliotek)
  • Gandalf
    Gandalf är ett interpreterat språk med vissa syntaktiska likgeter med Python och Objective-C. För att underlätta att skriva tydlig kod är det indenteringsstyrt och krav på hur funktionsnamn med parametrar får skrivas inspirerat från Objective-C. Gandalf innehåller även klasser.
    (Dokumentation) (Kodbibliotek)
  • Xtat Language
    Xtat är ett språk för att i XML-filer ta fram data, kunna bearbeta dessa och anropa andra paket som skapar statistik med diagram och tabeller. Spåket ger en utvidning av HTML. Själva språket innehåller de imperativa konstruktionerna med möjlighet att definiera funktioner.
    (användarhandledning) (implementationshandledning) (systemdokumentation) (kodbibliotek)
  • Virtuell maskin i Ruby
    Har definierat stt språk för en virtuell stackmaskin. Maskinen beräknar språket enligt postfix. Dokumentationen innehåller en pedagogisk beskrivning av hur stackmaskinen fungerar. En delmängd av C++ kompileras till denna stackmaskin.
    (dokumentation) (kodbibliotek)

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