Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Relevanta dokument
Linköpings universitet Innovativ Programmering TDP019 Projekt: Datorspråk. flip/flop. ett helt flippat språk

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

PROMETHEUS. Ett typat, objektorienterat programmeringsspråk av Tim Andersson.

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Användarhandledning Version 1.2

Parsning. TDP007 Konstruktion av datorspråk Föreläsning 6. Peter Dalenius Institutionen för datavetenskap

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Klassdeklaration. Metoddeklaration. Parameteröverföring

Java, klasser, objekt (Skansholm: Kapitel 2)

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

TDIU01 - Programmering i C++, grundkurs

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Programmering A. Johan Eliasson

TUTORIAL: KLASSER & OBJEKT

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Tentamen Grundläggande programmering

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

DD1361 Programmeringsparadigm. Carina Edlund

Anteckningar 1: Grundläggande saker

Kompilatorer och interpretatorer

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Att skriva till och läsa från terminalfönstret

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Programmeringsteknik med C och Matlab

F4. programmeringsteknik och Matlab

Föreläsning 5-6 Innehåll

Användar- och systemdokumentation

LÖSNINGSFÖRSLAG TENTAMEN

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Programmering för språkteknologer I, VT2012. Rum

Föreläsning 3: Booleans, if, switch

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Tentamen OOP

Föreläsning 3. Programmering, C och programmeringsmiljö

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Objektorienterad Programmering (TDDC77)

Metoder (funktioner) Murach s: kap Winstrand Development

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Föreläsning 3-4 Innehåll

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Inlämningsuppgift MiniPlotter

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Föreläsning 6: Introduktion av listor

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Programmering för språkteknologer II, HT2011. Rum

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Föreläsning 6: Metoder och fält (arrays)

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Programmering B med Visual C

TDDC77 Objektorienterad Programmering

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Introduktion C-programmering

Introduktion till programmering och Python Grundkurs i programmering med Python

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

TDIU01 - Programmering i C++, grundkurs

Objektorienterad programmering D2

Metoder. Inledande programmering med C# (1DV402)

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Repetition C-programmering

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Lab5 för prgmedcl04 Grafik

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Classes och Interfaces, Objects och References, Initialization

Visual Basic, en snabbgenomgång

Labora&on 2 Funk&oner, if och loop övningar/uppgi:er

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Laboration 1 - Grunderna för OOP i Java

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Parameteröverföring. Exempel. Exempel. Metodkropp

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

Introduktion till MATLAB, med utgångspunkt från Ada

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Föreläsning 3. Programmering, C och programmeringsmiljö

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Objektorienterad Programmering (TDDC77)

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Pascal... Pascal. Pascal... Pascal...

TENTAMEN TDDB53. Programmering i Ada för MI (provkod TEN2) den 7 april 2010 kl Institutionen för datavetenskap, IDA Olle Willén mars 2010

Objektorienterad programmering i Java

OOP Objekt-orienterad programmering

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Transkript:

Žƒ ƒ Ž Ž ˆ ƒ ƒ ƒ Žƒ ƒ Ž ˆ Œ ŽŽ ƒ Backcode Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Innehållsförteckning 12-05-29 Inledning... 3 Användarhandledningen... 4 Klasser... 4 Metoder... 4 Main-klass och main-metod... 6 Objekt... 6 Deklaration av en objekt i en metod... 6 Deklaration av objekt i klass... 6 Tilldela värde av objekt... 6 Funktionsanrop hos objekt... 6 Metodanrop... 8 Uttryck... 8 If-satser... 8 While-loop... 9 For-loopen... 9 Exempel: Hello World... 10 Hello World till Ruby... 10 Exempel: Klasser... 11 Systemdokumentation... 12 BNF-Grammatik... 12 Parserregler... 13 Systemet... 13 Programkoden... 13 Syntaxträd... 18 Klasser för språket... 18 Reflektion... 25 Appendix 1: Fortsatt utveckling... 26 Appendix 2: Exempel program... 26 Klass Test... 26 While loop... 27 If sats... 27 For loop... 29 Litet Spel... 29 Appendix 3: Kod... 34

Inledning När man lär sig ett programmeringsspråk kan man tycka att det är enkelt och borde inte vara en alltför stor utmaning. Något man lärt sig snabbt genom åren som datoranvändare och programmerare är att även de lättaste sakerna kan vara väldigt svåra att förstå och genomföra. Backcode är ett programmeringsspråk utvecklat av mig, och som arbetades med under våren 2012. Språket är väldigt lätt och har inte alltför många avancerade funktionaliteter. Eftersom jag översätter min kod till Ruby, kan du använda många klasser och funktioner som det språket använder. Backcode är objektorienterat. Tanken är att nybörjare ska finna språket lätt även om installation och uppstart av det kan vara lite svårare. Det här är ett projekt på IP-programmet, i kursen TDP019 Projekt: datorspråk. 3

