2D1373 Artificiella språk och syntaxanalys

Storlek: px
Starta visningen från sidan:

Download "2D1373 Artificiella språk och syntaxanalys"

Transkript

1 7 december 1998 Numerisk analys och datalogi Lars Engebretsen Laborationer i 2D1373 Artificiella språk och syntaxanalys våren 1999 Namn: Personnummer: Godkänd: Kvitteras:

2 2

3 Laboration 1 i Artificiella språk och syntaxanalys, våren 1999 Simulering av NFA I denna laboration ska du skriva ett program som simulerar en ickedeterministisk ändlig automat. Du kommer att behöva detta program i laboration 4 senare i kursen. En ickedeterministisk ändlig automat (förkortat NFA) beskrivs av en femtupel som består av: alfabetet Σ, mängden tillstånd Q, starttillståndet q 0 Q, mängden accepterande tillstånd F Q och övergångsrelationen N : Q (Σ {ε}) Q. Vad allt detta står för beskrivs i avsnitt 2.3 och 2.4 i Introduction to compiler construction. Vid simuleringen ställer vi för enkelhets skull några extra krav på automaten. Tillstånden är numrerade med naturliga tal där tillstånd nummer noll är starttillståndet. från varje tillstånd får det antingen gå ingen övergång alls, en teckenövergång, en epsilonövergång eller två stycken epsilonövergångar (det vill säga en ickedeterministisk förgrening). Detta är ingen svår begränsning alla ickedeterministiska ändliga automater kan enkelt skrivas om på ett sånt sätt. När (och om) automaten når ett accepterande tillstånd accepterar den, även om det finns inmatning kvar. Övergångsrelationen N ska realiseras med en vektor vars element har följande typ: typedef struct state_ { char symbol; int left, right; } state_t; Låt nu s vara en sådan vektor. Att (q 8,A,q 17 ) N ska lagras genom att s[8]={ A,17,-1}; och (q 5,ε,q 2 ) N lagras som s[5]={,2,-1}; Om det skulle ha funnits två epsilonövergångar från tillstånd q 5 skulle s[5].right ha använts för att lagra den andra. Automaten ε q A 5 q 6 C q ε 0 q 4 q 1 ε ε A q 2 q 3 ε B q ε 7 q D 8 q ε 9 q 10 lagras på följande sätt: Algoritmbeskrivning för simulatorn i s[i].symbol A B A C D s[i].left s[i].right Algoritmen vi kommer att använda är exakt den som beskrivs i kursbokens avsnitt 2.5, The Subset Construction. Vi simulerar den givna NFA:n genom att, vid varje position i indatasträngen, komma ihåg alla tillstånd som NFA:n kan befinna sig i vid denna position. Vi kommer alltså, i varje steg av NFA:ns simulering, att hålla reda på en delmängd av tillståndsmängden. (Nämligen den delmängd som består av de 3

4 tillstånd NFA:n kan befinna sig i just då.) Givet denna delmängd, övergångsrelationen och nästa indatasymbol ska vi kunna konstruera en ny delmängd: Mängden av de tillstånd NFA:n kan befinna sig i när den läst indatasymbolen. Om vi låter NFA:n ha tillstånden q 0,...,q n 1, F vara mängden av accepterande tillstånd och s vara vektorn med element av typen state_t får vi följande algoritm: M {q 0 } M EpsilonClosure(M) if F M /0 then return True repeat c NextSymbol() M SymbolTransition(M, c) M EpsilonClosure(M) if F M /0 then return True until M = /0 or NoMoreSymbols() return False Ovan är NextSymbol() en funktion som returnerar nästa indatasymbol. NoMoreSymbols() är en funktion som returnerar sant om det inte finns några fler indatasymboler. Funktionen SymbolTransition(M, c) ska givet en tillståndsmängd M och en indatasymbol c returnera en mängd som innehåller de symboler som kan nås om man från varje tillstånd i M följer de övergångar som är märkta med c. Funktionen kan beskrivas av följande algoritm: M /0 for each q i M do if s[i].symbol = c M M {q s[i].left } return M Nu återstår endast funktionen EpsilonClosure(M), som givet en tillståndsmängd M skall returnera mängden av de tillstånd man kan nå genom att följa ett godtyckligt antal ε-övergångar från något av tillstånden i M: repeat for each q i M do if s[i].symbol = if s[i].left 1 M M {q s[i].left } if s[i].right 1 M M {q s[i].right } until M does not change anymore return M Tecknet i ovanstående algoritm betecknar blanksteg. För att kunna implementera algoritmerna ovan måste vi kunna representera mängderna F, M och M. Ett enkelt sätt att göra detta är att låta dem representeras av var sin heltalsvektor med n element. En nolla i position i innebär att q i inte tillhör mängden, en etta att motsvarande element tillhör mängden. 4

5 Uppgifter Tips 1. Se till att du förstår de givna algoritmerna. 2. Skriv i en egen modul en procedur Automat() som simulerar en automat enligt beskrivningen ovan. Gränssnittet finns specificerat i filen /info/syntax99/labbar/1/nfasim.h. 3. I filen /info/syntax99/labbar/1/simulera.c finns ett huvudprogram som läser in an automat från fil, och sedan läser in text radvis och provkör simuleringsproceduren på texten. Använd detta huvudprogram för att provköra din simuleringsprocedur. Automaten i exemplet ovan finns i filen /info/syntax99/labbar/1/labb1.exempel. Testa exempelautomaten med några inmatningar. Vilket reguljärt uttryck motsvarar det språk exempelautomaten accepterar? 1. Det är mycket lärorikt att skriva ut innehållet i M lite då och då, och köra simulatorn på några olika indata. På detta sätt kan man få en känsla för hur en ickedeterministisk automat uppför sig. 2. I inledningen står det att varje ickedeterministisk ändlig automat kan skrivas om så att den passar algoritmen i denna laboration. Fundera igenom hur det går till. 3. De automater som behandlas i kursen fungerar normalt lite annorlunda än automaterna i denna laboration: Det normala är att automaten läser hela indata, och accepterar om den står i ett accepterande tillstånd när indata är slut. Fundera igenom hur algoritmerna ovan ska ändras för att man ska få det normala beteendet hos automaterna som simuleras. 5

