1 Inledning. 2 Användarhandledning. 1.1 Bakgrund. 1.2 Syfte. 2.1 Målgrupp. 2.2 Komma igång med Jail

Storlek: px
Starta visningen från sidan:

Download "1 Inledning. 2 Användarhandledning. 1.1 Bakgrund. 1.2 Syfte. 2.1 Målgrupp. 2.2 Komma igång med Jail"

Transkript

1 Linköpings universitet Innovativ Programmering TDP019 Datorspråk VT 2011 JAIL Just Another Interpreted Language Thomas Hall Henrik Karlsson

2 Innehåll 1 Inledning Bakgrund Syfte Användarhandledning Målgrupp Komma igång med Jail Att programmera i Jail Konstruktioner i språket Vårt första program Kommentarer Deklarera och tilldela variabler Aritmetiska operationer och utskrift Villkorssatser (if-satser) While-satser For-loopar Funktioner Systemdokumentation Grammatik Översiktlig beskrivning av Jail Tokens Parsning Noder Interpretator Omgivning Kodstandard Utvärdering Vad vi hade för tankar om kursen Problem på vägen Rekursiv grammatik Omgivningar Ändringar från grundidén Lärdomar från projektet Jobba i en grupp Förstå andra språk bättre

3 1 Inledning I den här rapporten kommer vi ta upp hur användaren använder sig av Jail, vilken syntax som finns i språket och vilka funktioner och konstruktioner som språket har. 1.1 Bakgrund Den här rapporten är skriven för kursen TDP019 Projekt: Datorspråk, på Tekniska högskolan vid Linköpings universitet. Språkets namn, Jail, är en förkortning av Just Another Interpreted Language, som är lite av ett internt skämt, det syftar på att språktypen är den vanligaste bland alla IP-studenters språktyper, samt en känd kompilator som heter Yet Another Compiler Compiler. 1.2 Syfte Syftet med språket är inte att användaren ska få något effektivt, snabbt och enkelt sätt att skriva programkod i utan mer för vår egen skull. Vi ville lära oss grunderna till hur de flesta språk är uppbyggda och vilka konstruktioner och funktioner man måste skapa för att ett språk ska kännas komplett, därför valde vi en syntax som kändes enkel att skriva och sen fick vi implementera det vare sig det språket i sig blev bättre/sämre än något annat. 2 Användarhandledning I användarhandledningen kommer vi leda dig genom i Jails specifika syntax och konstruktioner. Efter att ha läst handledningen ska du kunna skriva enklare program med hjälp av språket. 2.1 Målgrupp Språket Jail är inte riktad till någon speciell målgrupp, utan kanske mer för användare som är intresserade av att prova på en ny slags syntax. Språket är inte anpassat till nybörjare då det är väldigt likt C++/Ruby/Python i sin syntax, men det är heller inte anpassat för avancerade användare då vi inte har några svåra konstruktioner eller funktioner. Jail är något slags mellanting. 2.2 Komma igång med Jail För att få en smärtfri körning rekommeras Ubuntu eller något annat Linux-system då man ska programmera Jail-kod. Eftersom att Jail-parsern är skriven med Ruby-kod så kräver språket att användaren har Ruby installerat. Sedan krävs det bara att användaren installerar programspråket med det medföljande installeringsskriptet. Efter installationen är det möjligt att starta Jailinterpretern från vilken katalog som helst i terminalen, samt exekvera program skrivna med Jail-kod genom att lägga till en sökväg i början av varje Jail-fil (#!/usr/bin/env jail). För att installera Jail följer du dessa enkla steg: 1) Packa upp tar-filen. 2) Navigera till de uppackade filerna. 3) Kör Install-filen. 3

4 2.3 Att programmera i Jail Jail är ett imperativt språk som använder en syntax som är lik de flesta stora programmeringsspråken. När man programmerar i Jail behöver man inte berätta för språket att programmet startar med hjälp av något nyckelord. Språket har egentligen inget krav på indentering, men vi rekommerar att alltid använda det då det både underlättar för både programmeraren själv och alla som läser koden i efterhand. För att köra kod som är skriven med Jail så har du två alternativ: antingen kan du spara koden i ett textdokument och sedan köra den från terminalen, eller så kan du köra den interaktiva tolken genom att skriva jail i en terminal. 2.4 Konstruktioner i språket Här visar vi några enkla exempel på hur kodsyntaxen ser ut i Jail Vårt första program Här visas ett enkelt exempel på hur man kan skapa ett program, som skriver ut Hello World! på skärmen: output Hello World ; Kommentarer Kommentarer i Jail gör man med #-tecknet. Allt efter detta tecken på samma rad kommer att ignoreras av parsern och bara stå som kommentar till koden. Exempel: output Hello World ; #skriver ut Hello World! Deklarera och tilldela variabler För att deklarera variabler i Jail måste man ange vilken datatyp variabeln ska ha. Man kan även tilldela att värde då man deklarerar den. Exempel: int summa; summa = 15; string mittnamn = Peter ; #skapar en variabel med datatypen integer #tilldelar värdet 15 till variabeln summa #deklarerar och tilldelar den på samma rad Aritmetiska operationer och utskrift Eftersom att Jail skiljer på satser och uttryck kan man inte bara skriva ett uttryck för att räkna ut det, men man kan till exempel skriva ut ett uttryck eller tilldela variabler med aritmetiska operationer för att se vad det blir. Exempel: 4

5 int sum = 5+5; int sumtwo = 5; int totsum = sum + sumtwo; output totsum; #binder 5+5 till sum #tilldelar värdet av till totsum #skriver ut värdet till variabeln totsum Villkorssatser (if-satser) I Jail så kommer koden efter if-satsen att köras om villkoret är sant, precis som i de flesta andra språk. Något som skiljer är dock att man måste berätta för Jail när if-satsen är slut. Det gör man med nyckelordet if. Exempel: int a = 5; if (a IS 4) output Bil ; elif (a < 3) output Buss ; output Cykel ; if #om a är lika med 4 så... #skriver ut Bil #annars om a är mindre än 3 så... #skriver ut Buss #om inget av de ovanståe stämmer... #skriver ut cykel #if- och elifsatsen är falska, skriver ut Cykel Det som kan stå innanför parentesen är relationsuttryck. Det betyder att man jämför det som står på de olika sidorna om relationsoperatorn. De olika relationsoperatorerna som finns i Jail är: Lika med: x IS y Inte lika med: x ISNOT y Större än: x > y Mindre än: x < y Större eller lika med: x >= y Mindre eller lika med: x <= y 5

6 2.4.6 While-satser En while-sats i Jail fungerar precis som de flesta andra språk, men precis som i if-satsen så måste man även här berätta för Jail när while-satsen är slut, med nyckelordet while. Så länge uttrycket inom parentesen är sant kommer koden mellan while och while att köras. Exempel: int a = 1; while (a < 10) #medan a är under output a; #skriv ut a a++; #öka värdet på a med 1 while #sluta loopa Alla relationsoperatorer som fungerar i if-satser fungerar även i while-satser For-satser En for-sats i Jail är väldigt lik en for-sats i C++. Den kräver att användaren skriver en for-sats på ett specifikt sätt. Jail är mycket mer strikt i hur du kan använda en for-sats än t.ex. C++, då en for-sats ska användas för iteration i språket. Precis som i if- och while-satser så förväntas programmeraren att skriva när satsen är slut, med nyckelordet for. Exempel: for (int a = 0; a < 10; a++) output a; for #här sätter vi upp vilka krav vi har, när loopen ska sluta #skriv ut a varje loop #sluta loopa Detta betyder egentligen: a har värdet 0, kör koden mellan for och for tills uttrycket är falskt. Öka värdet på a med ett varje iteration (loop). Om Jail körde detta program skulle reslutatet bli att alla siffror mellan 0 och 10 skulle skrivas ut på skärmen Funktioner Funktioner i Jail fungerar som i de flesta andra språk. Har man en return i funktionen så kommer det värdet att returneras när man ropar på funktionen, om man inte har någon return så returneras 0 från funktionen. Exempel på en enkel funktion: fn enkelfunk(string x;) output x; fn fn( hejsan! ) #skapar en funktion med en inparameter x #skriver ut x #avslutar funktionen #ropar på funktionen, ger x värdet hejsan! Denna funktion kommer skriva ut hejsan! på skärmen. 6

7 3 Systemdokumentation Systemdokumentationen kommer ta upp hur Jail är uppbyggt, allt från att hämta tokens till att ordna med dess omgivningar. Efter att ha läst den kommer läsaren ha en förstå för hur Jail ser ut i språkkärnan samt hur vi tänkte när vi implementerade språket. 3.1 Grammatik <program> ::= <satser> <satser> ::= <sats> <satser> <sats> <sats> ::= <repetition> <deklareravar> <deklarerafunktion> <tilldelning> <utmatning> <inmatning> <villkor> <retursats> <funktionsanrop> <deklareravar> ::= <datatyp> <var> ";" <datatyp> <var> "=" <uttryck> ";" <tilldelning> ::= <var> <tilldelningsop> <uttryck> ";" <var> "+" "+" ";" <var> " " " " ";" <utmatning> ::= "output" <uttryck> ";" <inmatning> ::= "input" <var> <villkor> ::= "if" "(" <predikatuttryck> ")" <satser> "if" "if" "(" <predikatuttryck> ")" <satser> <elifs> "" <satser> "if" "if" "(" <predikatuttryck> ")" <satser> <elifs> "if" "if" "(" <predikatuttryck> ")" <satser> "" <satser" "if" <elifvillkor> ::= "elif" "(" <predikatuttryck> ")" <satser> <elifs> ::= <elifvillkor> <elifs> <elifvillkor> 7

8 <repetition> ::= <forloop> <whileloop> <whileloop> ::= "while" "(" <predikatuttryck> ")" <satser> "while" <forloop> ::= "for" "(" <deklareravar> <relationsuttryck> ";" <tilldelning> ")" <satser> "for" <retursats> ::= "return" <uttryck> <uttryck> ::= <funktionsanrop> <predikatuttryck> <additionsuttryck> <string> <additionsuttryck> ::= <multiuttryck> <additionsuttryck> "+" <multiuttryck> <additionsuttryck> " " <multiuttryck> <multiuttryck> ::= <aritmparentes> <multiuttryck> "*" <multiuttryck> <multiuttryck> "/" <multiuttryck> <relationsuttryck> ::= <relationsoperand> <relationsop> <relationsoperand> <relationsoperand> ::= <additionsuttryck> <var> <tal> <logikuttryck> ::= <boolean> <logikoperand> <logikop> <logikuttryck> <logikoperand> <logikop> <logikoperand> <logikoperand> ::= <relationsuttryck> <boolean> <predikatuttryck> ::= <logikuttryck> <relationsuttryck> <logikop> ::= "AND" "OR" 8

9 <relationsop> ::= ">" "=" "<" "=" "IS" ">" "<" "ISNOT" <tilldelningsop> ::= "*" "=" "/" "=" "+" "=" " " "=" "=" <datatyp> ::= "int" "string" "bool" "float" <deklarerafunktion> ::= "fn" <var> "(" <parametrar> ")" <satser> "fn" <parametrar> ::= <parameter> <parametrar> <parameter> <parameter> ::= <deklareravar> <funktionsanrop> ::= <var> "(" <arguments> ")" ";" <arguments> ::= <argument> <arguments> "," <argument> <argument> ::= <uttryck> <boolean> ::= "true" "false" <aritmparentes> ::= "(" <additionsuttryck> ")" <var> <tal> <var> ::= /^[a za Z]+/ " " /^[a za Z]+/ <string> ::= '"' String '"' <tal> ::= Float " " Float Integer " " Integer 9

10 3.2 Översiktlig beskrivning av Jail Jail är ett imperativt språk med väldigt grundläggande konstruktioner och funktioner. Man kan säga att dess syntax är väldigt lik C++, men språket använder en interpretator och är inte kompilerat. Jail är ganska starkt typat då programmeraren måste följa en strikt struktur i t.ex. for-loopar, if-satser eller variabeldeklaration. Jail skiljer uttryck från satser. Det betyder att matematiska uttryck inte kan räknas ut genom att bara skriva t.ex Om användaren vill veta vad blir måste den t.ex. kombinera det med en utmatning: output 3 + 4; #skriver ut Tokens Jail plockar ut sex olika typer av tokens: Blanksteg, som vi ignorerar Jail är inte indenteringsstyrt. Integers, siffror utan decimaltecken. Floats, siffror med decimaltecken. Kommentarer, dessa ignoreras också då man inte vill exekvera dem. Bokstäver, allt mellan a z, både som versaler och gemener. Övrigt, alla specialtecken och annat som ingen annan token plockar upp. 3.4 Parsning Ett av det viktigaste momenten när man skapar ett språk är att sätta upp grammatiska regler, det är grunden till hela språket så kallad parsning. Med Jail var vi väldigt noga med att skapa dessa grundregler eftersom att alla senare grammatikregler bygger på dem. Det betyder att om man börjar på ett bra sätt så kommer många kommande problem att lösa sig själva. I vår parsning använder vi oss av väldigt mycket rekursion. Det är ett måste för att inte behöva lösa alla problem senare i noderna. Det största problemet i Jails parsning var med aritmetiska beräkningar. Vi försökte lösa det helt själva utan att titta på hur andra stora språk hade löst det. Det visade sig vara svårare än väntat, efter att ha tittat på Pythons grammatik så krävdes det ett par ändringar sedan fungerade allt. 3.5 Noder I Jail skapar vi olika noder för alla olika parsningsregler, med ett fåtal undantag. I noderna gör vi alla felkontroller och det är här vår kod möter konstruktionspråket, dvs Ruby. Eftersom Jail har olika omgivningar beroe var i programmet pekaren befinner sig så krävs det att man hanterar omgivningar någonstans, det görs i våra noder. Noderna får in information från parsningen och leder programmet åt det håll det ska beroe på vad dem får in. Sedan översätter den de kommandon den får av Jail (därav ett interpreterat språk) och utför dem med Ruby. Därför är det viktigt att ha ett bra språk till att skapa ett annat språk, då det är dess konstruktioner som begränsar hur bra man kan implementera sitt egna nya språk. 10

11 3.6 Interpretator I Jail har vi skapat en egen interpretator. Interpretatorn exekverar den kod den får in direkt, om inte användaren skriver in: if-satser for-loopar while-loopar funktioner Detta är alla funktioner som Jail kräver att användaren avslutar med ett. Då väntar interpretatorn med att exekvera tills t.ex. if-satsen är färdigskriven för att inte tvinga programmeraren att skriva allt på en rad. 3.7 Omgivning I Jail finns det en global omgivning, variabler som skapas där kan man komma åt från hela programmet. Sedan skapas separata omgivningar i alla loopar, if-satser och funktioner. Det betyder att om man skapar en variabel int x i en global omgivning, då kan man skapa ytterligare en variabel int x inuti en if-sats utan att påverka det globala x:et. Exempel: int x = 5; #skapar en variabel x if (x > 3) #villkoret är sant int x = 7; #här skapas en ny variabel x, bara i if-omgivningen if #när vi nu avslutar if-satsen har det globala x:et värdet 5 Om användaren väljer att inte skapa ytterligare en variabel int x i if-omgivningen, då kan man ändra det globala x:et genom att tilldela den ett nytt värde, exempel: int x = 5; #skapar en variabel x if (x > 3) #villkoret är sant x = 7; #här ändras det globala x:et if #när vi nu avslutar if-satsen har det globala x:et värdet 7 Detta realiserar vi genom att använda olika funktioner. Då pekaren befinner sig i en global omgivning och vi deklarerar variabler, då läggs variabeln in i en hash-tabell som nyckel med dess värde som värde. När programmet befinner sig i t.ex. en if-sats, då skapas en ny hash-tabell där den gamla globala omgivningen hamnar innästlad. Om användaren skapar en ny variabel i det här läget så läggs variabeln och dess värde i den nya hashen, men på en nivå högre än den gamla globala omgivningen. Om man sedan gör en utmatning på variabeln x, som både finns i den globala omgivningen och den lokala, då letar Jail först efter variabeln x i den lokala omgivningen. Om den inte hittar en sådan variabel så hoppar den in i nästa omgivning, i vårt fall den globala omgivningen, och letar efter x där. Om x inte blivit deklarerad i varken den lokala eller den globala omgivningen så kommer Jail skicka ut ett felmeddelande. Genom denna behandling av omgivningar så spelar det ingen roll hur djupt nästlad koden är, Jail hittar rätt ändå. 11

12 3.8 Kodstandard I Jail har vi inte använt någon strikt kodstandard. Vi har försökt döpa variabler och klasser till logiska namn så vi inte behövt kommentera, utan att koden själv ska vara så lättläst att det inte är nödvändigt att beskriva vad koden gör. I vår parser har vi använt svenska namn för att det kändes minst förvirrande i början av projektet. Alla noder och hela parsern är skrivet med camelcase, men där klassnamn alltid börjar med stor bokstav. 4 Utvärdering Här tar vi upp vilka tankar och problem som uppkom under kursens gång samt vilka lärdomar kursen givit oss. 4.1 Vad vi hade för tankar om kursen Då denna kurs började visste vi inte riktigt vad vi skulle vänta oss. Att göra ett eget språk, det lät som en omöjlighet. Efter kursen tdp007 så hade vi fått känna på hur RD-parsern fungerade. Det gjorde att man fick en tanke om hur man egentligen började då man skapade ett språk. I den kursen fick vi övningar som lärde oss att plocka ut tokens och sedan matcha dessa för att kunna jämföra sanningsvärden, redan då började man tänka sig hur man skulle implementera det riktigt språket som kom vi nästa terminstillfälle. Genom hela tdp015 hade vi möten med Anders Haraldson som visade oss grunderna till hur man skulle bygga sin grammatik, så att man parsade på ett korrekt sätt och hur man matchade själva programdelen med satser och uttryck. Den upptrappningen av lärdom gjorde att man på ett väldigt pedagogiskt sätt, ett litet steg i taget, förstod hur allt hängde ihop på ett bra sätt. Då nästa termin började och vi skulle börja implementera språket, då hade vi redan byggt klart vårt språk i våra huvuden. 4.2 Problem på vägen Utöver dessa två problem som beskrivs nedan har det självklart funnits småproblem på vägen, men inget som stoppat upp oss mer än några minuter i programmerandet. Vi tror att det gått väldigt smärtfritt på grund av att vår grammatik har varit väldigt bra skriven och att våra noder har hanterat alla problem i sin egen nod, så vi inte spridit dålig kod runt om i programmet Rekursiv grammatik Eftersom vi redan hade skrivit en stor del av grammatiken innan vi började implementera språket så var det lätt att komma i gång. Det vi dock inte visste var hur strikt grammatiken behövde skrivas för att den skulle både generell och förhindra eventuella syntaxfel som kunde uppstå. Första problemet vi stötte på var då vi skulle matcha satser, dock visste vi inte att det var ett problem förrän vi började skriva flera satser i koden. Allt vi hade implementerat fungerade väldigt bra då det bara var en rad kod, men så fort det blev fler satser så ignorerade den allt förutom den första satsen. I efterhand känns lösningen självklar, men vid det tillfället var det otroligt svårt att komma förbi problemet. Vi försökte returnera den ena satsen samt den andra satsen men det blev bara fel. Sedan kom vi på idén att skicka in satserna i en nod och ta hand om problemet där. När vi väl hade skickat in satserna dit var det väldigt enkelt att se hur problemet skulle lösas. Efter att ha fixat satser kände vi att vi hade lärt oss hur grammatikdelen fungerade. Det kändes inte svårt längre tills vi kom fram till aritmetiska uttryck. Utan att titta på stora språk så som Python, C++ eller Ruby försökte vi skapa egna rekursiva matchningar, där vi skulle ta hand om prioritet och parenteser. Efter att ha suttit med samma problem i över två dagar så bestämde vi oss för att titta hur 12

13 Python hade löst det problemet. Vi kopierade grundidén och helt plötsligt så var alla våra problem lösta Omgivningar Att ordna omgivningar har nog varit det svåraste med projektet, precis som Anders Haraldsson sa att det brukar vara. För det första måste man ha en idé om hur man vill ta hand om de olika omgivningarna, för det andra så måste den idén fungera. Våra omgivningar i Jail skapas först på en global nivå, sedan då man går ner i en nästlad nivå (t.ex. i en if-sats) då skapas en ny omgivning där den globala omgivningen blir inskickad i en nästlad hash-tabell. Det gör att om vi skapar en variabel int x globalt, och sedan skapar ytterligare en int x inuti en if-sats och sedan skriver ut variabeln inne i den lokala if-satsen då letar Jail upp den närmsta existerande x:et, i vårt fall i den lokala if-satsen och skriver ut dess värde. Genom att lägga upp omgivningarna på detta sätt så spelar det ingen roll att vi nästlar 15 gånger. Jail kommer hitta rätt ändå, genom att leta i den första lokala omgivningen hittar den inte x där kommer den hoppa in i den övre nästlingen och leta där, osv. Då vi kodade omgivningen så gällde det att ha tungan rätt i mun som man säger, det är otroligt lätt att missa eller helt enkelt använda Rubys syntax fel. När det sedan blir en stor mängd kod är det väldigt svårt att lokalisera var felet ligger, därför har vi varit väldigt noga med att testköra koden så ofta som möjligt för att hitta eventuella fel direkt. int x = 5; fn funktion(int y;) int z = 7; output x; fn output z; output x; #skapar ett x i en global omgivning #skapar en funktion #skapar ett z lokalt i funktionens omgivning #härifrån kommer vi åt x, eftersom den ligger globalt #slut på funktionen #detta går inte, z ligger lokalt i funktionens omgivning #detta går, x ligger i den globala omgivningen 4.3 Ändringar från grundidén Då kursen började hade vi tankar på ett göra just ett imperativt språk som hade en syntax som var lik C++, och den idén har vi hållit fast vid. Vi hade också planer på att skapa en unik datatyp, en slags trädtyp som man kunde binda värden till på olika grenar av den. Den idén slopades ganska fort eftersom vi inte kunde komma på någon riktig användning till den. Vår ambitionsnivå har redan från starten varit hög, men vi kände ingen anledning till att skapa ett nytt och innovativt språk, utan vi ville ha med alla grundstenar och göra dem väldigt bra istället. Jail har aldrig varit tänkt som ett språk som skulle vara överlägset något annat, utan vi skapade ett språk för att lära oss för att ge oss mer lärdom hur befintliga språk är konstruerade. Nu i efterhand kan vi säga att vi lyckades, vi har lärt oss otroligt mycket under projektets gång och det har varit det mest lärorika projektet under vår tid i IP. 4.4 Lärdomar från projektet Detta tar upp på vilka olika sätt vi lärt oss saker genom projektet Jobba i en grupp Förutom att skapa ett eget språk så har vi lärt oss att jobba bra i en grupp. Vi har delat upp arbetet väldigt bra och jobbat bredvid varandra, på så sätt har det blivit en väldigt effektiv arbetsfördelning. 13

14 Så fort den ena av oss stötte på problem så kunde den andra hjälpa snabbt genom att se koden med ett annat perspektiv och tankesätt, för det är väldigt lätt att bli låst vid sin egen kod och inte se självklara fel man gjort. Att ett projekt aldrig blir klart förrän tiden är slut stämmer väldigt bra, därför är det viktigt att båda jobbar i ett projekt som detta. Det är många moment som måste klaras av och tiden räcker egentligen aldrig till, det finns alltid rum för förbättringar och utökningar Förstå andra språk bättre Då vi går igenom alla steg som krävs för att skapa ett språk blir man medveten om hur andra språk fungerar på ett helt annat sätt än tidigare. Vi förstår att ett programmeringsspråk ständigt behöver uppdateras för det är så enkelt att hitta ett litet kryphål i grammatikreglerna eller helt enkelt för att hänga med i utvecklingen av hur vi använder språk. Något vi också har lärt oss är tyngden av implementationsspråket, använder man ett språk som är dåligt att implementera med är det svårt att skapa ett språk som är annat än dåligt. 14

15 Bilagor Nod.rb #!/usr/bin/env ruby # -*- coding: utf-8 -*- # TODO = {} $forbiddenthings = %w[fixnum String Float NilClass Array] class Scope # Hanterar omgivning attr_accessor :omg def = = nil def = omg def Scope.new class ScopeIter def = omg def next "top" return nil 15

16 @omg def getnewscope scope = {} scope["omg"] = Scope.getScope return scope def lookup (var) omg = Scope.getScope return var.eval if isnotvar(var) varname = if var.class == VarNod var.var var if omg.has_key? varname if omg[varname].class == FunNod ret = omg[varname].eval(var.params) return ret return omg[varname] iter = ScopeIter.new(omg) while (true) omg = iter.next break if omg.nil? if omg.has_key? varname if omg[varname].class == FunNod return omg[varname].eval(var.params) return omg[varname] 16

17 raise "The variable #{varname} is not declared" def set_var(var, varde) valueexist = false omg = Scope.getScope if omg.has_key? var omg[var] = varde valueexist = true elsif iter = ScopeIter.new(omg) while (true) omg = iter.next if (!valueexist && (omg.has_key? var)) omg[var] = varde valueexist = true break break if omg.has_key? "top" if!valueexist raise "The variable #{var} is not declared!" Scope.setScope(omg) def setoldscope(omg) Scope.setScope(omg["omg"]) class SatsNod attr_accessor :stmt, :stmts def initialize(stmt, = = stmts 17

18 def eval do stmt return stmt if isreturn(stmt) stmt.eval class Program def initialize = stmts def eval { stmt unless nil class DeklVar attr_accessor :var, :varde def initialize (var,typ, varde = = = = = varde def = Scope.getScope 18

19 @namedvar when "int" = 0 when "float" = 0 when "string" = "" when "bool" = == Scope.setScope(@omg) class UtskriftNod attr_accessor :str def =str def = = lookup(@str) class TilldelningNod attr_accessor :var, :tillduttr, :omg def initialize (var, = = = = {} def eval 19

20 @omg = Scope.getScope varde = lookup(@tillduttr) == VarNod oldvalue = lookup(@namedvar) if!aritmallowed(oldvalue, varde) raise "Syntax error!!!\n Illegal operation #{oldvalue.class} #{@op} #{varde.class}" when "+=" then set_var(@namedvar, (oldvalue + varde)) when "-=" then set_var(@namedvar, (oldvalue - varde)) when "*=" then set_var(@namedvar, (oldvalue * varde)) when "/=" then set_var(@namedvar, (oldvalue / varde)) when "=" then set_var(@namedvar, varde) when "++" then set_var(@namedvar, (oldvalue + varde)) when "--" then set_var(@namedvar, (oldvalue - varde)) Scope.setScope(@omg) class AritmNod attr_accessor :op1, :op, :op2 def initialize(var1, op, = = = op def eval when '*' then return (@op1.eval when '/' then return (@op1.eval when '+' then return (@op1.eval when '-' then return (@op1.eval 20

21 class RelationsNod attr_accessor :lho, :op, :rho #left/right hand op def initialize(lho, op, = = = op def eval omg = Scope.getScope when '>' then return (@lho.eval when '>=' then return (@lho.eval when '<' then return (@lho.eval when '<=' then return (@lho.eval when 'IS' then return (@lho.eval when 'ISNOT' then return # Repetion class ForNod attr_accessor :uttr, :tilldelning, :stmt, :omg def initialize(decl,uttryck, tilldelning, = = = = = decl def = getnewscope while (@uttr.eval) do 21

22 do stmt if retval if isreturn(retval) puts "japp" #TODO setoldscope(@omg) return setoldscope(@omg) class WhileNod def initialize(uttryck, = = = {} def = getnewscope Scope.setScope(@omg) while(@uttryck.eval) do stmt 22

23 #------Villkor class IfNod attr_accessor :omg def initialize(relutr, elif, els, = = = = = {} def = getnewscope Scope.setScope(@omg) runned = false if do stmts if stmts.respond_to? "each" #TODO Kontrollera om denna någonsin körs fortfarande stmts.each do stmt if stmts.class == ReturnNod setoldscope(@omg) return stmts stmt.eval if stmts.class == ReturnNod setoldscope(@omg) return stmts ret = stmts.eval if isreturn(ret) setoldscope(@omg) 23

24 return ret runned = true do elif if (elif[0].eval and!runned) elif[1].each do elifstmt if isreturn(elifstmt) setoldscope(@omg) return elifstmt elifstmt.eval unless elifstmt.class == Array runned = true if (!runned) "each" # Om mer än en do enelsesats if enelsesats.class == ReturnNod setoldscope(@omg) return enelsesats enelsesats.eval == ReturnNod setoldscope(@omg) 24

25 # Funktioner class FunNod def initialize(args, = = = = nil def #reder ut nästlingen av listan args = args[0].params.flatten if raise "Incorrect number of arguments, expected #{@args.length} got #{params.length}" params.each_with_index do value, index if = = = getnewscope Scope.setScope(@omg) { "params" do stmt if stmt.class == = stmt.eval.eval break; returned = stmt.eval if returned.class == ReturnNod 25

26 return returned.eval returned if returned.class == = returned.eval = 0 class ParamList attr_accessor :params def = params def def << << var class ReturnNod attr_accessor :value def = value def 26

27 # Datatyper class LogikNod def initialize(lho, op, = = = op def eval when "AND" returnvar = (@lho.eval when "OR" returnvar = when "ISNOT" returnvar = when "IS" returnvar = (@lho.eval return returnvar class IntegerNod attr_accessor :value def = i def eval def to_s "#{@value}" 27

28 class NegIntegerNod def = -i def eval class FloatNod attr_accessor :value def = f def eval class StringNod attr_accessor :value def = s def eval class BoolNod attr_accessor :value def = b 28

29 def eval class ListNod attr_accessor :value def = lst def eval class HashNod attr_accessor :value def = h def eval class NegNod def initialize(i) if i.class == = i.eval.reverse elsif i.class == = = -i.eval def eval 29

30 class VarNod attr_reader :params, :var def initialize(var, = = params def eval lookup(self) def getstuff # Funktion som kontrollerar om aritm operation är tillåten mellan två operander def aritmallowed(lho, rho) if lho.class == rho.class then return true elsif lho.class == NilClass then return true elsif lho.class == TrueClass && rho.class == FalseClass then return true elsif lho.class == FalseClass && rho.class == TrueClass then return true return false def isreturn(stmt) if stmt.class == ReturnNod return true return false def isnotvar(var) return true if var.class == StringNod return true if var.class == IntegerNod 30

31 return true if var.class == FloatNod return true if var.class == BoolNod return true if var.class == AritmNod return true if var.class == ParamList return true if var.class == LogikNod return true if var.class == RelationsNod return false Jail.rb #!/usr/bin/env ruby # * coding: utf 8 * require './opt/.jail/rdparse' require './opt/.jail/node' class Jail # Just Another Interpreted Language JAIL # attr_accessor def = = Parser.new("jail breaker") do #Lexer token(/\s+/) # Whitespaces token(/\d+\.\d+/) { z z.to_f} #Float token(/\d+/) { z z.to_i} # Integers #token(/"[^;^,^\(^\)^\"]*"/) { z z.to_s} # Strings token(/\#.*/) # Comments token(/[a Za z]+/) { z z} # Chars token(/./) { z z} #Alles # ze prgrammmm start :program do match(:satser) { satser Program.new(satser).eval} rule :satser do match(:sats) { sats sats} match(:satser, :sats) { satser, sats SatsNod.new(sats, satser)} 31

32 rule :sats do match(:return){ z z} match(:repetition) { z z} match(:deklareravar) { z z} match(:deklarerafunktion) { z z} match(:tilldelning) { z z} match(:utmatning) { z z} match(:inmatning) { z z} match(:villkor) { z z} match(:funktionsanrop) { z z} rule :funcsatser do match(:funcsats) { sats ParamList.new(sats)} match(:funcsatser, :funcsats) { satser, sats ParamList.new( satser << sats)} rule :funcsats do match(:repetition) { z z} match(:deklareravar) { z z} match(:deklarerafunktion) { z z} match(:tilldelning) { z z} match(:utmatning) { z z} match(:inmatning) { z z} match(:villkor) { z z} match(:return) { z z} #match(:funktionsanrop) { z z} rule :deklareravar do match(:datatyp, :var, ";") { m, n, _ DeclVar.new(n)} match(:datatyp, :var, "=", :uttryck, ";"){ m,n,_,z, DeclVar.new(n,z)} rule :tilldelning do match(:var, :tilldelningsop, :uttryck, ";") { var, op, uttr, _ TilldelningNod.new(var, op, uttr)} match(:var, "+", "+", ";") { var, op1, op2, _ TilldelningNod.new(var,op1+op2, IntegerNod.new(1))} match(:var, " ", " ", ";") { var, op1, op2, _ TilldelningNod.new(var, op1+op2, IntegerNod.new(1))} 32

33 rule :utmatning do match("output", :uttryck, ";") { _, z, _ UtskriftNod.new(z)} rule :inmatning do match("input", :var) rule :villkor do match("if", "(", :predikatuttryck, ")", :satser, "if"){ _, _, z, _, x, _ IfNod.new(z, Array.new,Array.new, x)} match("if", "(", :predikatuttryck, ")", :satser, :elifs, "", :satser, "if") { _, _, ifrel, _, ifsatser, elifs, _, satser, _ IfNod.new(ifrel,[elifs],satser,ifsatser)} match("if", "(", :predikatuttryck, ")", :satser, :elifs, "if") { _, _, ifrel, _, ifsatser, elifs, _ IfNod.new(ifrel, [elifs], Array.new, ifsatser)} match("if", "(", :predikatuttryck, ")", :satser, "", :satser, "if") { _, _, ifrel, _, ifsatser, _, satser, _ IfNod.new(ifrel, Array.new, satser, ifsatser)} rule :elifvillkor do match("elif", "(", :predikatuttryck, ")", :satser) { _, _, z, _, x [z,[ x]]} rule :elifs do match(:elifvillkor) match(:elifs, :elifvillkor) { _, z z} # Repetition rule :repetition do match(:forloop) match(:whileloop) rule :whileloop do match("while", "(", :predikatuttryck, ")", :satser, "while") { _, _, preduttr, _, satser, _ WhileNod.new(predUttr, satser)} rule :forloop do match("for", "(",:deklareravar, :relationsuttryck, ";",:tilldelning, ")", :satser, "for"){ _,_,decl,rutr,_, tilldelning, _, sats,_ ForNod.new(decl,rutr,tilldelning,sats)}# Mer grejs här 33

34 rule :newline do match(/\\n/) { z z} rule :uttryck do match(:funktionsanrop) match(:predikatuttryck) match(:additionsuttryck) match(:string) rule :additionsuttryck do match(:multiuttryck) match(:additionsuttryck, "+", :multiuttryck) { a, b, c AritmNod.new(a,b,c)} match(:additionsuttryck, " ", :multiuttryck) { a, b, c AritmNod.new(a,b,c)} rule :multiuttryck do match(:aritmparentes) match(:multiuttryck, "*", :multiuttryck) { a, b, c AritmNod.new(a,b,c)} match(:multiuttryck, "/", :multiuttryck) { a, b, c AritmNod.new(a,b,c)} rule :relationsuttryck do match(:relationsoperand, :relationsop, :relationsoperand) { a,b,c RelationsNod.new(a,b,c)} rule :relationsoperand do match(:additionsuttryck) match(:var) match(:tal) rule :logikuttryck do match(:boolean) match(:logikoperand, :logikop, :logikuttryck) { a,b,c LogikNod.new(a,b,c)} match(:logikoperand, :logikop, :logikoperand) { a,b,c LogikNod.new(a,b,c)} 34

35 rule :logikoperand do match(:relationsuttryck) match(:boolean) rule :predikatuttryck do match(:logikuttryck) match(:relationsuttryck) rule :logikop do match("and") match("or") rule :relationsop do match(">", "=") { z,x z+x} match("<", "=") { z,x z+x} match("is") { z z} match(">") match("<") match("isnot") { z z} rule :tilldelningsop do match("*", "=") { z,x z+x} match("/", "=") { z,x z+x} match("+", "=") { z,x z+x} match(" ", "=") { z,x z+x} match("=") rule :datatyp do match("int") match("string") match("bool") match("float") 35

36 rule :deklarerafunktion do match("fn", :var, "(", :parametrar, ")", :funcsatser, "fn") { _, funknamn, _, param, _, satser, _ DeclVar.new(funkNamn, FunNod.new(param, satser))} rule :parametrar do match(:parameter) { para ParamList.new(para)} match(:parametrar, :parameter) { para1, para2 ParamList.new(para1 << para2)} rule :parameter do match(:deklareravar) rule :funktionsanrop do match(:var, "(", :arguments, ")", ";") { var, _, arguments, _, _ VarNod.new(var.var, arguments)} rule :arguments do match(:argument) { arg ParamList.new(arg)} match(:arguments, ",", :argument) { arg1, _, arg2 ParamList.new(arg1 << arg2)} rule :argument do match(:uttryck) rule :return do match("return", :uttryck, ";") { _, uttryck,_ ReturnNod.new(uttryck)} rule :boolean do match("true") { _ BoolNod.new(true)} match("false") { _ BoolNod.new(false)} 36

37 rule :aritmparentes do match("(", :additionsuttryck, ")") { _, z, _ z} match(:var) match(:tal) rule :var do match(/^[a za Z]+/) { m VarNod.new(m)} match(" ", /^[a za Z]+/) { _, z NegNod.new(z)} rule :string do #match(string) { z StringNod.new(z)} rule :tal do match(float) { z FloatNod.new(z)} match(" ", Float) { _, z NegNod.new(z)} match(integer) { z IntegerNod.new(z)} match(" ", Integer) { _, z NegNod.new(z)} def done(str) ["quit","exit","bye",""].include?(str.chomp) def loop (str) if( str.start_with? "if" or str.start_with? "for" or str.start_with? "while" or str.start_with? "fn") return true return false def start print "<JAIL>" str = gets #@jailparser.logger.level = Logger::WARN 37

38 if done(str) elsif str = begin puts rescue Exception => e puts start #print "#{@jailparser.parse str}" str rescue Exception => e puts e.message start def run(file = = File.open(file, "r") unless = Logger::WARN str if elsif begin 38

39 rescue Exception => e puts run str rescue Exception => e puts e.message run class Loop # # En hjälpklass för att ta han om nästlingen av loopar. # attr_reader :ret_string def = = String.new def read += str if (str.start_with? "if" or str.start_with? "for" or str.start_with? "while" or str.start_with? += 1 elsif (str._with? "if\n" or str._with? "for\n" or str._with? "while\n" or str._with? = 1 def done 39

40 == 0 def = = 0 if ARGV.length == 1 filename = ARGV[0] if File.exist? filename Jail.new.run(filename) puts "The file #{filename} does not exist" Jail.new.start Install #!/bin/bash sudo cp./jail.rb /usr/bin/jail sudo chmod +x /usr/bin/jail sudo mkdir p /opt/.jail sudo cp./node.rb /opt/.jail/node.rb sudo cp./rdparse.rb /opt/.jail/rdparse.rb 40

Namnet är omvänt men inte koden

Namnet är omvänt men inte koden Linköpings universitet Innovativ Programmering TDP019 Datorspråk VT 2012 Namnet är omvänt men inte koden Albin Ekberg albek446@student.liu.se Innehållsförteckning 1 Inledning 3 1.1 Bakgrund 3 1.2 Syfte

Läs mer

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

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet Žƒ ƒ Ž Ž ˆ ƒ ƒ ƒ Žƒ ƒ Ž ˆ Œ ŽŽ ƒ Backcode Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet Innehållsförteckning 12-05-29 Inledning... 3 Användarhandledningen... 4 Klasser... 4 Metoder...

Läs mer

Användarhandledning Version 1.2

Användarhandledning Version 1.2 Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...

Läs mer

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

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling

Läs mer

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det? Föreläsning 10 Datalogi 1 DA2001 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer på skärmen print( Hej ) print( Hur är det?

Läs mer

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. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

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. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk Föreläsning 2 steknik och C DD1316 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program

Läs mer

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk Föreläsning 2 steknik DD1310 Python introduktion Variabler Datatyper Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program är

Läs mer

Visual Basic, en snabbgenomgång

Visual Basic, en snabbgenomgång Visual Basic, en snabbgenomgång Variabler och Datatyper En variabel är som en behållare. Olika behållare passar bra till olika saker. I Visual Basic(härefter VB) finns olika typer av behållare för olika

Läs mer

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

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället

Läs mer

Användar- och systemdokumentation

Användar- och systemdokumentation Användar- och systemdokumentation Linköpings universitet Examinator:, IDA marme647@student.liu.se Utskriftsdatum: Innehållsförteckning Inledning... 3 Användarhandledning... 4 Systemkrav och installation...4

Läs mer

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

Linköpings universitet Innovativ Programmering TDP019 Projekt: Datorspråk. flip/flop. ett helt flippat språk Linköpings universitet Innovativ Programmering TDP019 Projekt: Datorspråk flip/flop ett helt flippat språk TDP019 - Projekt: Datorspråk Vårterminen 2012 Johan Wänglöf Henrik Forsberg johwa457@student.liu.se

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316

Föreläsning 2 Programmeringsteknik och C DD1316 Föreläsning 2 Programmeringsteknik och C DD1316 Föreläsning 2 Programmeringsteknik och C Datatyp Aritmetiska operatorer Omvandling av typer Reserverade ord Mikael Djurfeldt Logiska operatorer

Läs mer

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

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik VT05 2 Repetition Repetition - Programmering i

Läs mer

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn. Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0

Läs mer

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk Föreläsning 2 steknik DD1310 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer funktioner betyder att instruera en dator Ett program

Läs mer

Klassdeklaration. Metoddeklaration. Parameteröverföring

Klassdeklaration. Metoddeklaration. Parameteröverföring Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar

Läs mer

DD1361 Programmeringsparadigm. Carina Edlund

DD1361 Programmeringsparadigm. Carina Edlund DD1361 Programmeringsparadigm Carina Edlund carina@nada.kth.se Funktionell programmering Grundidéen med funktionell programmering är att härma matematiken och dess funktionsbegrepp. Matematiskt funktionsbegrepp

Läs mer

Exempel på ett litet Ada-program

Exempel på ett litet Ada-program Exempel på ett litet Ada-program -- En kommentar som beskriver något. with Ada.Text_IO; procedure Mini is -- Deklarationer. K : constant Integer := 5; X, Y : Integer; -- Körbar kod. Ada.Text_IO.Put( Utskrift

Läs mer

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion Introduktion till programmering Föreläsning 4: Villkor och rekursion 1 1 Några inbyggda funktioner (med resultat!) Konverterar mellan de grundläggande typerna: >>> int("32") 32 >>> int(3.999) 3 >>> float(32)

Läs mer

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer 729G04 Programmering och diskret matematik Python 2: Villkorssatser, sanningsvärden och logiska operatorer Föreläsningsöversikt Vad händer när vi kör vår pythonkod? Programmerare Villkorssatser Jämförelser

Läs mer

Variabler och konstanter

Variabler och konstanter Variabler och konstanter Deklareras automatisk när man stoppar in data i dem. X = 7 Y = A Z = Kalle Definieras av att de har: ett namn (X) en datatyp (Integer) ett värde (t.ex. 7) Lagras i datorns minne!

Läs mer

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Programmering I Tobias Wrigstad fredag, 2009 augusti 28 Programmering I Tobias Wrigstad tobias@dsv.su.se Vad är programmering? Lågnivåspråk och högnivåspråk Kompilering och interpretering Variabler Notation för flödesschema (flow chart) Kontrollstrukturer (conditionals,

Läs mer

Uppgifter teknik HT17 (uppdaterad v. 40)

Uppgifter teknik HT17 (uppdaterad v. 40) Uppgifter teknik HT17 (uppdaterad v. 40) Uppgifterna bedöms inte, de är bara till för att öva. Samarbeta gärna med andra! Du behöver inte skriva ner svaren, men se till att du förstår lösningarna! 1. Det

Läs mer

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

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära

Läs mer

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning Varför? 732G11 Linköpings universitet 2011-02-08 Varför? 1 2 3 Varför? 4 5 Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while (

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Kompilera och köra programmet under terminal 2: I Skapa Hej.java

Läs mer

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

Parsning. TDP007 Konstruktion av datorspråk Föreläsning 6. Peter Dalenius Institutionen för datavetenskap Parsning TDP007 Konstruktion av datorspråk Föreläsning 6 Peter Dalenius Institutionen för datavetenskap 2017-02-14 2 Analys av källkod Lexikalisk analys Bildar tokensutifrån källkodens text. Syntaktisk

Läs mer

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser Introduktion till programmering Föreläsning 2: Variabler, uttryck och satser 1 1 Värden De grundläggande saker som en dator manipulerar resultaten av beräkningar kallas värden Värden vi stött på: 2 och

Läs mer

Tentamen i Introduktion till programmering

Tentamen i Introduktion till programmering Tentamen i Introduktion till programmering Kurskod: Skrivtid: D0009E 09:00-13:00 (4 timmar) Totalt antal uppgifter: 7 Totalt antal poäng: 38 Tentamensdatum: 2014-05-17 Jourhavande lärare: Tillåtna hjälpmedel:

Läs mer

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen Föreläsning 2 Programmeringsteknik och Matlab DD1312 Introduktion till python Variabler, datatyper, omvandling av typer sfunktioner Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande

Läs mer

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

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 Kompilera och köra programmet Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 under terminal 2: I Skapa Hej.java

Läs mer

Tentamen Grundläggande programmering

Tentamen Grundläggande programmering Akademin för Innovation Design och Teknik Tentamen Grundläggande programmering Kurskod: DVA103 Datum 2012-06-11 Tid 14.10 16.30 Examinator: Lars Asplund Maxpoäng: 48 Betygsgränser: Betyg 3: 20 Betyg 4:

Läs mer

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

PROMETHEUS. Ett typat, objektorienterat programmeringsspråk av Tim Andersson. PROMETHEUS Ett typat, objektorienterat programmeringsspråk av Tim Andersson. Linköpings universitet TDP019 Projekt: Datorspråk Examinator: Anders Haraldsson, IDA Tim Andersson timan976@student.liu.se Utskriftsdatum:

Läs mer

Översikt över Visual Basic

Översikt över Visual Basic Översikt över Visual Basic Om denna översikt Denna översikt ger en kort introduktion till de viktigaste delarna i programspråket Visual Basic 6.0. På alla ställen där det beskrivs hur man skriver kod gäller

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Grundläggande satser och uttryck Eric Elfving Institutionen för datavetenskap 5 augusti 2014 Översikt Uttryck Litteraler Operatorer Satser Villkor Upprepning Teckenhantering

Läs mer

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

Föreläsning 3: Booleans, if, switch TDA 545: Objektorienterad programmering Föreläsning 3: Booleans, if, switch Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Påminnelse om klasser och objekt Boll boll1 = new Boll(5,12); skapar ett nytt

Läs mer

Språket Python - Del 1 Grundkurs i programmering med Python

Språket Python - Del 1 Grundkurs i programmering med Python Hösten 2009 Dagens lektion Ett programmeringsspråks byggstenar Några inbyggda datatyper Styra instruktionsflödet Modulen sys 2 Ett programmeringsspråks byggstenar 3 ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR

Läs mer

Föreläsning 6: Introduktion av listor

Föreläsning 6: Introduktion av listor Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.

Läs mer

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner 732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (

Läs mer

plätt Linköpings universitet

plätt Linköpings universitet plätt Linköpings universitet Innovativ programmering TDP019 Projekt: Datorspråk Sebastian Törngren sebto088@student.liu.se Examinator: Anders Haraldsson, IDA Utskriftsdatum: 28 maj 2012 Innehåll Inledning...

Läs mer

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer Programmering hh.se/db2004 Föreläsning 3: Java. Grundtyper, variabler och arrayer Hej Då, Karel! Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Center for Research on Embedded

Läs mer

Sätt att skriva ut binärträd

Sätt att skriva ut binärträd Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer

Läs mer

SMD 134 Objektorienterad programmering

SMD 134 Objektorienterad programmering SMD 134 Objektorienterad programmering Dagens agenda: Typer i Java: primitiva datatyperna, referenstyper Variabler och variabeltilldelningar med primitiva typer Konstanter av de olika typerna. Heltalsräkning

Läs mer

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

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

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik för ingenjörer, VT06 2 Repetition Repetition -

Läs mer

TDP002 - Imperativ programmering

TDP002 - Imperativ programmering . TDP002 - Imperativ programmering Introduktion till kursen och Python Eric Elfving Institutionen för datavetenskap 14 augusti 2015 Översikt 2/29 Programmering - en översikt Python - Köra och skriva program

Läs mer

TDP002 Imperativ programmering

TDP002 Imperativ programmering TDP002 Imperativ programmering Introduktion till kursen och python Eric Elfving Institutionen för datavetenskap (IDA) Översikt Programmering En introduktion Python Köra och skriva program Python grunderna

Läs mer

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1 Skolan för Datavetenskap och kommunikation DD1310/DD1314/DA3009 Programmeringsteknik Föreläsning 1 Kursinfo Python-intro: print variabler reserverade ord input kommentarer beräkningar datatyper if-satser

Läs mer

DD1314 Programmeringsteknik

DD1314 Programmeringsteknik Skolan för Datavetenskap och kommunikation DD1314 Programmeringsteknik Föreläsning 1 o print o variabler o reserverade ord o input o kommentarer o beräkningar o datatyper o if-satser Kursinformation Programmering:

Läs mer

Deklarativ programmering

Deklarativ programmering Deklarativ programmering TDP007 Konstruktion av datorspråk Föreläsning 7 Peter Dalenius Institutionen för datavetenskap 2014-03-03 Deklarativ programmering Program skrivet i ett deklarativt språk logikspråk,

Läs mer

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen Föreläsning 2 Programmeringsteknik och Matlab DD1312 Introduktion till python Variabler,datatyper, omvandling av typer sfunktioner Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande

Läs mer

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

Programmering för språkteknologer I, VT2012. Rum Programmering för språkteknologer I, VT2012 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.lingfil.uu.se/~evelina/uv/uv12/pst1/ Idag - Kursplan - Börja programmera - Lokala variabler - aritmetiska

Läs mer

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo, 729G74 IT och programmering, grundkurs Tema 2, Föreläsning 2 Jody Foo, jody.foo@liu.se Föreläsningsöversikt Kursinfo: återkoppling Muddy Cards och kompletteringar Diskret matematik Python: Programmering

Läs mer

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php Introlektion PHP är ett av de enklare språken att lära sig just pga. dess dynamiska struktur. Det används för att bygga upp båda stora och mindre system. Några vanliga system som använder sig av PHP är

Läs mer

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner Introduktion till programmering D0009E Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner

Läs mer

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1 Skolan för Datavetenskap och kommunikation DD1310/DD1314/DA3009 Programmeringsteknik Föreläsning 1 Kursinfo Diagnostiskt prov Python-intro: print variabler reserverade ord input kommentarer beräkningar

Läs mer

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Att förstå variabler Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Vad är en variabel? En variabel är en plats att lagra information. Precis

Läs mer

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

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk: Föreläsning 1 OH: Övergripande information Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk: * maskinspråk = ettor och nollor, kan bara en maskin förstå. * programmeringsspråk

Läs mer

Programmeringsteknik med C och Matlab

Programmeringsteknik med C och Matlab Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga

Läs mer

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan. Bankkonto - övning Övningar att göra efter lärardemostration. Filen bankkonto.zip innehåller ett projekt med klassen Bankkonto. Zippa upp denna fil och öppna projektet i BlueJ och skriv vidare på klassen

Läs mer

Is Not A Markup Language

Is Not A Markup Language WINAML Is Not A Markup Language Av: Johan Alm & Han Lin Yap 2010 05 08 Innehållsförteckning 1. Inledning...2 1.1 Syfte...2 2. Användarhandledning...2 2.1 Målgrupp...2 2.2 Konstruktioner i språket...3 3.

Läs mer

Kurslitteraturen. C-nivå Villkorssatser [kap 8] if & elif & else and & or Loopar [kap 9] for

Kurslitteraturen. C-nivå Villkorssatser [kap 8] if & elif & else and & or Loopar [kap 9] for Inför provet Provet skrivs för hand och är uppdelad i två delar. Den första delen är på E-nivå och den andra delen är på C- och A-nivå. För att det ska bli enklare för er att träna inför provet så har

Läs mer

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander F5 Selektion och iteration ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Boolska uttryck Boolska uttryck använder sig av jämförelseoperatorer < > = ==!= Resultatets datatyp är boolean

Läs mer

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Kursinformation Imperativa delen av

Läs mer

Grundläggande datalogi - Övning 1

Grundläggande datalogi - Övning 1 Grundläggande datalogi - Övning 1 Björn Terelius October 30, 2008 Python är ett tolkat språk som kan köras interaktivt. tcs-ray:~/grudat08>python >>> 11+3*4 23 >>> a = 15 >>> b=a >>> print "a =", a, "b

Läs mer

Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition):

Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition): Översikt Motivering Syntax och semantik Imperativa språkets byggstenar och Python Datatyper Tilldelning och uttryck Kontrollstrukturer (på satsnivå) Subprogram Relaterade avsnitt: PL 3.1-3.2, 5.1-5.3,

Läs mer

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner Introduktion till programmering Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner med

Läs mer

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 i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner

Läs mer

Introduktion till programmering och Python Grundkurs i programmering med Python

Introduktion till programmering och Python Grundkurs i programmering med Python Introduktion till programmering och Python Hösten 2009 Dagens lektion Vad är programmering? Vad är en dator? Filer Att tala med datorer En första titt på Python 2 Vad är programmering? 3 VAD ÄR PROGRAMMERING?

Läs mer

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

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt Programspråk uppkallat efter Blaise. Skapat av Nicolaus Wirt. Avsett för undervisning för att lära ut typbegreppet och styrstrukturer. Har fått stor spridning p.g.a. enkelhet och att kompilatorn varken

Läs mer

Övningar i 2D2050. Per-Anders Staav (kallas Pa) Epost: eller

Övningar i 2D2050. Per-Anders Staav (kallas Pa) Epost: eller Övningar i 2D2050 Per-Anders Staav (kallas Pa) Epost: pasta@kth.se eller pastaav@algonet.se Läser till civilingengör på Elektro 180 p inriktning mot programmering. Har jobbat extra som lärare på Nada sedan

Läs mer

Programmering A. Johan Eliasson johane@cs.umu.se

Programmering A. Johan Eliasson johane@cs.umu.se Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer

Läs mer

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Lab 04 Muterbara strukturer, omgivningar TDDC74 Lab 04 Muterbara strukturer, omgivningar 1 Översikt I den här laborationen kommer ni att lära er mer om: Tillstånd, och skillnader mellan ren funktionell programmering och imperativ. Skillnaden

Läs mer

MMA132: Laboration 2 Matriser i MATLAB

MMA132: Laboration 2 Matriser i MATLAB MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen

Läs mer

Beräkningsvetenskap föreläsning 2

Beräkningsvetenskap föreläsning 2 Beräkningsvetenskap föreläsning 2 19/01 2010 - Per Wahlund if-satser if x > 0 y = 2 + log(x); else y = -1 If-satsen skall alltid ha ett villkor, samt en då det som skall hända är skrivet. Mellan dessa

Läs mer

DOM (Document Object Model) är modellen efter vilken en webbläsaren är uppbyggd. Alla objekt/element i webbläsaren finns hierarkiskt ordnade i DOM.

DOM (Document Object Model) är modellen efter vilken en webbläsaren är uppbyggd. Alla objekt/element i webbläsaren finns hierarkiskt ordnade i DOM. JavaScript del1 Syftet med detta häfte är att sammanfatta det viktigaste i JavaScript så kort och koncist som möjligt men ändå tillräckligt omfattande för att ge god kännedom om en av de vanligaste teknikerna

Läs mer

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar Föreläsning 3: Typomvandling, villkor och val, samt textsträngar Camilla Kirkegaard camilla.kirkegaard@liu.se Linköpings universitet Sweden October 14, 2013 1 Innehåll n n n n n Repetition Typomvandlingar

Läs mer

729G04 Programmering och diskret matematik. Föreläsning 7

729G04 Programmering och diskret matematik. Föreläsning 7 729G04 Programmering och diskret matematik Föreläsning 7 Föreläsningsöversikt Information Interaktion via text Läsa från fil Skriva till fil Spara och läsa abstrakta datatyper från fil Information Felaktigt

Läs mer

TDP002 - Imperativ programmering

TDP002 - Imperativ programmering TDP002 - Imperativ programmering Introduktion till kursen och Python Eric Elfving Institutionen för datavetenskap 1 Programmering - en översikt 2 Python Inbyggda typer Satser och uttryck 1 Programmering

Läs mer

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad 1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Java Språket Utmatning av Sträng litteraler Variabler

Läs mer

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

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016 Command line argumenter Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 /* Cla. java * Programmet illustrerar

Läs mer

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4: (22 januari 2016 F2.1 ) Föreläsning 2 Täcker material från lektion 1, 2, 3 och 4: Datatyper Aritmetik Tecken och strängar Klasser, Objekt Metoder Villkor, villkorssatser och iterationer main-metoden Kodstandard

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Outline Felhantering Eclipse Felsökning Command line argumenter

Läs mer

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

Pascal... Pascal. Pascal... Pascal... ... Programspråk uppkallat efter Blaise. Skapat av Nicolaus Wirt. Avsett för undervisning för att lära ut typbegreppet och styrstrukturer. Har fått stor spridning p.g.a. enkelhet och att kompilatorn varken

Läs mer

TUTORIAL: KLASSER & OBJEKT

TUTORIAL: KLASSER & OBJEKT TUTORIAL: KLASSER & OBJEKT I denna tutorial lär vi oss att använda klasser och objekt samt hur vi bygger en enkel applikation kring dessa. I tutorialen kommer det finnas en mängd kod som du antingen kan

Läs mer

Deklarativ programmering

Deklarativ programmering Kursens mål Deklarativ programmering Peter Dalenius petda@ida.liu.se Institutionen för datavetenskap Linköpings universitet 2008-02-26 redogöra för och använda reguljära uttryck använda XML för att definera

Läs mer

Imperativ programmering. Föreläsning 2

Imperativ programmering. Föreläsning 2 Imperativ programmering 1DL126 3p Föreläsning 2 Imperativ programmering Kännetecken för imperativa språk: Programmet består av en serie instruktioner. Olika språk har olika uppsättningar av instruktioner.

Läs mer

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg Introduktion till programmering D0009E Föreläsning 1: Programmets väg 1 Vad är en dator? En maskin vars beteende styrs av de innehållet (bitmönster) som finns lagrade i datorns minne (inte helt olikt förra

Läs mer

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 1 & 2 INTRODUKTION Föreläsning 1 & 2 INTRODUKTION Denna föreläsning Vad händer under kursen? praktisk information Kursens mål vad är programmering? Skriva små program i programspråket Java Skriva program som använder färdiga

Läs mer

C++ - En introduktion

C++ - En introduktion C++ - En introduktion De imperativa grunderna för dig som kan programmera Eric Elfving Institutionen för datavetenskap 1 / 72 Översikt 1 Grunderna 2 Uttryck och satser 3 Funktioner 4 Poster 1 Grunderna

Läs mer

Tentamen i. TDDC67 Funktionell programmering och Lisp

Tentamen i. TDDC67 Funktionell programmering och Lisp 1 Linköpings tekniska högskola Institutionen för datavetenskap Anders Haraldsson Tentamen i TDDC67 Funktionell programmering och Lisp och äldre kurser TDDC57 Programmering, Lisp och funktionell programmering

Läs mer

(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

(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 (Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart

Läs mer

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga

Läs mer