Användarhandledningen Vi kommer anta att du redan från början har Ruby installerat på din dator och vet hur man skriver och kompilerar Rubykod. Kodfil namngivningen ska följa standarden hos operativsystemet utan några speciall tecken och ett fil slut på.bs. Om du inte vet vart du kan få tag på Ruby kan du följa denna länk för mer infromation: ruby-lang.org Starta Ruby och ladda in filen Parser.rb. Därefter skriver du BackCode.new.RunFile filens namn för att köra kodfilen. Om du gjort allt rätt kommer den konvertera och evaluera koden utan felmeddelanden. Texter skrivna efter // är kommentarer i koden och kommer inte köras när du kör koden. En kommentar gäller endast till radslut. Nyckelord kommer vara skrivna i fet stil. Klasser Klasser har följade syntax: class name begin //Funktioner, Variabler end name; Name i början och slut måste vara densamma, annars kommer du få ett felmeddelande. Innanför begin och end skriver du funktion- och variabeldeklarationer. Notera att klassen avslutas med ; och räknas som ett nyckelord. Metoder Metoder har följande syntax: access function typ Name ([parametrar,...]) begin //Funktionsanrop, Variabel deklarationer, return och mera. end; Access kan vara public, private, protected, vilka alla tre är nyckelord. I denna version är access endast en dekoration som senare kommer bära funktionalitet. function måste skrivas med små bokstäver. Typ är den klasstyp du tänker returnera och skriv void fall inget värde ska returneras. I denna version används return som en kom ihåg-plats och har i slutändan ingen påverkan på koden. Om returtypen ej är void ska du ha return i metoden och returnera ett värde. Typ kontroll sker ej. Name är namnet på funktionen. Du kommer använda det när du vill anropa funktionen. ([parametrar,...]) är olika parametrar som du ger till funktionen. Om du inte ska ge in några argument skriver du (). Om du vill att metoden ska ta emot argument med någon data kan man skriva (Integer i) för en eller (Integer i, String j,, Integer x) för flera. Just nu är typen före namnet på variabeln bara där för kosmetiskt utseende men kommer bära funktion i framtiden. Men viktigt är att du skriver ditt typen annars kommer det inte kompilera. Mellan begin och end; så skriver du kod. Notera att metoden avslutas med ;. return variabel; 4

return metodanrop; Returns syntax. Först nyckelordet return sen variabel eller metodanrop. 5

Main-klass och main-metod Main-klassen och main-funktionen är grundkrav för att du ens ska kunna köra ett program i det här språket. Viktigt att du kommer ihåg det! Main är ett nyckelord. Syntax: class Main begin public function void Main () begin //Kod end; end Main; Objekt Skriv @ före objekt alias för att nå klassvariabler. I objekt alias får det ej förekomma siffror. Deklaration av en objekt i en metod (argument) to klass i; (argument) kan vara från () till (argument,, x) men antalet parametrar ska stämma överens med antalet i funktionen som anropas, skriven i klassen man deklarerar objekt av. Initialize ska skrivas som en helt vanlig funktion, men den körs varje gång du skapar en ny instans av en klass. Deklaration av objekt i klass access typ namn; Skillnaden mellan klass- och metoddeklaration av variabel är rätt stor. I klass tilldelar du aldrig något värde till variabeln, utan du säger bara att den finns. Om du vill använda den i någon funktion kom ihåg att skriva @ före namnet på variabeln. access kan vara public, private och protected men är nu bara kosmetiskt. typ är klassen av variabeln. namn är namnet på variabeln du skapar. Tilldela värde av objekt (x) to i; Värde x tilldelas till objekt i. I andra språk så som c++ kan det här efterliknas med i = x. Funktionsanrop hos objekt (parametrar) metod i; (parametrar) kan vara från () till (parametrar,, x) beroende på hur initialize är skriven i klassen man deklarerar objekt av. metod är namnet på metoden du vill använda och i är objektet du använder den på. 6

Metodanrop ( Hello ) out IO; //Skriver ut Hello i terminalen. (x) in IO; //Läser in ett värde från användaren till x. (5) to Integer x; // x är nu en Integer med värdet 5. (5) add x; //Lägger till fem på x. x = 10 (2) sub x; //Drar bort 2 på x. x = 8 (4) mul x; //Multiplicerar 4 på x. x = 32 (2) div x; //Dividerar x med 2. x = 16 (((5) add 4) sub 5 ) add x; // (x + (5 (4 + 5))). x = 12 () funk x; //Anropar metod funk hos x; () funk @x; //Anropar metod funk hos klassvariabel x; Några avancerade metodanrop och exempel. Uttryck 0 == x //returnerar falskt. true && true //returnerar sant. x!= 13 //returnerar sant. x <= 5 //returnerar falskt. x >= 5 //returnerar sant. x < 100 //returnerar sant. x > 100 //returnerar falskt. false && true //returnerar alltid falskt. Exempel på några relationsuttryck. Sen förut har x värdet 12. If-satser If-satser har lite mer komplex syntax än de tidigare kodstycken vi arbetat med. if ( relationsuttryck ) begin //kod end; if ska skrivas med små bokstäver och är själva starten av satsen. Mellan parenteserna skriver du ett relationsuttryck som kan vara just det eller ett metodanrop som returnerar ett sanningsvärde. Sen begin, en massa kod och till sist end med ; efter sig för att vissa att du avslutar satsen. if ( relationsuttryck ) begin //kod end else begin //kod end; If-else satsen börjar som en if-sats men om relationsuttryck returnerar falskt kommer koden efter else att köras. Notera att else har end före sig och begin efter sig. if ( relationsuttryck 1 ) begin //Block 1 7

end elsif ( relationsuttryck 2) begin //Block 2 end; Relationsuttryck 1 Relationsuttryck 2 Block som körs FALSKT SANT BLOCK 2 SANT - BLOCK 1 FALSKT FALSKT -* * Har du en else efter så kommer dens block köras. If-elsif satsen börjar som en if-sats. Men har elsif istället för att avslutas. Notera även här att elsif har end och begin efter sig och avslutas med ;. Man kan även upprepa flera elsif efter varandra. if ( relationsuttryck 1 ) begin //Block 1 end elsif ( relationsuttryck 2 ) begin //Block 2 end elsif ( relationsuttryck x ) begin //Block x end; Exempel på en lång gående else-if-sats. Mer exempel kan du hitta i del 2 av billagan. While-loop while ( relationsuttryck ) begin //kod end; While-loopen kommer köra koden mellan begin och end tills relationsuttrycket, som kan vara just det eller ett metodanrop som returnerar ett sanningsvärde, returnerar falskt. Exempel på while-loopen kan hittas i del 2 av billagan. For-loopen for(funk1; funk2; funk3) begin //kod end; For-loopen är en mer komplex form av while-loopen. funk1 körs innan loopen startas. funk2 är ett relationsuttryck och så länge det returnerar sant så fortsätter loopen köras. funk3 körs i slutet av varje loopvarv. Koden mellan begin och end körs tills funk2 returnerar falskt. Exempel på for-loopen kan hittas i del 2 av billagan. 8