6 Laboration 2 i Artificiella språk och syntaxanalys, våren 1999 Lexikal analys med Flex Flex är ett utmärkt verktyg om man vill göra lexikala ändringar i en text. I denna laboration ska du utnyttja Flex för att extrahera information ur en enkel databas över redovisningsbokningar och skapa en bokningslista. Databasen för bokningssystemet är på textformat. Först i databasen kommer deklarationer av några variabler. Den enda som är intressant för bokningslistan är variabeln RTID som anger hur många minuter en redovisning tar. Efter deklarationerna följer bokningshuvuden och bokningar. Varje bokningshuvud är en rad som inleds med tecknet > och följs av datum, starttid och sluttid för ett redovisningspass. Sist på raden kommer en sträng som anger i vilken sal redovisningarna ska äga rum och vem som ska ta hand om redovisningarna. Fälten skiljs av semikolon. Efter bokningshuvudet kommer de bokningar som hittills är gjorda till det redovisningstillfället, en bokning per rad. Varje bokningsrad inleds med tecknet : och följs av ordningsnumret (bokning 1 börjar på redovisningstillfällets starttid, bokning 2 börjar RTID minuter senare och så vidare), användarnamn samt vanligt namn på den som bokat in sig på tiden. Följande databasfil finns i filen /info/syntax99/labbar/ 2/bokning.db: NYBOK AVBOK 1.00 RTID 40 >970129;8.10;10.00;Spelhallen;viggo :2;w93-fff;Byåker, Sölve :3;x96-tek;Ekrot, Torkel >970129;13.00;15.00;Sporthallen;viggo :1;a89-abc;Brylé, Anton >970130;8.05;23.00;Grön;enge :1;x94-gmy;Holm-Ström, Gottwolf :2;x94-gmy;Mysk 2, Gottward :3;x94-lbo;Bonn, Lissa :10;y94_ntn;Tessin, Nisse Utmatningen från programmet ska vara en bokningslista som anger namn, datum och tid för varje bokning. Ovanstående bokningsfil ska producera följande lista: Byåker, Sölve Ekrot, Torkel Brylé, Anton Holm-Ström, Gottwolf Mysk 2, Gottward Bonn, Lissa Tessin, Nisse

7 Uppgifter Tips 1. Skriv en översättare enligt ovan i Flex. Programmet behöver inte hantera felaktiga indata. 1. Använd Flex möjlighet att märka de reguljära uttrycken med startvillkor (se avsnittet Start conditions i Flexmanualen i Info i Emacs och tal 2.8 i exempelsamlingen). Inför till exempel ett startvillkor för bokningshuvuden och ett för bokningar. 2. I databasen finns det fyra specialtecken: >, :, ; och \n. Använd dem så mycket som möjligt i dina reguljära uttryck. På så sätt slipper du begränsa innehållet i de olika fälten mer än nödvändigt. 7

8 Laboration 3 i Artificiella språk och syntaxanalys, våren 1999 Rekursiv medåkning Rekursiv medåkning (eng. recursive descent) är en metod att direkt från en grammatik skriva en enkel syntaxanalysator i ett vanligt programspråk, se avsnitt 3.3 i Introduction to compiler construction. I denna laboration ska du modifiera och bygga ut en rekursiv medåkningsanalysator för en enkel räknedosa. Du ska utgå från filen /info/syntax99/labbar/3/casio.c som innehåller en räknedosa med de fem räknesätten addition, subtraktion, multiplikation, division och exponentiering enligt nedanstående EBNF-grammatik. <start> ::= ENDSYM \n <start> <expr> \n <start> <expr> ::= <term> { ( + - ) <term> } <term> ::= <factor> { ( * / ) <factor> } <factor>::= <prim> [ ^ <factor> ] <prim> ::= NUMBERSYM - <prim> ( <expr> ) Uppgifter Tips 1. Se till att du förstår den givna analysatorn i detalj. 2. Bygg ut analysatorn med variabler och en tilldelningssats enligt följande tillägg till grammatiken: <start> ::= <assign> \n <start> <assign> ::= LET <variable> = <expr> <prim> ::= <variable> <variable> ::= VARIABLESYM Du måste alltså lägga till tre symboler LETSYM, ASSIGNSYM och VARIABLESYM till den lexikala analysatorn. Du får själv bestämma hur en variabel ska få se ut, men det räcker om du tillåter enbokstavsnamn. Du måste också hålla reda på variablernas värden i en symboltabell med hjälp av någon lämpligt vald datastruktur. 1. Se till att du följer reglerna för rekursiv medåkning slaviskt: Det ska finnas en procedur för varje ickeslutsymbol, och den proceduren ska titta på nästa tecken i indata, och jämföra det med de relevanta First- och Follow-mängderna. 8