Exempel: Hello World BackCode-kod class Main begin public function void Main () begin ( Hello World\n ) out IO; end; end Main; Rubykod Žƒ ƒ ˆƒ ŽŽ Ž ƒ ƒ ƒ ƒ Simpelt Hello World program. Till vänster har du kod ur detta språk och till höger har du koden konverterad till Rubykod. Hello World till Ruby Jag använder mig utav BackCode-koden ovan. Efter att jag skrivit koden och startat konverteringen. Är det första steget att blocka ut tockens. Tockensen som blir från koden är: class, Main, begin, public, function, void, Main, (, ), begin, (, Hello World\n, ), out, IO, ;, end, ;, end, Main, ; De i fet still görs om till symboler i Ruby. Tokensen parsar jag igenom med de regler jag skrivit för språket och börjar arbeta ihop ett syntaxträd från botten och upp. Första träffen jag får är på regeln för hur en klass(text i kursiv stil är fördjupad regel): Class, Main, Klass Block, Main, ;. Punkterna är tokens emellan. Main och Main. Nästa träff är regeln för klass block: begin, Klass deklarationer, end, ; Den ända klass deklarationen som hittas är en funktions definition: public, function, void Main, (,), block I block hittar vi ett metodanrop: (, Hello World\n,),out,IO, ;. Nu bygger jag ihop en träd via objekt där det finns ett klass för nästan varje regel som pekar på sina barn. Klass Klass block Klass deklarationer Funktions definition Block Metodanrop. Jag kallar på To_Ruby hos Klass objektet och då startas en rekursiv event där jag omvandlar objektens betydelse till Ruby kod i en sträng och till sists lägger jag på: main = Main.new main.main Det rekursiva börjar i det objekt som är längst ner till säga metodanropen. 9

Exempel: Klasser BackCode-kod Žƒ ƒ Ž ˆ ƒž œ š ƒ Ž ˆ ƒ ƒ ƒ ƒ ƒ ƒ Žƒ ƒ Ž ˆ ƒž œ Ž ˆ ƒ ŽŽ ƒ ƒ Ž ˆ ƒ Rubykod Žƒ ƒ ˆ ƒž œ ˆƒ ŽŽ Žˆ ƒ ƒ ˆ Žƒ ƒ ˆ ƒž œ ƒ š ˆ ƒ ƒ ƒ ƒ ƒ ƒ ƒ ƒ ƒ Notera att ordningen på klasserna blir omvänd så att main körs först. 10

Systemdokumentation I min kompilator så konverterar jag min kod till Ruby för att sedan köra den. Sluttanken är att man lätt ska kunna lägga in fler metoder så att språket kan översättas till andra språk. Just nu hanterar kompilatorn endast Backcode till Ruby med inga former av fel kontroller. När jag konverterar mitt språk till Ruby så börjar längst ner och plockar sedan ihop alltihop till en sträng som jag sedan evaluerar med Ruby. Men mer om det längre ner. BNF-Grammatik Nyckelord kommer vara skriva i halv fet stil. ƒ Žƒ ˆ ƒ Žƒ ˆ Žƒ ˆ Žƒ ˆ Žƒ Ž ˆ Žƒ Ž Žƒ Ž ƒ Žƒ Ž ƒ ˆ ˆ Žƒ Ž ƒ ƒ ˆ Žƒ Ž ƒ ƒ ˆ ˆ ˆ ˆ ˆ ƒ ˆ ˆ ƒ ƒ Ž ƒ ˆ ˆ Ž ƒ ƒ ˆ ƒ ƒ ˆ ƒ ƒ ˆ ˆ ƒ ƒ ˆ ƒ Ž ƒ Ž ƒ ƒ ƒ ƒžž ƒ ƒžž ƒ ƒžž ƒ ˆ ƒ Š Ž ˆ ˆ ƒžž ˆ ƒ ˆ ˆ ƒžž Ž Ž ˆ ƒ ˆ ˆ ƒžž Ž Ž ˆ ƒ Ž Ž Ž ˆ ˆ ƒžž Ž Ž ˆ ƒ Ž ˆ ˆ ƒžž Ž Š Ž Š Ž ˆ ƒžž Ž ˆ ˆ ˆ ƒžž ˆ ƒžž ˆ ƒžž Ž ˆ ƒžž ˆƒ ˆ ˆ ƒžž ˆ ˆƒ ˆ ˆ ˆƒ ˆ ˆƒ ˆƒ ˆƒ ˆƒ ˆƒ ˆƒ ˆƒ ˆ ˆ ƒ ˆˆ ƒ ƒ ƒ Ž Œ ŽŽ ƒ ƒ ˆ ƒ Žƒ ß Œƒ Š Ž ƒ ŽŽ ŽŽƒ ŽŽŠß ƒž 11

Parserregler Systemet Jag börjar med att ta ut tokens ur källkoden där jag förvandlar vissa direkt till nyckelords klasser och andra till rena strängar. Jag tar bort alla mellanrum och radbrytningar. Sedan skickas listan med token till parsen, som bygger upp det till ett syntaxträd och via trädet så översätter jag mitt språks kod till Ruby. Sist så lägger jag till skapelse av Main klassen och anrop av dess metod Main och sen evaluerar jag Ruby koden. Jag följer helt enkelt: tokens reguljära uttryck parserregler BNF körning av to_ruby eval av sträng. Programkoden Ž ƒ ˆ ˆ Š Ž Š Ž ˆƒŽ ˆƒŽ Žƒ Žƒ Ž Ž Ž ˆ Ž ˆ ˆ ˆ ˆ ˆ Ž 12