9 Laboration 4 i Artificiella språk och syntaxanalys, våren 1999 Reguljära uttryck med Flex och Bison Denna laboration är en tillämpning av teorin för reguljära uttryck och kontextfria grammatiker. Du ska med hjälp av Flex och Bison skriva ett program som syntaxanalyserar ett reguljärt uttryck och skriver ut en beskrivning av en ickedeterministisk ändlig automat som känner igen språket som det reguljära uttrycket beskriver. När programmet är klart ska man kunna köra det och skriva in ett reguljärt uttryck, till exempel x(uv w)* som motsvarar x(uv w) med bokens notation. Programmet ska då på fil beskriva en ickedeterministisk ändlig automat som accepterar detta språk. Därefter ska man kunna använda programmet från laboration 1 för att simulera automaten och testa om olika inmatningssträngar accepteras. Reguljära uttryck beskrivs i avsnitt 2.6 i Introduction to compiler construction. Grammatiken för reguljära uttryck kan i BNF skrivas på följande sätt. <expression>::= <term> <expression> <term> <term>::= <factor> <term><factor> <factor>::= ( <expression> ) <factor> * v Lexikala regler: v betyder en bokstav (A Ö eller a ö); blanka får förekomma var som helst i uttrycket. Grammatiken ovan har medvetet skrivits vänsterrekursiv för Bisons skull, se sida 134 i Introduction to compiler construction och avsnittet Recursion i kapitlet Bison Grammar Files i Bisonmanualen. Uppgifter 1. Skriv om de kontextfria grammatiska reglerna ovan i Bison. Inför en extra regel < regexp > ::= < expression > och låt regexp vara startsymbol. Som lexikal analysator yylex() ska Flex användas. Låt LETTER vara slutsymbolen som motsvarar en bokstav. Låt huvudprogrammet bara kolla värdet av yyparse() och skriva korrekt (om det var ett riktigt reguljärt uttryck) eller felaktigt beroende på om värdet var 0 eller 1. Programmet är nu en färdig syntaxanalysator (parser) som känner igen språket av (korrekta) reguljära uttryck. Kör Flex och Bison, kompilera och prova att mata in några riktiga och felaktiga reguljära uttryck. För att tala om att ett uttryck är färdiginmatat måste man kanske (beroende på hur yylex() ser ut) trycka på CTRL-D, dvs filslut, först på en rad. 2. Nu ska syntaxanalysatorn byggas ut till en översättare, som givet ett reguljärt uttryck skapar och matar ut en ickedeterministisk automat. Uppgiften är alltså att skapa övergångsrelationen N dvs vektorerna nextch[], next1[] och next2[] från laboration 1 samt mängden F av accepterande tillstånd. Låt state vara en heltalsvariabel som håller reda på indexet för den första oanvända platsen i tillståndsvektorerna nextch[], next1[] och next2[]. Sätt state=1 från början. Starttillståndet, som har nummer 0, kommer att tillverkas sist av allt, i regexp-regeln. Läs om hur ett reguljärt uttryck översätts till en NFA i avsnitt 2.7 i Introduction to compiler construction. Varje regel i din grammatik känner igen ett reguljärt uttryck som är ett deluttryck i hela det reguljära uttrycket. Låt regeln bilda den delautomat som motsvarar det deluttrycket. Denna delautomat har ett starttillstånd och ett sluttillstånd. För att delautomaten ska kunna kopplas ihop med resten av automaten måste dess starttillstånd och sluttillstånd bli kända för de andra reglerna. Detta går att göra genom att regeln som semantiskt värde returnerar en post som innehåller de två heltalen enterstate och exitstate som anger numren på delautomatens starttillstånd och sluttillstånd. Alltså måste varje regel sätta värden på $$.enterstate och $$.exitstate. Skapa ett nytt tillstånd genom att anropa proceduren setstate(). 9

10 expression expression term term term factor term factor factor * factor v v Figur 1. Ovan anges hur en automat som svarar mot ett visst givet reguljärt uttryck byggs upp stegvis. Alla övergångar är epsilonövergångar utom den som läser en bokstav i den nedersta automaten. När man skapar en delautomats sluttillstånd vet man inte ännu vart uthoppet ska gå, utan övergången måste sättas av den regel som senare kombinerar den aktuella delautomaten med nästa delautomat. Enklast blir det om du alltid ser till att uthoppet från delautomaten går från next1[]. Initiera uthoppsövergången till 1 så är det lätt att se på automaten om något uthopp förblir otilldelat. Figur 1 talar för varje regel om hur motsvarande ändliga automat kan byggas. När vektorerna är färdiguppbyggda återstår bara att skriva ut dem på fil. Detta kan till exempel göras i main() efter anropet av yyparse(). När programmet är klart ska det kunna producera filer som kan läsas av simulatorn från laboration 1. Titta i de givna källkodsfilerna från laboration 1 för att ta reda på indatafilens format. Prova några reguljära uttryck och kolla att allt fungerar. Det är inte nödvändigt med någon felhantering. Tips 1. Det kan vara lite bökigt att få Flex och Bison att arbeta ihop som man vill, i synnerhet som man i både Flex- och Bison-filen behöver veta vilka slutsymboler som används. För att göra det lättar att komma igång finns det skelettfiler på kurskatalogen. Dessa filer innehåller deklarationer som gör att Flex och Bison samarbetar på ett smidigt sätt. I dessa filer finns också några kodsnuttar för att hjälpa dig på traven. Notera att några av raderna ska tas bort när du gör deluppgift Du ska inte använda den interna Bison-variabeln yylval i Bisonfilen. Den är bortabstraherad använd de olika $-variablerna istället. 10