13 ƒ ƒ ƒ Š Žƒ ˆ ƒ Žƒ Žƒ ƒ Žƒ Žƒ ƒ Š Žƒ ˆ Žƒ ƒ Žƒ Žƒ Ž Žƒ ˆ ƒ Š Žƒ ˆƒ Žƒ Ž ˆƒ Ž Ž Žƒ Ž ƒ Ž Žƒ Ž ƒ Š Žƒ Ž Ž ƒ Š Žƒ Ž ƒ Ž Žƒ Ž Ž Ž Žƒ Ž ƒ ƒ Š ˆ ˆ Ž Žƒ Ž ƒ ˆ ˆ š ˆ ƒ Š ƒ ˆƒ ˆƒ Ž Žƒ Ž ƒ ƒ ƒ Žƒ ƒ ƒ Ž ƒ ƒ ƒ Š ƒ ˆƒ ˆƒ Ž ƒ ƒ Žƒ ƒ ƒ Ž ƒ ƒ ƒ Š ˆ ˆ Ž ˆ ˆ Ž ˆ ˆ ƒ Š ƒ ˆ ˆ ƒ ƒ Ž ƒ ƒ ƒ Ž ˆ ƒ ƒ ƒ Ž ƒ Š ƒ ˆ ˆ Ž ƒ Ž ˆ ƒ Ž Ž Ž ƒ ƒ ƒ Š ˆ ƒ ƒ ƒ ƒ ƒ ƒ ƒ Š ƒ ƒ Ž ˆ ƒ ƒ ƒ Š ˆ ƒ ƒ ƒ Š ˆ ƒ ƒ ƒ ˆƒ ˆ ƒ ƒ ƒ ƒ ƒ ƒ ƒ ƒ Ž ƒ ƒ Š Ž ƒ Š ƒ ƒ Š Ž Ž ƒ Š ƒ ƒ Ž ƒ ƒ Š Ž

Ž ƒ ƒ Š ƒ ƒžž ƒ ƒ ƒž ƒ ƒ ƒž ƒ Š ƒžž ƒ ƒž ƒ ƒž Ž ƒžž ƒ ƒ Š ˆ ƒ ƒ ƒ ƒ Š Š Ž ƒ ƒ ƒ Š ˆ ƒ ƒ ƒ Š ˆ ƒžž ƒ ƒ ƒ Š ƒž ƒ Ž ƒž ƒ Š ƒ Š ˆƒŽ ˆƒŽ ƒ Š ˆƒ ƒ Š ˆ ƒžž Ž ˆ ƒ ƒ Š ˆ ˆ ƒžž Ž Ž ˆ ƒ Ž š ˆ ƒ ˆ Ž š ƒ Š ˆ ˆ ƒžž Ž Ž ˆ ƒ ˆ Ž Ž Ž Ž ˆ ƒ ƒ Š Ž Ž Ž ˆ ƒ Ž Ž Ž Ž ƒ Š Ž ˆ ˆ ƒžž Ž Ž ˆ ƒ Ž š ˆ ƒ Ž ˆ Ž š ƒ Š Ž ˆ ˆ ƒžž Ž Ž ˆ ƒ Ž ˆ Ž Ž Ž Š Ž ƒ Š Š Ž ˆ ƒžž Ž Ž Š Ž ƒ Ž Ž ˆ ƒ Š ˆ ˆ ƒžž ˆ ƒžž ˆ ƒžž Ž ˆ Ž Ž ƒ ˆ Ž Ž Ž ˆ ƒžž ƒ Š ˆƒ ˆ ƒ ƒžž ƒ ƒ Š ˆƒ ˆ ƒ ƒžž ƒ ƒ Š ˆƒ ˆƒ ƒ ƒžž ƒ ƒ Š ˆ ƒžž ˆ 14

ƒ ƒžž ƒ ƒ Š ˆ ƒžž ˆ ƒ ƒžž ƒ ƒ Š ˆƒ ƒ ƒžž ƒ ƒ Š ˆƒ ƒ ƒžž ƒ ƒ Š ˆ ƒžž ƒ ƒžž ƒ ƒ Š ƒ ˆ ƒ Š ˆƒ ƒ ˆ ƒ ƒžž ƒ ƒ ƒ Š ˆƒ ˆ ƒ ƒžž ƒ ƒ Š ˆƒ ˆ ƒ ƒžž ƒ ƒ Š ˆƒ Ž ˆ ƒ ƒžž ƒ Ž Žˆ ƒ Š ˆƒ Ž ˆƒ ƒ Ž š ƒžž ƒ Ž š ƒ ƒ ˆ ƒžž ƒ Žƒ ƒ Š ˆƒ ˆ ˆ ƒ ƒ ˆ ƒžž ƒ ƒ ˆ ƒ Š ˆƒ ˆ ƒ ƒ ˆ ƒžž ƒ ƒ ˆ Ž ƒ ƒ Ž ƒ Š ˆ Ž ˆƒ ƒ Š ˆƒ ƒ ƒ ƒ Š Ž ˆƒ ƒ Š ˆƒ ƒ ˆƒ ƒ ƒ ƒ ƒ ƒ Š ˆƒ ƒ ƒ Ž ˆƒ ƒ Š ˆ ƒ Š ƒ Š ƒ Š Ž ƒ Ž ƒ Š Ž ƒ Ž ƒ 15

ƒ Š ƒ ƒ Ž ƒ Š Ž ˆ ƒ Š Syntaxträd Pilarna ska föreställa flöde upp mot program. Klasser för språket Žƒ ˆ ˆ ƒž œ ƒ ƒ ƒ

17 ˆƒ ƒ Žƒ ƒ ˆ ƒž œ Žƒ ƒ ƒ Ž ˆ ƒž œ Žƒ ƒ ˆ Žƒ ƒ Žƒ ƒ ˆ ˆ ƒž ˆŽƒ ƒ Žƒ ƒ ˆ ˆ ˆ ˆ ƒž ƒž ƒž ˆƒŽ ƒž Žƒ Ž ˆ ƒž œ Ž Ž Ž ˆ Ž Žƒ Žƒ ˆ ƒž œ Ž ˆ Š Žƒ ƒ ƒ ƒ Š ƒ Žƒ ƒ Ž Ž

Ž Žƒ ƒ Žƒ ƒ ƒ ˆ ƒž œ ƒ Ž ƒ ƒ š ˆ š Ž ƒ ƒ š Žƒ ˆ ˆ ƒž œ ƒ ƒž ƒ ƒ ƒ Ž Ž ƒ ƒ ƒž ƒž ƒ ƒ ƒ ƒ ƒ ƒ Ž Ž š ˆ š ˆ š Ž Š š Žƒ ƒ ƒ Ž š ˆ ƒ ƒ Ž ƒ ƒ Ž Ž ˆ ƒ ˆ š Ž š 18

19 Žƒ Žƒ ƒ ƒ Ž ˆ ƒž œ ƒ ƒ Ž ƒ ƒ ƒ ƒ š ˆ š ˆ š Ž Š š Žƒ ƒ ƒ Ž š ƒ ˆ š Ž š Žƒ Žƒ Ž ˆ ƒž œ ˆ ˆ ˆ ˆ Ž Žƒ Ž ˆ ƒž œ

ƒ ƒ Ž ƒ ˆ ˆ ˆ ˆ ƒ ƒ ƒ Ž ˆ Ž Žƒ ƒ ˆ ƒž œ Ž š ˆ š Ž š Žƒ ˆ ƒ ˆ ƒž œ ƒ Ž ƒ Ž Ž ƒ ƒ Ž ƒ Ž ƒ Ž Ž š Ž ˆ Ž ƒ Žƒ š Ž 20

21 Ž ˆ ƒ ˆ ˆ š Ž ˆ Ž ƒ Ž Ž ˆ Ž ƒ Ž š Ž ˆ ƒ Ž ˆ ˆ š Ž Ž ˆ Ž ƒ Ž Ž Ž ˆ Ž ƒ Ž š Žƒ Š Ž ƒ ˆ ƒž œ Ž ƒ Ž Ž ƒ Ž ƒ Ž Ž Š Ž Ž ƒ Ž Žƒ ƒ ˆ ƒž œ ˆ Ž Ž ˆ ˆ Ž Ž Ž Ž ˆ Š Ž Ž Ž Žƒ ˆ ƒž œ ƒž ƒž ƒž ƒž Žƒ ƒžž ˆ ƒž œ ƒž ˆ ƒ ƒž ƒž

22 ˆ ˆ ƒ ƒ ˆ š Ž š ˆ Ž ˆ ƒ ˆ ˆ ƒž Ž ˆ ˆ ƒž ˆ ˆ ƒžž ƒ Žƒ ˆ ƒž ƒ ƒ ƒž ˆ ƒ ƒž Ž ƒ ƒž ˆ ˆ ƒ ƒ ƒ ƒž Ž ˆ ˆ ƒ ƒ ƒž Ž ˆ ˆ ƒ ƒ ƒž Ž ˆ ˆ Ž ƒ ƒ ƒž ˆ ˆ ƒž ƒ Ž ˆ ˆ ƒž ƒ Ž ˆ ˆ ƒž ƒ Ž ˆ ˆ ƒž ƒ Ž ˆ ˆ

ƒž ƒ Ž ˆ ˆ ƒž ƒ ˆ ƒ Žˆ ˆ ƒž ƒ ˆ ƒž Žƒ ƒ ˆ ƒž œ Žƒ ƒ ˆ Žƒ Žƒ ˆ Žƒ Ž ˆ š Žƒ š Reflektion Att göra ett eget programmeringsspråk var inte lika lätt som jag trott från början och jag har förstått några av de svårigheter man kan stöta på när man utvecklar ett språk. Störst var att parsningen blandade ihop flera olika regler så jag vart tvungen att tänka om på några grammatiska regler, som visade sig bli en riktigt utmaning. Den lättaste utmaningen var att få ner allt till kod och test köra det och var även den roligaste biten. Jag önskar jag hade haft mer tid på att arbeta på språken innan inlämning för en del saker behöver finslipas och göras bättre så som public, private och protected delarna. Projektet i sig har varit väldigt lärande och något jag känner att jag kommer kunna använda i framtiden speciellt när man ska ta fram lite mer avancerade skript till spel/program man utvecklar. 23

Appendix 1: Fortsatt utveckling Flera delar fungerar just nu bara som kosmetiska utseenden. De jag syftar på är i funktions definitionen där parametrarna kan ta in vad som helst fast de bara borde kunna ta in angiven typ. Public, private och protected är också bara kosmetiska och behöver tas in i koden så att de kan ge någon viktigt. Första utvecklingen från nu blir att lägga in felsökning av programmet via det syntaxträd som bygds upp och sedan lägga in så att public, private och protected bär något värde. Även om arv inte ännu finns så kan det i alla fall vara bra om man har en fungerande grund för kommande utveckling. Appendix 2: Exempel program Klass Test BackCode-kod Žƒ ƒ Ž Ž ˆ ƒ ƒ ƒ Žƒ ƒ Ž ˆ Œ ŽŽ ƒ Ruby-kod Žƒ ƒ ˆ Œ ŽŽ Žƒ ƒ ˆƒ ƒ ƒ ƒ ƒ ƒ 24

25 While loop BackCode-kod Žƒ ƒ Ž ˆ ƒ Š Ž ŽŽ ƒ Š ƒ Ruby-kod Žƒ ƒ ˆƒ Š Ž ŽŽ Š ƒ ƒ ƒ ƒ If sats BackCode Žƒ ƒ Ž ˆ ƒ ˆ

26 Ž ˆ Ž ˆ Ž ˆ Š Ž Š Ž ƒ Ruby-kod Žƒ ƒ ˆƒ ˆ Ž ˆ Ž ˆ Ž ˆ Š Ž Š Ž ƒ ƒ ƒ ƒ