11 Laboration 5 i Artificiella språk och syntaxanalys, våren 1999 En valfri översättare I denna laboration ska du få tillämpa det du har lärt dig i kursen på en egen praktiskt användbar översättare. Du ska antingen skriva en översättare från en välkänd notation till en annan eller en granskare som kollar syntaxen och ger vettiga felmeddelanden om inmatningen är felaktig. Du får själv välja uppgift bland förslagen nedan. Det är tillåtet att komma med egna förslag; de måste godkännas av den kursansvarige. Ditt program ska använda både lexikal och syntaktisk analys, men det är inget krav att du använder just Flex för den lexikala analysen och Bison för den syntaktiska. På kursens hemsida i webben finns det länkar till några olika syntaxanalyseringsverktyg. Kom ihåg att du inte kan förvänta dig att få hjälp av handledarna med andra verktyg än dem som använts i kursen. Uppgift 1. Välj en av nedanstående uppgifter. Uppgifterna 1 4 består i princip av att du själv ska utveckla en grammatik eller både en notation och en grammatik, och sedan tillämpa det du utvecklat. I uppgifterna 5 8 ska du sätta dig in i en färdig grammatik, som kan vara ganska stor, och sedan använda grammatiken för att lösa uppgiften. 2. Skriv ner en kravspecifikation för programmet. Eftersom uppgifterna ibland är vagt formulerade kan det finnas en del detaljer som bör fyllas i. Om du har valt någon uppgift som inte står med i listan nedan måste du visa upp din specifikation för någon av lärarna för att få klartecken att göra uppgiften. Annars räcker det att du tar med specifikationen när du redovisar programmet. 3. Ta reda på grammatiker för de språk ditt program ska behandla. Sök gärna information i Internet. På kursens hemsida finns en del pekare till användbar information. Du kanske till och med kan hitta en färdig grammatik i det format som det syntaxanalyseringsverktyg du valt vill ha. Däremot får du förstås inte kopiera färdiga program det är du som ska lösa uppgiften och inte någon annan. 4. Skriv med hjälp av det syntaxanalyseringsverktyg du valt ett program som löser uppgiften (det vill säga uppfyller kravspecifikationen). Programmet måste hålla god kvalitet (vara korrekt, effektivt, lättläst, flexibelt och robust). 5. Skriv en enkel användarhandledning för programmet. 6. Du kommer att redovisa för en handledare på kursen eller för den kursansvarige. Redovisningen är indelad i två delar. Den första delen, som är femton minuter lång, består av att du presenterar ditt program. Det ska då framgå vilka verktyg du har använt, vilka designval du har gjort samt vilka delar ditt program består av. Under den andra delen, som är tio minuter lång, kommer du att få svara på frågor angående ditt program. Du ska känna till ditt programs funktion i detalj och dessutom kunna motivera de eventuella designval du har gjort. Förslag på uppgifter 1. Verifiering av SGML-dokument. Verifieraren skall läsa in en DTD, som beskriver en godtycklig SGML-instans, och sedan verifiera dokument utifrån denna DTD. Prova gärna din verifierare med DTD:er för olika versioner av HTML. 2. En bättre Makedepend. Unix-programmet Makedepend går igenom alla c- och h-filer i en katalog och skapar en lista av beroenden som automatiskt stoppas in i filen Makefile, om den finns i katalogen. Följande är saxat från man-bladet till Makedepend: 11

12 BUGS If you do not have the source for cpp, the Berkeley C preprocessor, then makedepend will be compiled in such a way that all #if directives will evaluate to true regardless of their actual value. This may cause the wrong #include directives to be evaluated. Makedepend should simply have its own parser written for #if expressions. Du ska skriva en Makedepend som inte har dessa brister. Din Makedepend ska alltså innehålla en egen parser för #if-uttryck, och den ska alltid inkludera och analysera de #include-filer som inte är systemfiler. 3. Förbättrad Flex- och Bison-syntax. Uppfinn en snygg och lättläst syntax som gör det möjligt att skriva både lexikala och syntaktiska regler i en fil. Skriv sedan ett program som läser in en sådan fil och skriver ut en Flex- och en Bison-fil, som sedan kan kompileras på vanligt sätt. 4. Skriv en M3flex, dvs en variant av Flex som producerar kod i Modula-3. Du får själv hitta på en syntax om du vill, men det är fullt tillåtet att använda en syntax liknande den i Flex. M3flex ska generara en modul Scanner som innehåller proceduren GetToken, så att den genererade lexikala analysatorn kan användas av M3bison. Procedurhuvudet skall vara PROCEDURE GetToken(VAR lval: T): INTEGER RAISES {Error}; där särfallet Error ska genereras vid lexikala fel. Antag att Scanner.i3 genereras av M3bison, och anpassa innehållet i Scanner.m3 efter detta. Analysatorn behöver inte klara av det som med Flexterminologi kallas startvillkor (Start Conditions). 5. Skriv ett program som översätter från standard-pascal till C eller C++. Översättaren behöver varken klara av att hantera mängder, variantdelar i poster, procedurer i procedurer eller WITH-satser. Ditt program ska upptäcka om det ursprungliga Pascal-programmet inte är syntaktiskt korrekt, och i sådant fall avbryta med någon lämplig felutskrift. 6. Programförskönare för Javakod, Pascalkod eller liknande (dock ej C eller C++). Förskönaren skall bryta för långa rader på syntaktiskt lämpliga ställen, och indentera enligt någon lämplig konvention. Om programmet du försöker indentera inte är syntaktiskt korrekt, ska programförskönaren upptäcka detta och avbryta indenteringen. 7. Vacker utskrift av Javakod, Pascalkod eller liknande (dock ej C eller C++). Programmet ska ta en källkodsfil, och producera en TEX- eller LATEX-fil som ger en vackert formatterad utskrift av källkoden. Exempelvis bör kommentarer, nyckelord, variabler och preprocessordirektiv ges olika utseende. Om programmet du försöker behandla inte är syntaktiskt korrekt, ska programförskönaren upptäcka detta och avbryta indenteringen. 8. Konvertera Fortran till C. Det räcker om ditt program klarar av att översätta från Fortran 77 till ett C-program, som får innehålla goto-satser. Ditt program ska upptäcka om det ursprungliga Fortranprogrammet inte är syntaktiskt korrekt, och i sådant fall avbryta med någon lämplig felutskrift. 12

2D1372 Artificiella språk och syntaxanalys