For loop BackCode-kod Žƒ ƒ Ž ˆ ƒ ˆ ƒ ŽŽ ƒ Ruby-kod Žƒ ƒ ˆƒ Š Ž ŽŽ ƒ ƒ ƒ ƒ Litet Spel BackCode-kod Žƒ ƒ Ž ˆ ƒ Žƒ ƒ Š ƒ ƒ ƒ ƒ ƒ Š Ž Ž ŽŽ Žƒ ˆƒ ƒ ƒ ƒ ƒ ƒ 27

ƒ ƒ Š ƒ Š Š Š Š ˆ Š ƒ ƒ ƒ ˆ Š ƒ ƒ ƒ ƒ Žƒ Žƒ Ž Š Ž ˆ ƒž œ Š Ž ˆ Ž Ž ˆ Š Ž ˆƒŽ Ž ˆ ˆƒ Šƒ Š Š Ž ˆ Ž ˆ ƒ ƒ Š Žƒ Žƒ ƒ Ž ˆ ƒ Œ ˆ Œ ƒ Š 28

Ž ˆ Œ š Ž ˆ Œ š Ž ˆ Œ š ƒ Ruby-kod Žƒ ƒ ˆ ƒ Œ ˆŒ ƒ Š Ž ˆŒ š Ž ˆŒ š Ž ˆŒ š Žƒ Žƒ Š ˆ ƒž œ Š ˆ Ž ˆ Š Ž ˆƒŽ ˆ ˆƒ Šƒ Š Š Ž ˆ ˆƒ ƒ Š Š 29

30 Žƒ ƒ ˆƒ Žƒ ƒ Š ƒ ƒ ƒ ƒ ƒ Š Ž Ž ŽŽ Žƒ ˆƒ ƒ ƒ ƒ ƒ ƒ ƒ ƒ Š ƒ Š Š Š Š ˆ Š ƒ ƒ ƒ ˆ Š ƒ ƒ

ƒ ƒ ƒ ƒ 31

Appendix 3: Kod ˆ Š ˆ Ž ˆ Š ƒ ˆ Š ŠŠƒ Ž ˆƒŽ ƒž ƒ ƒ Šƒ ƒ ƒ ƒ ˆ ƒ ˆˆ ƒ Ž Žƒ Ž Ž ƒ Š Š Š Ž Š ˆ Š ƒ Žƒ Ž Š Ž ƒ Š ƒ ƒ ƒ Š ƒ ƒ ƒ Š ƒ Š ƒ Ž ˆ ƒž œ ƒ ƒ Ž ƒ Ž Š ƒ ˆ Š š Š Ž ƒ Š ƒ ƒ Š ƒ Ž ƒ š Š Š ƒ ˆ Š ƒ Š Œ ƒ ƒ Š Š Ž ƒ ƒ ƒ Š ˆ ƒ Š Ž ƒ Š ƒ ƒ Š š Š Ž ƒ Š šƒ Ž ƒ Š ƒ ƒ Š ƒ ƒ Š Š ˆ Š š ˆ ƒ Š ƒ Ž ƒ Š ƒ Š ƒ Ž ˆ Š ƒ Ž ˆ Š ƒ Š Ž ˆ ˆ ƒ ƒ ƒ Š ˆ Ž ƒ Š ƒ Š Ž ƒ Š ƒ Š ˆ ƒ Ž ˆ ƒ Š ˆ ƒ ˆ ƒ Š Ž ƒ Š ƒ Š Ž ˆ ƒ Š Ž Ž Ž Ž ƒ Š Ž ƒ Š ƒ Š Ž ƒ Š Ž ˆ Ž Ž ƒ Š Ž Ž 32

ƒ ƒžž ƒ Š ƒ ˆ Š Ž ˆ ƒ Š ƒ Š Ž Ž ƒ Š Ž Ž ƒ Š Š ˆ Š ƒ ƒ ƒ ƒ Š ƒ Š ƒ Š Ž ƒ Ž ƒ ƒ Žƒ Ž Ž ˆ ƒž ƒ š Ž Ž Ž ƒ Š Š Š ƒ ˆ Š ƒ Š Š ƒ š ƒ Š ƒ ƒ Š Š š š ˆ Š ƒ ƒ Š Ž ˆ ƒ Š Ž ƒ ƒ ˆ ƒ Ž Ž ƒ Ž ƒ ˆ Ž Žƒ Ž Ž Ž ƒ Ž ƒ Š ƒ ƒ Š ƒ š Ž Š Š ƒ ƒ ˆƒ Ž Š Ž ƒ š ˆ Ž ˆ Ž ƒ Š Ž ƒ Š ƒ Š ƒ ƒ ƒ Š ƒ Ž ƒ ƒ Š ƒ Ž ƒ Š ƒ ƒ ˆ Ž ƒ ƒ Ž Ž Ž ƒ ˆ Ž ˆ ƒ Š Ž ƒ Š Ž ƒ Š Ž ƒžž Ž Ž ƒ Š Ž Ž Ž ƒ ƒ ƒ ƒ Š ƒ ƒ ƒ ƒ Š Ž Ž ƒ Š Ž Ž ƒ Ž ˆ Š Ž ƒ Š Š Ž ƒ Š ƒ ˆ Š Žƒ ƒ Š 33

34 ƒ ƒ ƒ Š Ž Žƒ ƒ ƒ ƒ ƒ ƒ Ž Ž Žƒ ƒ ˆ ƒž œ Žƒ ƒ ƒ Ž Ž Ž š Ž ƒ Ž Žƒ ƒ ƒ Žƒ ƒ ƒ ƒ ƒž Ž œ Š ƒžž ˆ œ Ž Ž Ž ƒ ˆ Š ƒž ˆ Žƒ ƒ ƒ Š ˆ š ˆ ˆƒ Ž Šƒ š ƒ ƒ ƒ Ž Ž š Ž Ž š ƒ ƒ Š ƒ ƒ Š Š Žƒ š ˆƒ Šƒ ƒ Š Š ˆ ˆ ƒ Š Ž ƒ Š Ž ƒž ƒ Š š Š Ž ƒ ƒ Š Š Ž ƒžž ƒ Š ˆ Ž Š ƒ Šƒ Š Š ˆ Š ƒ Š ƒ Š Ž Š ƒ ƒ Š Š š ˆƒŽ ˆ ƒ Ž ˆ ƒ Ž Š ƒ Š ˆ ƒ ƒ ƒžž Šƒ ƒ ƒ œ Š ƒ ƒ Ž ƒ ƒ Š ˆ Š ƒž ˆ

35 ƒ Š ƒ ƒš š ƒ ƒ ƒž ƒ Š Ž ƒ ƒ ˆ Š ƒ ƒ š ƒ ƒž ˆ œ ƒ ƒ ƒ š š Œ ˆ ƒš Ž ˆ š Š š Š ˆ š š ˆ ƒš ƒš š ˆ š ˆ ƒš š Ž Ž ˆ ƒ ˆ Žƒ ƒ ƒ ƒ š ƒ Ž ˆ ƒ Ž Ž š š š ƒ Ž ˆ ƒ ƒ Ž Ž ƒ Ž ƒ Ž ƒ ˆ Ž ƒ Ž Ž Ž ƒ Žˆ Ž ƒ Ž ƒ ƒž Ž Ž Ž ˆ ƒ Š ƒ Ž Ž ƒ Š ƒ Ž

36 Žƒ ˆ ˆ ƒž œ ƒ ƒ ƒ ˆƒ ƒ Žƒ ƒ ˆ ƒž œ Žƒ ƒ ƒ Ž ˆ ƒž œ Žƒ ƒ ˆ Žƒ ƒ Žƒ ƒ ˆ ˆ ƒž ˆŽƒ ƒ Žƒ ƒ ˆ ˆ ˆ ˆ ƒž ƒž ƒž ˆƒŽ ƒž Žƒ Ž ˆ ƒž œ Ž Ž Ž ˆ Ž Žƒ Žƒ

37 ˆ ƒž œ Ž ˆ Š Žƒ ƒ ƒ ƒ Š ƒ Žƒ ƒ Ž Ž Ž Žƒ ƒ Žƒ ƒ ƒ ˆ ƒž œ ƒ Ž ƒ ƒ š ˆ š Ž ƒ ƒ š Žƒ ˆ ˆ ƒž œ ƒ ƒž ƒ ƒ ƒ Ž Ž ƒ ƒ ƒž ƒž ƒ ƒ ƒ ƒ ƒ ƒ Ž Ž š ˆ š ˆ š Ž Š š Žƒ ƒ ƒ Ž š ˆ ƒ ƒ Ž ƒ ƒ Ž

38 Ž ˆ ƒ ˆ š Ž š Žƒ Žƒ ƒ ƒ Ž ˆ ƒž œ ƒ ƒ Ž ƒ ƒ ƒ ƒ š ˆ š ˆ š Ž Š š Žƒ ƒ ƒ Ž š ƒ ˆ š Ž š Žƒ Žƒ Ž ˆ ƒž œ ˆ ˆ ˆ

39 ˆ Ž Žƒ Ž ˆ ƒž œ ƒ ƒ Ž ƒ ˆ ˆ ˆ ˆ ƒ ƒ ƒ Ž ˆ Ž Žƒ ƒ ˆ ƒž œ Ž š ˆ š Ž š Žƒ ˆ ƒ ˆ ƒž œ ƒ Ž ƒ Ž Ž

40 ƒ ƒ Ž ƒ Ž ƒ Ž Ž š Ž ˆ Ž ƒ Žƒ š Ž Ž ˆ ƒ ˆ ˆ š Ž ˆ Ž ƒ Ž Ž ˆ Ž ƒ Ž š Ž ˆ ƒ Ž ˆ ˆ š Ž Ž ˆ Ž ƒ Ž Ž Ž ˆ Ž ƒ Ž š Žƒ Š Ž ƒ ˆ ƒž œ Ž ƒ Ž Ž ƒ Ž ƒ Ž Ž Š Ž Ž ƒ Ž Žƒ ƒ ˆ ƒž œ ˆ Ž Ž ˆ ˆ Ž Ž Ž Ž ˆ Š Ž Ž Ž Žƒ ˆ ƒž œ ƒž ƒž ƒž

41 ƒž Žƒ ƒžž ˆ ƒž œ ƒž ˆ ƒ ƒž ƒž ˆ ˆ ƒ ƒ ˆ š Ž š ˆ Ž ˆ ƒ ˆ ˆ ƒž Ž ˆ ˆ ƒž ˆ ˆ ƒžž ƒ Žƒ ˆ ƒž ƒ ƒ ƒž ˆ ƒ ƒž Ž ƒ ƒž ˆ ˆ ƒ ƒ ƒ ƒž Ž ˆ ˆ ƒ ƒ ƒž Ž ˆ ˆ ƒ ƒ ƒž Ž ˆ ˆ Ž ƒ ƒ ƒž

42 ˆ ˆ ƒž ƒ Ž ˆ ˆ ƒž ƒ Ž ˆ ˆ ƒž ƒ Ž ˆ ˆ ƒž ƒ Ž ˆ ˆ ƒž ƒ Ž ˆ ˆ ƒž ƒ ˆ ƒ Žˆ ˆ ƒž ƒ ˆ ƒž Žƒ ƒ ˆ ƒž œ Žƒ ƒ ˆ Žƒ Žƒ ˆ Žƒ Ž ˆ š Žƒ š Žƒ ƒ ˆ ƒž œ