2D1372 Artificiella språk och syntaxanalys VK Viggo Kann 1997-01-22 A NADA Laborationer i 2D172 Artificiella språk och syntaxanalys våren 1997 Namn... Personnr... Labb 1 Godkänt den... Kvitteras... Timmar... Labb 2 Godkänt den... Kvitteras... Timmar...

Läs mer

Övningsexempel i Artificiella språk och syntaxanalys 2D1373

Övningsexempel i Artificiella språk och syntaxanalys 2D1373 Numerisk analys och datalogi Övningsexempel i Artificiella språk och syntaxanalys 2D1373 Lars Engebretsen Mikael Goldman Viggo Kann 12 februari 2002 2 Innehåll 0 Inledning 7 0.1 Ändliga automater.........................

Läs mer

Föreläsning 7: Syntaxanalys

Föreläsning 7: Syntaxanalys DD2458, Problemlösning och programmering under press Föreläsning 7: Syntaxanalys Datum: 2007-10-30 Skribent(er): Erik Hammar, Jesper Särnesjö Föreläsare: Mikael Goldmann Denna föreläsning behandlade syntaxanalys.

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

lex källkod lex.l lexkompilator lex.yy.c C- kompilator lex.yy.c a.out sekvens av tokens a.out input specifikation av tokens mha reguljära uttryck

lex källkod lex.l lexkompilator lex.yy.c C- kompilator lex.yy.c a.out sekvens av tokens a.out input specifikation av tokens mha reguljära uttryck input läs tecken stoppa tillbaka ett tecken skicka ett token och dess attribut parser Eliminera white space och kommentarer Gruppera lästa tecken till tokens identifierare, nyckelord, numeriska konstanter,

Läs mer

MÄLARDALENS HÖGSKOLA. CD5560 Formella språk, automater och beräkningsteori. Användarmanual. för simulatorn JFLAP

MÄLARDALENS HÖGSKOLA. CD5560 Formella språk, automater och beräkningsteori. Användarmanual. för simulatorn JFLAP MÄLARDALENS HÖGSKOLA CD5560 Formella språk, automater och beräkningsteori Användarmanual för simulatorn JFLAP Innehållsförteckning Att komma igång med JFLAP... 3 Att köra en sträng... 5 Att köra flera

Läs mer

Automatateori (2) Idag: Sammanhangsfria språk. Dessa kan uttryckas med Grammatik PDA

Automatateori (2) Idag: Sammanhangsfria språk. Dessa kan uttryckas med Grammatik PDA Automatateori (2) Idag: Sammanhangsfria språk Dessa kan uttryckas med Grammatik PDA Grammatik = språkregler Ett mer kraftfullt sätt att beskriva språk. En grammatik består av produktionsregler (andra ord

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

Inlämningsuppgift MiniPlotter

Inlämningsuppgift MiniPlotter LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap EDAA01 Programmeringsteknik fördjupningskurs Inlämningsuppgift MiniPlotter I den här uppgiften ska ett program som ritar grafer av matematiska funktioner

Läs mer

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen Tentamen för teknisk kemi, 10p, moment 1 29 november 1999 Skrivtid 9-15 Hjälpmedel: av följande böcker. - U. Bilting och J. Skansholm: Vägen till C - A. Kelley & I. Pohl: A Book on C Maxpoäng: Gräns för

Läs mer

Reguljära uttryck Grammatiker Rekursiv nedåkning Allmänna kontextfria grammatiker. Syntaxanalys. Douglas Wikström KTH Stockholm

Reguljära uttryck Grammatiker Rekursiv nedåkning Allmänna kontextfria grammatiker. Syntaxanalys. Douglas Wikström KTH Stockholm Syntaxanalys Douglas Wikström KTH Stockholm popup-help@csc.kth.se Reguljära uttryck Reguljära uttryck förutsätter att en mängd bokstäver är givna, ett så kallat alfabet, som oftast betecknas med Σ. Uttryck

Läs mer

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin DD1361 Programmeringsparadigm Formella Språk & Syntaxanalys Föreläsning 4 Per Austrin 2015-11-20 Idag Rekursiv medåkning, fortsättning Olika klasser av språk och grammatiker Parsergeneratorer Sammanfattning

Läs mer

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin DD1361 Programmeringsparadigm Formella Språk & Syntaxanalys Föreläsning 3 Per Austrin 2015-11-13 Huvudkoncept hittils: Snabb repetition Formellt språk en mängd strängar Reguljära språk den klass av formella

Läs mer

Grundläggande datalogi - Övning 9

Grundläggande datalogi - Övning 9 Grundläggande datalogi - Övning 9 Björn Terelius January 30, 2009 Ett formellt språk är en (oftast oändlig) mängd strängar. Språket definieras av en syntax som är en samling regler för hur man får bilda

Läs mer

DAB760: Språk och logik

DAB760: Språk och logik DAB76: Språk och logik /4: Finita automater och -7 reguljära uttryck Leif Grönqvist (leif.gronqvist@msi.vxu.se) Växjö Universitet (MSI) GSLT (Sveriges nationella forskarskola i språkteknologi) Göteborg

Läs mer

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15 TENTAMEN I PROGRAMSPRÅK -- DVG C01 140605 kl. 08:15-13:15 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Bilaga A: BNF-definition Betygsgräns: Kurs: Max 60p, Med beröm godkänd 50p, Icke utan beröm godkänd

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 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen. Föreläsning 9: Turingmaskiner och oavgörbarhet Turingmaskinen Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen. Data är ett oändligt långt band där nollor och ettor står

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

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

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Introduktion till formella metoder Programmeringsmetodik 1. Inledning Introduktion till formella metoder Programmeringsmetodik 1. Inledning Fokus på imperativa program (ex. C, Java) program betyder härefter ett imperativt program Program bestäms i en abstrakt mening av hur

Läs mer

Idag: Reguljära språk Beskrivs av Reguljära uttryck DFA Grammatik

Idag: Reguljära språk Beskrivs av Reguljära uttryck DFA Grammatik Idag: Reguljära språk Beskrivs av Reguljära uttryck DFA Grammatik Först några definitioner: Alfabet = en ändlig mängd av tecken. Ex. {0, 1}, {a,b}, {a, b,..., ö} Betecknas ofta med symbolen Σ Sträng =

Läs mer

Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen. Turingmaskiner och oavgörbarhet Turingmaskinen Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen. Data är ett oändligt långt band där nollor och ettor står skrivna: Oändligt

Läs mer

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift ) 2008-03-12.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Du skall skriva ett program som läser igenom en textfil som heter FIL.TXT och skriver ut alla rader där det står ett decimaltal först på raden. Decimaltal

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

i=1 c i = B och c i = a i eller c i = b i för 1 i n. Beskriv och analysera en algoritm som löser detta problem med hjälp av dynamisk programmering.

i=1 c i = B och c i = a i eller c i = b i för 1 i n. Beskriv och analysera en algoritm som löser detta problem med hjälp av dynamisk programmering. Algoritmer och Komplexitet ht 8 Övning 3+4 Giriga algoritmer och Dynamisk programmering Längsta gemensamma delsträng Strängarna ALGORITM och PLÅGORIS har den gemensamma delsträngen GORI Denlängsta gemensamma

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Värmedistribution i plåt

Värmedistribution i plåt Sid 1 (6) Värmedistribution i plåt Introduktion Om vi med konstant temperatur värmer kanterna på en jämntjock plåt så kommer värmen att sprida sig och temperaturen i plåten så småningom stabilisera sig.

Läs mer

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34 Tentamen Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Lördagen den 30 november 2002 kl 9.00 14.00, salar E33, E34 Inga hjälpmedel 30 poäng ger säkert godkänt, 40 poäng ger betyg 4 50 poäng ger

Läs mer

Grammatik. BNF-grammatik

Grammatik. BNF-grammatik Grammatik Objektorienterad modellering och diskreta strukturer / design Grammatik Reguljära uttryck klarar inte av att beskriva mängden av aritmetiska uttryck. Lennart Andersson Reviderad 2010 10 07 2010

Läs mer

Kontextfria grammatiker

Kontextfria grammatiker Kontextfria grammatiker Kontextfria grammatiker 1 Kontextfria grammatiker En kontextfri grammatik består av produktioner (regler) på formen S asb S T T # Vänsterledet består av en icke-terminal (variabel)

Läs mer

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011, Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1 Måndagen den 10 januari 2011, 8.15 12.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika teman

Läs mer

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Laboration 1. kompilera-ikonen exekvera-ikonen Programmerade system I1 Syfte Laboration 1. Syftet med denna laboration är dels att göra dej bekant med de verktyg som kan vara aktuella i programmeringsarbetet, dels ge en första inblick i att skriva

Läs mer

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen C++ Funktioner 1 Teori När programmen blir större och mer komplicerade är det bra att kunna dela upp programmet i olika delar som gör specifika saker, vilket kan göra programmet mer lättläst. Ett sätt

Läs mer

Dynamisk programmering

Dynamisk programmering DD2354, Algoritmer och komplexitet, 27 Uppgifter till övning 4 Dynamisk programmering Talföljder Givet är två följder av positiva heltal a,a 2,,a n och b,b 2,, b n där alla tal är mindre än n 2 samt ett

Läs mer

Övning 5 - Tillämpad datalogi 2013

Övning 5 - Tillämpad datalogi 2013 /afs/nada.kth.se/home/w/u1yxbcfw/teaching/13dd1320/exercise5/exercise5.py October 1, 2013 1 0 # coding : latin Övning 5 - Tillämpad datalogi 2013 Automater, reguljära uttryck, syntax Sammanfattning Idag

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

Alfabeten, strängar och språk. String

Alfabeten, strängar och språk. String Alfabeten, strängar och språk Objektorienterad modellering och diskreta strukturer / design Språk och reguljära uttryck Ett alfabet är en ändlig icketom mängd vars element kallas symboler. Lennart Andersson

Läs mer

Tentamen, EDAA10 Programmering i Java

Tentamen, EDAA10 Programmering i Java LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDAA10 Programmering i Java 2019 08 21, 08.00 13.00 Anvisningar: Preliminärt ger uppgifterna 25 + 15 + 5 = 45 poäng. För godkänt betyg

Läs mer

Block 2 Algebra och Diskret Matematik A. Följder, strängar och tal. Referenser. Inledning. 1. Följder

Block 2 Algebra och Diskret Matematik A. Följder, strängar och tal. Referenser. Inledning. 1. Följder Block 2 Algebra och Diskret Matematik A BLOCK INNEHÅLL Referenser Inledning 1. Följder 2. Rekursiva definitioner 3. Sigmanotation för summor 4. Strängar 5. Tal 6. Övningsuppgifter Referenser Följder, strängar

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

Laboration 1 Introduktion till Visual Basic 6.0

Laboration 1 Introduktion till Visual Basic 6.0 Laboration 1 Introduktion till Visual Basic 6.0 Förberedelse Förbered dig genom att läsa föreläsningsanteckningar och de kapitel som gåtts igenom på föreläsningarna. Läs även igenom laborationen i förväg.

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 3-4 Innehåll

Föreläsning 3-4 Innehåll Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå

Läs mer

Obligatorisk uppgift: Numerisk kalkylator

Obligatorisk uppgift: Numerisk kalkylator Informationsteknologi Tom Smedsaas 22 augusti 2018 Obligatorisk uppgift: Numerisk kalkylator Programmet skall läsa in aritmetiska uttryck samt beräkna och skriva ut deras värden. Programmet ska läsa från

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