43 ƒ ƒ ƒ ƒ ƒ Ž ƒ ˆ ˆ Š Ž Š Ž ˆƒŽ ˆƒŽ Žƒ Žƒ Ž Ž Ž ˆ Ž ˆ ˆ ˆ ˆ ˆ Ž ˆ ƒ ƒ ƒ Š Žƒ ˆ ƒ Žƒ Žƒ ƒ Žƒ Žƒ ƒ Š Žƒ ˆ Žƒ ƒ Žƒ Žƒ Ž Žƒ ˆ ƒ Š Žƒ ˆƒ Žƒ Ž ˆƒ Ž Ž Žƒ Ž ƒ Ž Žƒ Ž ƒ Š Žƒ Ž Ž ƒ Š Žƒ Ž ƒ Ž Žƒ Ž Ž Ž Žƒ Ž ƒ ƒ Š ˆ ˆ Ž Žƒ Ž ƒ ˆ ˆ š ˆ ƒ Š ƒ ˆƒ ˆƒ Ž Žƒ Ž ƒ ƒ ƒ Žƒ ƒ ƒ Ž ƒ ƒ ƒ Š ƒ ˆƒ ˆƒ Ž ƒ ƒ Žƒ ƒ ƒ Ž ƒ ƒ ƒ Š ˆ ˆ Ž ˆ ˆ Ž ˆ ˆ

ƒ Š ƒ ˆ ˆ ƒ ƒ Ž ƒ ƒ ƒ Ž ˆ ƒ ƒ ƒ Ž ƒ Š ƒ ˆ ˆ Ž ƒ Ž ˆ ƒ Ž Ž Ž ƒ ƒ ƒ Š ˆ ƒ ƒ ƒ ƒ ƒ ƒ ƒ Š ƒ ƒ Ž ˆ ƒ ƒ ƒ Š ˆ ƒ ƒ ƒ Š ˆ ƒ ƒ ƒ ˆƒ ˆ ƒ ƒ ƒ ƒ ƒ ƒ ƒ ƒ Ž ƒ ƒ Š Ž ƒ Š ƒ ƒ Š Ž Ž ƒ Š ƒ ƒ Ž ƒ ƒ Š Ž Ž ƒ ƒ Š ƒ ƒžž ƒ ƒ ƒž ƒ ƒ ƒž ƒ Š ƒžž ƒ ƒž ƒ ƒž Ž ƒžž ƒ ƒ Š ˆ ƒ ƒ ƒ ƒ Š Š Ž ƒ ƒ ƒ Š ˆ ƒ ƒ ƒ Š ˆ ƒžž ƒ ƒ ƒ Š ƒž ƒ Ž ƒž ƒ Š ƒ Š ˆƒŽ ˆƒŽ ƒ Š ˆƒ ƒ Š ˆ ƒžž Ž ˆ ƒ ƒ Š ˆ ˆ ƒžž Ž Ž ˆ ƒ Ž š ˆ ƒ ˆ Ž š ƒ Š ˆ ˆ ƒžž Ž Ž ˆ ƒ ˆ Ž Ž Ž Ž ˆ ƒ ƒ Š Ž Ž Ž ˆ ƒ Ž Ž Ž Ž 44

ƒ Š Ž ˆ ˆ ƒžž Ž Ž ˆ ƒ Ž š ˆ ƒ Ž ˆ Ž š ƒ Š Ž ˆ ˆ ƒžž Ž Ž ˆ ƒ Ž ˆ Ž Ž Ž Š Ž ƒ Š Š Ž ˆ ƒžž Ž Ž Š Ž ƒ Ž Ž ˆ ƒ Š ˆ ˆ ƒžž ˆ ƒžž ˆ ƒžž Ž ˆ Ž Ž ƒ ˆ Ž Ž Ž ˆ ƒžž ƒ Š ˆƒ ˆ ƒ ƒžž ƒ ƒ Š ˆƒ ˆ ƒ ƒžž ƒ ƒ Š ˆƒ ˆƒ ƒ ƒžž ƒ ƒ Š ˆ ƒžž ˆ ƒ ƒžž ƒ ƒ Š ˆ ƒžž ˆ ƒ ƒžž ƒ ƒ Š ˆƒ ƒ ƒžž ƒ ƒ Š ˆƒ ƒ ƒžž ƒ ƒ Š ˆ ƒžž ƒ ƒžž ƒ ƒ Š ƒ ˆ ƒ Š ˆƒ ƒ ˆ ƒ ƒžž ƒ ƒ ƒ Š ˆƒ ˆ ƒ ƒžž ƒ ƒ Š ˆƒ ˆ ƒ ƒžž ƒ ƒ Š ˆƒ Ž ˆ ƒ ƒžž ƒ Ž Žˆ ƒ Š ˆƒ Ž ˆƒ ƒ Ž š ƒžž ƒ Ž š ƒ ƒ ˆ ƒžž ƒ Žƒ ƒ Š ˆƒ ˆ ˆ ƒ ƒ ˆ ƒžž ƒ ƒ ˆ ƒ Š ˆƒ ˆ ƒ ƒ ˆ ƒžž ƒ ƒ ˆ 45

Ž ƒ ƒ Ž ƒ Š ˆ Ž ˆƒ ƒ Š ˆƒ ƒ ƒ ƒ Š Ž ˆƒ ƒ Š ˆƒ ƒ ˆƒ ƒ ƒ ƒ ƒ ƒ Š ˆƒ ƒ ƒ Ž ˆƒ ƒ Š ˆ ƒ Š ƒ Š ƒ Š Ž ƒ Ž ƒ Š Ž ƒ Ž ƒ ƒ Š ƒ ƒ Ž ƒ Š Ž ˆ ƒ Š ˆ š Ž Š ˆ Ž ˆ Ž Ž ˆ Ž ˆ Ž Š Ž Ž ˆ Ž Ž ƒ ƒ ƒ ƒ ƒ ƒ ƒ 46

ƒž ˆŽ ƒ ˆ ƒ ƒ Ž Ž Ž Ž ƒ Ž Ž Ž ƒ Ž ŽŽ Ž 47