Linköpings Tekniska Högskola Instutitionen för Datavetenskap (IDA) Torbjörn Jonsson, Erik Nilsson Lab 2: Underprogram

Linköpings Tekniska Högskola Instutitionen för Datavetenskap (IDA) Torbjörn Jonsson, Erik Nilsson Lab 2: Underprogram Mål Lab 2: Underprogram Följande laboration introducerar underprogram; procedurer, funktioner och operatorer. I denna laboration kommer du att lära dig: Hur man skriver underprogram och hur dessa anropas.

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 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer

Läs mer

Objektorienterad programmering D2

Objektorienterad programmering D2 Objektorienterad programmering D2 Laboration nr 2. Syfte Att få förståelse för de grundläggande objektorienterade begreppen. Redovisning Källkoden för uppgifterna skall skickas in via Fire. För senaste

Läs mer

Uppgift 1 (grundläggande konstruktioner)

Uppgift 1 (grundläggande konstruktioner) Uppgift 1 (grundläggande konstruktioner) a) Skriv ett program som låter användaren mata in 7 heltal och som gör utskrifter enligt nedanstående körexempel. Mata in 7 heltal: 1 0 0 3 1 1 1 Tal nr 2 var en

Läs mer

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1. Schenker har interna system som handhar information som är av intresse för våra kunder/partners. Idag finns ett flertal av dem tillgängliga via Internet, sk Online-tjänster. Dessa erbjuder inte bara hämtning

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

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

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

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1 Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut

Läs mer

kl Tentaupplägg

kl Tentaupplägg Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer

Läs mer

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

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera först talet 37 med 2. Använd heltalsdivision. Det ger kvoten

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

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Laboration 1. kompilera-ikonen exekvera-ikonen Syfte Laboration 1. Objektorienterad programmering, Z1 Syftet med denna laboration är dels att göra dej bekant med de verktyg som kan vara aktuella i programmeringsarbetet, dels ge en första inblick i

Läs mer

Inledande programmering med C# (1DV402) Summera med while"-satsen

Inledande programmering med C# (1DV402) Summera med while-satsen Summera med while"-satsen Upphovsrätt för detta verk Inledande programmering med C# (1DV402) Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får

Läs mer

TDP005 Projekt: Objektorienterat system

TDP005 Projekt: Objektorienterat system . TDP005 Projekt: Objektorienterat system Laboration i Make och CMake Författare Filip Strömbäck Höstterminen 2016 Version 1.0 2016-10-04 Introduktion I denna lab kommer vi titta närmare på två verktyg

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

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Övningsuppgifter till föreläsning 2 Variabler och uttryck Sid 1 (5) Övningsuppgifter till föreläsning 2 Variabler och uttryck Syfte Syftet med övningsuppgifterna är att träna på: Aritmetik, variabler, tilldelning, scanf och printf Generellt Diskutera gärna uppgifterna

Läs mer

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4 Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 014-015 Denna lektion ska vi studera rekursion. Lektion 4 Principen om induktion Principen om induktion är ett vanligt sätt att bevisa

Läs mer

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 1 2 Grundläggande datavetenskap, IT1 Perspektiv på datateknik, D1 Perspektiv på datavetenskap, C1 Breddföreläsning orientering om: formella språk grammatik parsing Att läsa mer: Brookshear, Computer Science

Läs mer

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Dataingenjörsprogrammet, elektroingenjörsprogrammet och medicinsk teknik KTH Skolan för Teknik och Hälsa Redovisning: Se Kurs-PM om hur redovisningen

Läs mer

En kort text om programmering i C.

En kort text om programmering i C. En kort text om programmering i C C skapades 1972 av Brian Ritchie och Dennis Kerighan på Bell Labs i USA Det blev det språk som är mest använt genom tiderna Det finns många olika språk Pascal, FORTH,

Läs mer

kind spelling Scanning

kind spelling Scanning sats terminal Kompilatorteknik 2015 källprogram! Exempel program let var v : integer; const t ~ 3 in v := v + t kind spelling Scanning LET let föreläsningsfilmer Scannerns eller den lexikala analysatorns

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

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

Inlämningsuppgifter, EDAF30, 2015

Inlämningsuppgifter, EDAF30, 2015 LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Programmering i C++ Inlämningsuppgifter, EDAF30, 2015 Det finns två deluppgifter som båda ska lösas: 1. skriv ett program för att hantera bankkonton

Läs mer

NetBeans 5.5. Avsikt. Projektfönster

NetBeans 5.5. Avsikt. Projektfönster NetBeans 5.5 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

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

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll, 040110.

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll, 040110. 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Denna tenta kommer att vara färdigrättad On 14/1-04 och kan då hämtas på mitt

Läs mer

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

Innehållsförteckning. Exempel. Åtkomst & användarhandledning Framsidan Framsidan på din labrapport kan du utforma ganska fritt. Tänk bara på att den ska vara läsbar, och innehålla (minst) följande information: Ditt namn Din e-mail adress här på CS! Kursens namn

Läs mer

Objektorienterad modellering och diskreta strukturer. 13. Problem. Sven Gestegård Robertz. Datavetenskap, LTH

Objektorienterad modellering och diskreta strukturer. 13. Problem. Sven Gestegård Robertz. Datavetenskap, LTH Objektorienterad modellering och diskreta strukturer 13. Problem Sven Gestegård Robertz Datavetenskap, LTH 2014 Rekaputilation Vi har talat om satslogik och härledning predikatlogik och substitution mängder

Läs mer

Använda Python Laboration 1 GruDat, DD1344

Använda Python Laboration 1 GruDat, DD1344 Använda Python Laboration 1 GruDat, DD1344 Örjan Ekeberg 14 oktober 2008 Målsättning Målet med denna laboration är att du ska prova på att använda Python, framförallt interativt. Du ska också lära dig

Läs mer

Översikt. Installation av EasyPHP 1. Ladda ner från http://www.easyphp.org/ Jag använder Release 5.3.4.0 2. Installera EasyPHP.

Översikt. Installation av EasyPHP 1. Ladda ner från http://www.easyphp.org/ Jag använder Release 5.3.4.0 2. Installera EasyPHP. Laboration 1 Översikt 1. Att komma igång med laborationsmiljön a. installera Aptana Studio 3 b. Installera EasyPHP 2. Testa lite programmering a. Testa enkla uppgifter b. Testa automatiskt 3. Skapa inloggningsformulär

Läs mer

Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10. Skriv bara på framsidan av varje papper.

Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10. Skriv bara på framsidan av varje papper. Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10 Skrivtid: 0800-1300 Inga hjälpmedel. Tänk på följande Maximal poäng är 40. För betygen 3 krävs 18 poäng. För betygen 4, 5 kommer något

Läs mer

Det finns många flaggor till g++,

Det finns många flaggor till g++, C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se Inge Frick, inge@nada.kth.se Alexander Baltsatsis hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m.

Läs mer

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel Data- och Programstrukturer Provmoment: Ladokkod: Tentamen ges för: Omtentamen NDP011 Systemarkitektprogrammet 7,5 högskolepoäng Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum:

Läs mer

Övning från förra gången: readword

Övning från förra gången: readword (9 september 2010 T4.1 ) Övning från förra gången: readword /** readword.c * * int readword(char w[], int n) { * * Läser tecken tills en bokstav påträffas. * Läser och lagrar sedan högst n-1 bokstäver

Läs mer

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

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 Linköpings universitet Institutionen för datavetenskap, IDA Olle Willén mars 2010 Tentamen TDDB53 TENTAMEN TDDB53 (provkod TEN2) den 7 april 2010 kl 8 12 Jour: Emil Nielsen, tel 070 499 89 88 Hjälpmedel:

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

Fredag 10 juni 2016 kl 8 12

Fredag 10 juni 2016 kl 8 12 KTH CSC, Alexander Baltatzis DD1320/1321 Lösningsförslag Fredag 10 juni 2016 kl 8 12 Hjälpmedel: En algoritmbok (ej pythonkramaren) och ditt eget formelblad. För betyg E krävs att alla E-uppgifter är godkända,

Läs mer

HI1024 Programmering, grundkurs TEN2 2015-10-30

HI1024 Programmering, grundkurs TEN2 2015-10-30 HI1024 Programmering, grundkurs TEN2 2015-10-30 KTH STH Haninge 8.15-13.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King

Läs mer

Kompilatorer och interpretatorer

Kompilatorer och interpretatorer 1 of 6 Örebro universitet Institutionen för teknik Thomas Padron-McCarthy (Thomas.Padron-McCarthy@oru.se) Tentamen i Kompilatorer och interpretatorer för Dataingenjörsprogrammet m fl lördag 7 november

Läs mer

1 Funktioner och procedurell abstraktion

1 Funktioner och procedurell abstraktion 1 Funktioner och procedurell abstraktion Det som gör programkonstruktion hanterlig och övergripbar och överhuvudtaget genomförbar är möjligheten att dela upp program i olika avsnitt, i underprogram. Vår

Läs mer

Filer och structer Del 2

Filer och structer Del 2 Filer och structer Del 2 Agenda: Typedef Alternativ strängläsning från fil Binära data Lagra Läsa Oväntat slut på input Spara till nästa programstart Typedef Kan användas till att sätta ett eget namn på

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

Exempelsamling Assemblerprogrammering

Exempelsamling Assemblerprogrammering Exempelsamling Assemblerprogrammering I uppgifterna nedan utgå från följande programskelett: #include.data var1:.word 12 var2:.word 19 sum: prod:.float 0.set noreorder.text.globl start.ent start

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

Inlämningsuppgift 1, Digsim

Inlämningsuppgift 1, Digsim Inlämningsuppgift 1, Digsim Specifikation Skriv ett program som utför addition av heltal (positiva eller negativa) i binär form med hjälp av digitala grindar, som programmet ska simulera. Programmet ska

Läs mer

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) Grundläggande programmering med C# Provmoment: Ladokkod: Tentamen ges för: 7,5 högskolepoäng TEN1 NGC011 Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) (Ifylles av student) (Ifylles av student)

Läs mer

Föreläsning 7: Syntaxanalys

Föreläsning 7: Syntaxanalys DD2458, Problemlösning och programmering under press Föreläsning 7: Syntaxanalys Datum: 2009-10-27 Skribent(er): Carl-Fredrik Sundlöf, Henrik Sandström, Jonas Lindmark Föreläsare: Fredrik Niemelä 1 Syntaxanalys

Läs mer

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret 2014-2015. Lektion 1

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret 2014-2015. Lektion 1 Kattis Lektion 1 I kursen används onlinedomaren Kattis (från http://kattis.com) för att automatiskt rätta programmeringsproblem. För att få ett konto på Kattis anmäler du dig på Programmeringsolympiadens

Läs mer

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock Inledning Vad är ett datorprogram, egentligen? Olika språk Problemlösning och algoritmer 1 (14) Varför använda en dator? Genom att variera de program som styr datorn kan den användas för olika uppgifter.

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

TUTORIAL: SAMLING & KONSOLL

TUTORIAL: SAMLING & KONSOLL TUTORIAL: SAMLING & KONSOLL Denna tutorial är en fortsättning på den tutorial där vi skapade klassen Car och sedan objekt av denna klass. Vi skall nu lära oss att lagra dessa objekt i en samling och även

Läs mer