Föreläsning 7: Syntaxanalys
|
|
- Kjell Gunnarsson
- för 9 år sedan
- Visningar:
Transkript
1 DD2458, Problemlösning och programmering under press Föreläsning 7: Syntaxanalys Datum: Skribent(er): Carl-Fredrik Sundlöf, Henrik Sandström, Jonas Lindmark Föreläsare: Fredrik Niemelä 1 Syntaxanalys Syntaxanalys går ut på att analysera en text och bestämma dess grammatiska struktur med avseende på en formell grammatik. Vi kan beskriva syntaxanalysen som en följd av olika steg. Följande bild beskriver de olika stegen. Textsträng (Lexikal analys) Tokenström (Syntaxanalys) Syntaxträd (Semantisk analys) Resultat Lexikal analys. Indata är en textsträng eller en textström. I det här steget delas indata upp i intressanta tokens. För t.ex. naturligt språk skulle den här delen gå ut på att dela upp en text i enskilda ord. Resultatet av det här steget representeras av en så kallad tokenström. Syntaxanalys. Målet med det här steget är att identiera de tokens vi skapade under den lexikala analysen och skapa ett syntaxträd. I exemplet med naturligt språk går det här steget ut på att grammatiskt analysera tokenströmmen och skapa grammatiska träd för meningarna i texten. Semantiskanalys. Det här steget går ut på att bearbeta resultatet av syntaxanalysen till en mer lättläslig form. Det nya resultatet är menat att modellera betydelsen eller resultatet. Steget är inte nödvändigt men är ofta användbart eftersom det underlättar tolkning av resultatet. 2 Grammatiker I syntaxanalyssteget använder vi oss av någon typ av grammatik för att kunna analysera vår tokenström. En grammatik innehåller en mängd slutsymboler och en mängd ickeslutsymboler. En slutsymbol är en sträng i indatan som inte går att bryta ned i delar utan att det förlorar sin betydelse. En ickeslutsymbol kan ses som typ i grammatiken, t.ex. substantiv för naturligt språk. I den här kursen tas kontextfria grammatiker upp. Kontextfri betyder att en regel i grammatiken inte beror av kontexten i vilken regeln appliceras. I praktiken betyder detta att vänster ledet i produktionsreglerna endast innehåller en ickeslutsymbol. Så formen för produktionsreglerna blir: 1
2 2 DD2458 Popup HT 2009 <NT> = S Där <NT> är en ickeslutsymbol och S är en eller era ickeslutsymboler eller slutsymboler. Det här tolkas som att om vi har S i indatan så kommer vi skapa en nod i syntaxträdet med alla delar i S som barn. På det här sättet bygger vi upp syntaxträdet med hjälp av grammatiken. 3 Rekursiv medåkning Istället för att rakt av konstruera ett syntaxträd kan vi använda oss av rekursiv medåkning. Algoritmen fungerar endast på klassen av LL(k) kontextfria grammatiker. LL(k) står för Left to right, Leftmost derivation och k'et innebär att vi behöver titta k tokens i förväg för att kunna avgöra vilken produktionsregel vi ska använda. En rekursiv medåknings implementation går i princip ut på att man konstruerar en funktion för varje ickeslutsymbol som det nns en produktionsregel för. Ofta är det så att det existerar er än en enskild produktionsregel för en viss ickeslutsymbol. Man behöver då i funktionen titta k steg i förväg för att avgöra vilken av produktionsreglerna som skall utvecklas. Avsnitt 4.3 ger ett exempel på hur rekursiv medåkning fungerar. 4 Exempel - Molekylvikt I följande exempel skall vi beräkna vikten för en molekyl givet molekylens kemiska formel samt en lista med atomvikter. Följande tabell visar atomernas vikt. Atom Vikt H 1 O 16 N 14 C 12 Molekylvikten för t.ex. H 2 O är = 18. Vi skall nu skapa ett program som beräknar dessa vikter. Problemet är att inte alla molekyler är så snälla som H 2 O. Nitroglycerin har den kemiska formeln C 3 H 5 (NO 3 ) 3 och får då molekylvikten ( ) 3 = 227. Så hur analyserar vi detta? 4.1 Lexikal analys Indata till programmet för C 3 H 5 (NO 3 ) 3 är på formen C3H5(NO3)3. Den lexikala analysen kommer nu göra om indata till en ström av tokens. Vi kommer att ha följande tokens:
3 Syntaxanalys 3 atom - En atom. En versal följt av noll eller en gemen blir en atom. int - Ett tal. lpar - En vänsterparentes. rpar - En högerparentes. $ - Slut på indata. Vissa tokens kommer vi knyta ett värde till. I detta fall kommer atom och int få ett värde knutet till sig. Indata, C 3 H 5 (NO 3 ) 3, kommer att översättas till följande ström av tokens: atom int atom int lpar atom atom int rpar int $ C 3 H 5 N O 3 3 Strömmen av tokens kan nu analyseras med hjälp av en kontextfri grammatik. 4.2 Kontextfri grammatik För att beskriva hur molekyler är uppbyggda kan vi använda oss av följande kontextfria grammatik: <start> = <molekyl>$ <molekyl> = <del> <molekyl> <molekyl> = <del> <del> = <enhet> int <del> = <enhet> <enhet> = lpar <molekyl> rpar <enhet> = atom Genom grammatiken kan vi bygga följande syntaxträd för C 3 H 5 (NO 3 ) 3.
4 4 DD2458 Popup HT 2009 För att få reda på värdet av molekylvikten är det nu bara att traversera trädet och beräkna vikterna allteftersom. Att först bygga trädet och sedan traversera det är tidskrävande och det är i detta fall bättre att använda sig av rekursiv medåkning för att beräkna molekylvikten. 4.3 Rekursiv medåkning Vi skapar nu funktioner för alla ickeslutsymboler i grammatiken. Vår grammatik är av typen LL(1) och vi behöver således titta på en token i förväg. Vidare förutsätter vi att det nns tre funktioner, peektoken() som kollar vad nästa token är, consume() som förbrukar en token samt slåuppatomvikt() som retunerar atomvikten för en atom. Genom att funktionerna rekursivt kallar på varandra kommer vi beräkna molekylvikten allteftersom. En token har två attribut, type och val. Följande funktioner behövs.
5 Syntaxanalys 5 start() (1) r = molekyl() (2) t = peektoken() (3) om t.typ = $ (4) return r (5) annars (6) FEL! molekyl() (1) r = DEL() (2) t = peektoken() (3) om t.typ = atom, lpar (4) return r + molekyl() (5) annars om t.typ = $, rpar (6) return r (7) annars (8) FEL! del() (1) r = ENHET() (2) t = peektoken() (3) om t.typ = int (4) consume() (5) return r t.val (6) annars om t.typ = atom, lpar (7) return r (8) annars (9) FEL!
6 6 DD2458 Popup HT 2009 ENHET() (1) t = peektoken() (2) om t.typ = atom (3) consume() (4) return slåuppatomvikt(t.val) (5) annars om t.typ = lpar (6) consume() (7) r = MOLEKYL() (8) t = peektoken() (9) om t.typ = rpar (10) consume() (11) return r (12) annars (13) FEL! (14) annars (15) FEL! 5 Cocke-Younger-Kasamis algoritm Cocke, Younger och Kasamis konstruerade en algoritm som givet en kontextfri grammatik på Chomsky Normal Form (CNF), avgöra om en given sträng går att generera med den grammatiken. För att en grammatik ska vara i CNF så måste dess produktionsregler vara på en av följande former: <l> = <r 1 ><r 2 > där <r 1 > och <r 2 > är ickeslutsymboler. <l> = x där x är en slutsymbol. Alla kontextfria grammatiker kan uttryckas i CNF. Om en regel är på formen <l> = x<r 1 > där x är en slutsymbol och <r 1 > är en ickeslutsymbol skapar vi en ny ickeslutsymbol <r 2 > och inför produktionsregeln <r 2 > = x och substituerar så vi får: <l> = <r 2 ><r 1 > <r 2 > = x På liknande sätt kan vi dela upp långa produktionsregler i mindre genom att införa nya ickeslutsymboler och substituera. När vi har grammatiken i CNF kan vi använda dynamisk programmering för att lösa problemet genom att se på delproblemet om en delsträng av en viss längd kan genereras med reglerna eller inte. Vi skapar en tredimensionell bool matris gen[i, j, k] där i är index för regeln, j är startindex för delsträngen och k är längden på delsträngen. gen[i, j, k] ska vara sann omm delsträngen som startar i index j och är k lång kan genereras med regeln
7 Syntaxanalys 7 i, annars falsk. Till att börja med sätts alla värden i gen till falska. Sedan går vi igenom och fyller i basfallen. Nämligen alla delsträngar av längden ett. För alla produktionsregler på formen <l> = x där x är en slutsymbol letar vi efter tecken i indatan som är lika med x och sätter dessa poster i gen till sanna. Sedan för alla möjliga längder av delsträngar börjar vi fylla i om det går att generera en delsträng av den längden genom att dela upp delsträngen med en produktionsregel på formen <l> = <r 1 ><r 2 >. Alltså, för varje längd av delsträng k, för varje startindex j och för varje uppdelning l av k som går att göra ser vi om vi kan hitta en regel <l> = <r 1 ><r 2 >. Där vi kan generera <r 1 > ur intervallet j till j + l och vi kan generera <r 2 > ur intervallet j + l till j + k, om så är fallet sätter vi gen[< l >, j, k] till sant. Följande pseudokod beskriver algoritmen: Algoritm 1: Cocke-Younger-Kasamis algoritm Cocke-Younger-Kasamis(x 1, x 2,..., x n ) (1) i, j, k (2) gen[i, j, k] = false (3) regler < a i >= S (4) tecken i strängen, (x j ) (5) om < a i >= x j (6) gen[i, j, k] = true (7) (8) for k = 2 n (9) for j = 1 n k + 1 (10) for l = 1 k 1 (11) < a i >=< a s >< a t > (12) if gen[s, j, l] och gen[t, j + l, k l] (13) gen[i, j, k] = true Komplexiteten för algoritmen är ganska uppenbart O(n 3 ) eftersom vi har tre nästlade for slingor som vardera kan köras O(n) gånger. Algoritmen är avsevärt mycket långsammare än rekursiv medåkning men fungerar på alla kontextfria grammatiker. 6 Reguljära uttryck Reguljära uttryck är en notation för att beskriva en mängd av strängar. Strängarna är uppbyggda av en mängd bokstäver från ett alfabet Σ. Ett specikt reguljärt uttryck är en sträng som följer särskilda syntaxregler. Dessa regler varierar mellan olika implementationer men alla bygger i grunden på fyra olika byggstenar. Dessa byggstenar är:
8 8 DD2458 Popup HT 2009 Konkatenering AB Beskriver en särskild följd av uttryck. Efter A så måste B komma. Alternativ A B Säger att antingen förekommer A eller så förekommer B. Upprepning A* Betyder att A får före komma ett godtyckligt antal gånger. A behöver inte förekomma alls. Epsilon ɛ Kommer inte konsumera någonting ur indata utan går vidare. Med dessa byggstenar så kan man bygga alla andra reguljära uttryck. I java nns det som exempel en +-operator. Sätter man denna efter en bokstav, t.ex. a+, så betyder det att bokstaven måste förekomma minst en gång men samtidigt får den förekomma hur många gånger som helst. Denna operator kan lätt beskrivas med våra byggstenar som: aa*. Några andra byggstenar som brukar nnas i de mest använda implementationerna är: Gruppering (A) Säger att A måste förekomma. Till exempel kan man ha problem med 'ö' och vilja matcha olika typer av 'ö' i ett ord. I ett ord som ström kan man göra det genom att byta ut 'ö' med str(ö o oe)m. Hakparanteser [A] Säger att någon av bokstäverna i A måste förekomma. Till exempel så kanske man vill matcha a, b eller c. Då skriver man [abc]. Hakparanteser brukar också innehålla stöd för att uttrycka spann av bokstäver. Om man vill ha alla bokstäver mellan a och z så kan man skriva [a-z]. Icke [ ˆ A] Säger att inte någon av bokstäverna i A får förekomma. Plus A+ Betyder att A måste förekomma minst en gång men får förekomma ett godtyckligt antal gånger. Frågetecken A? Betyder att A kan förekomma en gång men inte er. Förutom dessa så brukar det också nnas fördenerade grupper av bokstäver. I t.ex. Java betyder \w samma sak som [a-za-z_0-9] och \s betyder [ \t\n\x0b\f\r] (ett mellanrum av någon typ). 6.1 Reguljära uttryck som ändliga automater Om man inte har tillgång till ett färdigt bibliotek för reguljära uttryck men ändå vill evaluera en sträng med dessa så görs det bäst genom att ställa upp uttrycken som en ändlig automat. Sedan utvärderar man strängen genom att traversera automaten. De tre första byggstenarna som beskrevs tidigare ser ut på följande sätt som automater:
9 Syntaxanalys 9 A B A* AB 6.2 Reguljära uttryck i Java För att få tillgång till java regex så använder man sig av klasserna Pattern och Matcher. Båda dessa ligger i paketet java.util.regex. Om man vill få allmän förklaring till vilka beteckningar man kan använda så hittar man en n översikt av dessa på Nedan följer ett exempel på hur man använder Pattern och Matcher. I exemplet så kompilerar man ett regex som matchar strängar som innehåller ett eller era 'a'. import java.util.regex.matcher; import java.util.regex.pattern; public class main { public static void main(string[] args) throws Exception { Pattern p = Pattern.compile("a+"); Matcher m; m = p.matcher("aaaaaaaaa"); if (m.matches())system.out.println("good"); else System.out.println("Bad!"); } } m = p.matcher("aaaabbbb"); if (m.matches())system.out.println("good"); else System.out.println("Bad!");
10 10 DD2458 Popup HT 2009 Kör man programmet kommer outputen bli: Good Bad! Lite mer avancerad regex i java: [a-c]+[ ˆ def]* Matchar alla strängar som börjar med någon av bokstäverna a, b eller c en eller era gånger och sedan följs av godtycklig sträng som inte innehåller d, e eller f. Strängar som skulle matchas är: abchej, aaag, a och apa. Strängar som inte skulle matchas är: hej, abce, alfa. (hej tja hejsan)\\s+[a-z][a-z]* Matchar strängar som börjar med hej, tja eller hejsan, följt av ett eller era separeringstecken och sedan en sträng som börjar på en stor bokstav följt av ingen eller era små bokstäver. Strängar som matchas är: hej Allan, tja Urban. Strängar som inte matchas är: hej allan, halloj Urban. Om man har ett regex som inte fungerar så nns det olika verktyg för att felsöka det. Ett sådant är Regular Expression Test Page som går att nna på: Reguljära uttryck i C/C++ För att få tillgång till regex i C/C++ så kan man includera <regex.h>. regex.h nns som standard i GCC. Det är inte så stor skillnad på regex i Java och i C/C++. Det som nns i Javas standardimplementation nns med största sannolikehet också i regex.h. Exemplerna i Java fungerar även om man portar dem till C/C++. Här är ett kort exempel på hur regex kan användas i C++: #include "regex.h" #include <string> #include <iostream> using namespace std; int main(){ //Sätt upp ett pattern string pattern = "[h-k]ej"; //Skapa och kompilera regex regex_t re; regcomp(&re, pattern.c_str(), REG_EXTENDED REG_NOSUB); //Se om text kan matchas string text = "hej"; if (regexec(&re, text.c_str(), (size_t)0, NULL, 0) == 0) printf("hello World!\n");
11 Syntaxanalys 11 else printf("bad!\n"); } return 0; Tack till Johannes Svensson för hjälpen med exemplet.
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.
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
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
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
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
Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.
Tentamen Programmeringsteknik I 2015-01-10 Skrivtid: 8.00 13.00 Hjälpmedel: Java-bok Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till
Dugga Datastrukturer (DAT036)
Dugga Datastrukturer (DAT036) Duggans datum: 2012-11-21. Författare: Nils Anders Danielsson. För att en uppgift ska räknas som löst så måste en i princip helt korrekt lösning lämnas in. Enstaka mindre
Tentamen OOP 2015-03-14
Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning
Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.
Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel
Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.
Programmering för Språkteknologer II Markus Saers markus.saers@lingfil.uu.se Rum -040 stp.lingfil.uu.se/~markuss/ht0/pst Innehåll Associativa datastrukturer Hashtabeller Sökträd Implementationsdetaljer
Tentamen TEN1 HI1029 2014-05-22
Tentamen TEN1 HI1029 2014-05-22 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha
Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.
Algoritmanalys Analys av algoritmer används för att uppskatta effektivitet. Om vi t. ex. har n stycken tal lagrat i en array och vi vill linjärsöka i denna. Det betyder att vi måste leta i arrayen tills
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
Föreläsning 7. Träd och binära sökträd
Föreläsning 7 Träd och binära sökträd Föreläsning 7 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Läsanvisningar och
Föreläsning 13 och 14: Binära träd
Föreläsning 13 och 14: Binära träd o Binärträd och allmänna träd o Rekursiva tankar för binärträd o Binära sökträd Binärträd och allmänna träd Stack och kö är två viktiga datastrukturer man kan bygga av
Föreläsning 4: Kombinatorisk sökning
DD2458, Problemlösning och programmering under press Föreläsning 4: Kombinatorisk sökning Datum: 2009-09-25 Skribent(er): Kristina Nylander, Dennis Ekblom, Marcus Öman Föreläsare: Fredrik Niemelä 1 Introduktion
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
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
Grundläggande programmering med C# 7,5 högskolepoäng
Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Omtentamen DE13, IMIT13 och SYST13 samt öppen för alla (Ifylles av student) (Ifylles av student)
Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/
Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Hashtabeller
6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:
6 Rekursion 6.1 Rekursionens fyra principer Problem löses genom: 1. förenkling med hjälp av "sig själv". 2. att varje rekursionssteg löser ett identiskt men mindre problem. 3. att det finns ett speciellt
Tentamen i Objektorienterad programmering
CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA547 Tentamen i Objektorienterad programmering Lördagen 12 mars 2011, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 0762/981014. Inga hjälpmedel. Lösningar
Tentamen på kursen DA7351, Programmering 1. 051102, kl 08.15-12.15. Malmö högskola Teknik och samhälle. DA7351, Programmering 1 1 051102
Tentamen på kursen DA7351, Programmering 1 051102, kl 08.15-12.15 Tillåtna hjälpmedel: Valfri bok om Java. Vid bedömning av lösningarna tas hänsyn till om dessa uppfyller de krav på programkvalitet (strukturering,
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
Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Vem är vem på kursen Objektorienterad programvaruutveckling GU (DIT011) Kursansvarig : Katarina Blom, tel 772 10 60 Rum: 6126 (E-huset)
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.
Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)
Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: Onsdagen 15 december 2004, 8:30 till 13:30 Plats: M Ansvarig lärare: Katarina Blom, tel 772 10 60. Läraren besöker tentamen kl
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
Objektorienterad programmering i Java
Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet
Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4
Träd, binära träd och sökträd Koffman & Wolfgang kapitel 6, avsnitt 1 4 1 Träd Träd är ickelinjära och hierarkiska: i motsats till listor och fält en trädnod kan ha flera efterföljare ( barn ) men bara
Automater. Matematik för språkteknologer. Mattias Nilsson
Automater Matematik för språkteknologer Mattias Nilsson Automater Beräkningsmodeller Beräkning - (eng) Computation Inom automatateorin studeras flera olika beräkningsmodeller med olika egenskaper och olika
Föreläsning 10. ADT:er och datastrukturer
Föreläsning 10 ADT:er och datastrukturer ADT:er och datastrukturer Dessa två begrepp är kopplade till varandra men de står för olika saker. En ADT (abstrakt datatyp) är just abstrakt och är inte kopplad
Tentamen i Algoritmer & Datastrukturer i Java
Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2008-05-27 Skrivtid: 4 timmar Kontakt person: Nicolina Månsson, tel. 035-167487 Poäng / Betyg:
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Träd Traversering Insättning, borttagning
Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.
Tentamen Programmeringsteknik I 2014-10-17 Skrivtid: 0800-1300 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till
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
"if"-satsen. Inledande programmering med C# (1DV402)
"if"-satsen Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll i verket if-satsen
Laboration 10 - NetBeans
Laboration 10 - NetBeans Avsikten med laborationen är att du ska träna på att använda paket, att du ska packa några klassfiler i en jar-fil och slutligen använda innehållet i en jar-fil från en annan klass
TDDD02 Föreläsning 2 HT-2013. Reguljära uttryck och reguljära språk Lars Ahrenberg
TDDD02 Föreläsning 2 HT-2013 Reguljära uttryck och reguljära språk Lars Ahrenberg Översikt Reguljära uttryck sökproblem i texter definitioner och exempel UNIX-funktionen grep Reguljära transformationer
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)
Extra övningar på SDD:er/SDT:er
Extra övningar på SDD:er/SDT:er Bakvända meningar Grammatik: sentence word sentence sentence ε sentence space sentence word char word char 1 char 2 word char 1 word 1 char 2 Symbolen sentence producerar
Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00
Skolan för datavetenskap och kommunikation Objektorienterad Programkonstruktion, DD1346 FACIT Tentamen 20150613, kl. 9.00-12.00 Tillåtna hjälpmedel: Papper, penna och radergummi. Notera: Frågorna i del
Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h
Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h Antalet uppgifter : 3 (15p + 20p + 5p = 40 p) Lärare, jourhavande lärare
trafiksimulering Intro OU5 trafiksimulering
Presentation av obligatoriska uppgiften trafiksimulering Ett lite större program med flera klasser Hur man designar ett system Hur man gör simuleringar 1 Valsätr ravägen Korsningen Dag hammarsköldsväg
Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll 2010-04-22
Översikt 732G11 PROGRAMMERING 1 Institutionen för datavetenskap Om kursen Vad är programmering (bra för)? Programmeringsspråket Java Utvecklingsmiljön Eclipse Genomgång av några programexempel Programmering
Institutionen för TENTAMEN CTH HT-15 Datavetenskap 2015-08-27 TDA540. Tentamen för TDA540 Objektorienterad programmering
Institutionen för TENTAMEN CTH HT-15 Datavetenskap 215--27 TDA54 Tentamen för TDA54 Objektorienterad programmering DAG: 15--27 TID: 14: 1: Ansvarig: Joachim von Hacht och Christer Carlsson Förfrågningar:
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
SORTERING OCH SÖKNING
Algoritmer och Datastrukturer Kary FRÄMLING Kap. 9, Sid 1 C-språket 2/Kary Främling v2000 och Göran Pulkkis v2003 SORTERING OCH SÖKNING Sortering är ett av de bästa exemplen på problem där valet av lösningsalgoritm
Tentamen Datastrukturer D DAT 036/DIT960
Tentamen Datastrukturer D DAT 036/DIT960 17 december 2010 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 0736-341480 eller ankn 1035 Max poäng på tentamen: 60. Betygsgränser, CTH: 3 = 24 p, 4 = 36 p, 5 =
Att använda pekare i. C-kod
Att använda pekare i C-kod (Bör användas av de som känner sig lite hemma med C-programmering!) Rev 1, 2005-11-23 av Ted Wolfram www.wolfram.se Syfte: Man kan tycka att det är komplicerat att använda pekare
Tentamen: Programutveckling ht 2015
Tentamen: Programutveckling ht 2015 Datum: 2015-11-04 Tid: 09:00-13:00 Sal: Ansvarig: Resultat: Hjälpmedel: Maxpoäng: Betygsgränser: Anslås inom 3 veckor. Inga 40 p 20 p för G, 32 p för VG. Iakttag följande:
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
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
Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)
Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201) Lars-Henrik Eriksson Fredag 5 april 2013, kl 14:00 17:00, i Polacksbackens skrivsal Hjälpmedel: Inga. Inte heller elektronisk
TDDI02. Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDI02 Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Verifikation, Validering och Testning XP Extreme Programming Vad är ett fel? I engelskan
Tentamen, EDA501 Programmering M L TM W K V
LUNDS TEKNISKA HÖGSKOLA 1(0) Institutionen för datavetenskap Tentamen, EDA501 Programmering M L TM W K V 2010 05 31, 8.00 13.00 Anvisningar: Denna tentamen består av 4 uppgifter. Preliminärt ger uppgifterna
Tentamen. Lösningsförslag
Sida 1/8 Tentamen Grundläggande programmering i Java A 5p, DTAA32 2002-03-22 Lösningsförslag Uppgift 1 ( 3p ) Utskriften blir: Skriv in ett tal 24 47 48 intal=471 Uppgift 2 ( 6p ) a.) b.) c.) d.) e.) falskt
DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin
DD36 Programmeringsparadigm Formella Språk & Syntaxanalys Föreläsning Per Austrin 26--3 Kursavsnittet syntax/formella språk Teori om formella språk verktygslåda för strängmatchning: Ändliga automater och
Lösningsförslag, tentamen FYTA11 Javaprogrammering
Lunds universitet FYTA11 Institutionen för Astronomi och Teoretisk fysik HT 12 Lösningsförslag, tentamen FYTA11 Javaprogrammering Onsdag 9 januari 2013, 10:15 14:15 Instruktioner Hjälpmedel: Papper och
Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004
Programmering hh.se/db2004 Föreläsning 10: Objektorienterad programmering - datatyper Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Påminnelse: en datatyp för bilder Vad är
Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08
Programmering A C# VT 2010 Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Innehåll Hjälp och referenser... 3 Kap 1 Introduktion... 3 Steg för steg... 3 Kapitel 2 Variabler...
public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }
Rekursion 25 7 Rekursion Tema: Rekursiva algoritmer. Litteratur: Avsnitt 5.1 5.5 (7.1 7.5 i gamla upplagan) samt i bilderna från föreläsning 6. U 59. Man kan definiera potensfunktionen x n (n heltal 0)
Föreläsning 2: Avlusning och antilustekniker
2D1458, Problemlösning och programmering under press Föreläsning 2: Avlusning och antilustekniker Datum: 2007-09-11 Skribent(er): Emil Hesslow, Stefan Pettersson Föreläsare: Per Austrin Föreläsningen handlade
Programmeringsuppgifter 1
Programmeringsuppgifter 1 Redovisning: Ni demo-kör och förklarar för handledaren några av de program ni gjort. Ni behöver inte hinna allt, redovisa så långt ni kommit. Om ni hinner mer kan ni alltid redovisa
Introduktion till programmering. Standardfunktioner. Vad används datorer till? Standardfunktioner. Föreläsning 2. Prelude. $ ghci...
Introduktion till programmering Standardfunktioner Tecken och strängar Utskrifter och effekter Föreläsning 2 Prelude Alla fördefinierade funktioner vi använder definieras i modulen Prelude. Denna modul
Chapter 3: Using Classes and Objects
Chapter 3: Using Classes and Objects I dessa uppgifter kommer du att lära dig om hur man använder klasser och metoder från java biblioteket. Du kommer inte att förstå allt som händer bakom metod anrop
Föreläsning 8: Intro till Komplexitetsteori
Föreläsning 8: Intro till Komplexitetsteori Formalisering av rimlig tid En algoritm som har körtid O(n k ) för någon konstant k är rimligt snabb. En algoritm som har körtid Ω(c n ) för någon konstant c>1
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
7, Diskreta strukturer
Objektorienterad modellering och diskreta strukturer 7, Diskreta strukturer Sven Gestegård Robertz Datavetenskap, LTH 2015 Modeller Matematiska modeller Kontinuerliga modeller Kontinuerliga funktioner
Lösningsförslag till exempeltenta 1
Lösningsförslag till exempeltenta 1 1 1. Beskriv hur binärsökning fungerar. Beskriv dess pseudokod och förklara så klart som möjligt hur den fungerar. 2 Uppgift 1 - Lösning Huvudidé: - Titta på datan i
Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer
F6 Observera att när man utvecklar program så är inte alla lösningar på vägen korrekta. Speciellt den här gången så finns många OH med program som inte fungerar eftersom det är just det vi skall se på
Lösningsförslag till exempeltenta 2
Lösningsförslag till exempeltenta 2 1 1. Beskriv hur man kan söka igenom en tvådimensionell array. Beskriv pseudokoden och förklara så klart som möjligt hur den fungerar. Lösning: Se laboration 3. - Beskriv
Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!
Tentamen Programmeringsteknik II 2014-01-09 Skrivtid: 0800-1300 Hjälpmedel: Java-bok (vilken som helst) Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja
Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling
metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man
JAVAUTVECKLING LEKTION 4
JAVAUTVECKLING LEKTION 4 2016 Mahmud Al Hakim mahmud.al.hakim@nackademin.se www.alhakim.se AGENDA Iterationer (loopar) Algoritmer Mer om felsökning 1 WHILE-SATSEN String s = JOptionPane.showInputDialog("Talet
Föreläsning 5: Grafer Del 1
2D1458, Problemlösning och programmering under press Föreläsning 5: Grafer Del 1 Datum: 2006-10-02 Skribent(er): Henrik Sjögren, Patrik Glas Föreläsare: Gunnar Kreitz Den här föreläsningen var den första
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
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
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
DELPROV 1 I DATAVETENSKAP
Umeå Universitet Datavetenskap Marie Nordström 070502 DELPROV 1 I DATAVETENSKAP Uppgift (poäng) 1 () 2 () 3 () 4 () 5 () 6 () Summa (xx) Inlämnad Poäng Kurs : Datum : 070502 Namn (texta) : Personnummer
Föreläsning 11. Giriga algoritmer
Föreläsning 11 Giriga algoritmer Föreläsning 11 Giriga algoritmer Användning Växelproblemet Kappsäcksproblemet Schemaläggning Färgläggning Handelsresandeproblemet Uppgifter Giriga algoritmer (Greedy algorithms)
Parsning = analys. Parsningsalgoritmer. Användningsområden. L1: Introduktion
Parsning = analys Maskinell analys av naturligt språks strukturer Uppgiften som en parser löser är 1. Acceptera en sträng som grammatisk, samt oftast 2. Ge en strukturell representation av strängen som
Objektsamlingar i Java
1 (6) Objektsamlingar i Java Objektorienterad programmering 3 Syfte Att ge träning i att använda objektsamlingar i Java. Mål Efter övningen skall du kunna använda objektsamlingsklasserna ArrayList och
IT för personligt arbete F6
IT för personligt arbete F6 Datalogi del 2 DSV Peter Mozelius Datarepresentation Det som lagras i en dator representeras i grunden som 1:or och 0:or Dessa binära värden kan sedan tolkas på olika sätt i
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
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
Redovisning av inlämningsuppgifter
Bilaga B Redovisning av inlämningsuppgifter 1 Rapportens innehåll Varje inlämningsuppgift ska redovisas med en skriftlig rapport. Rapporten ska vara häftad och försedd med ett försättsblad med uppgiftens
Flera kvantifierare Bevis Direkt bevis Motsägelse bevis Kontrapositivt bevis Fall bevis Induktionsprincipen. x y (x > 0) (y > 0) xy > 0 Domän D = R
Föreläsning Flera kvantifierare Bevis Direkt bevis Motsägelse bevis Kontrapositivt bevis Fall bevis Induktionsprincipen För att göra ett påstående av en öppen utsaga med flera variabler behövs flera kvantifierare.
Fortsättningskurs i programmering F 2. Algoritmer i Programutveckling Hugo Quisbert 20130122. Problemexempel 1
Fortsättningskurs i programmering F 2 Algoritmer i Programutveckling Hugo Quisbert 20130122 1 Exempel 1 Problemexempel 1 En souvenirbutik behöver ett datorprogram som omvandlar ett pris i svenska kronor
Grundläggande logik och modellteori (5DV102)
Tentamen 2013-10-31 Grundläggande logik och modellteori (5DV102) M. Berglund och K. Markström Totalt antal uppgifter 11 Maximalt antal poäng 30 Krav för 3 i betyg 14 poäng Krav för 4 i betyg 19 poäng,
Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck
Betrakta följande uttryck a +(b + c) d + e (f + g h) Parsing med Recursive Descent, Avbildningsklasser Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 22 november 2010 Beräkning med regler: multiplikation
Exempel: Förel Rekursion III Nr 14. Uno Holmer, Chalmers,
Exempel: Kappsäcksproblemet Backtracking Dynamisk programmering Föreläsning (Weiss kap..-) Kan man ur en grupp föremål F,,F N med vikterna V,,V N välja ut en delgrupp som väger exakt M kilo? Exempel: föremål
OOP Objekt-orienterad programmering
OOP F6:1 OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList tostring() metoden this Vi vill ofta hantera många objekt i ett program: OOP F6:2 public
Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:
Föreläsning 7 Innehåll Rekursion Rekursivt tänkande: Hur många år fyller du? Ett år mer än förra året! Rekursion Rekursiv problemlösning Binärsökning Generiska metoder Rekursiv problemlösning: Dela upp
Editering, Kompilering och Exekvering av Javaprogram
UMEÅ UNIVERSITET Institutionen för informatik B.1, Programmeringens grunder, 5 poäng Editering, Kompilering och Exekvering av Javaprogram Introduktion Syftet med kursmomentet Programmeringens grunder (B.1)
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
Föreläsning 14. Filhantering
Föreläsning 14 Filhantering Filhantering Att hantera filer, dvs att läsa eller skriva data till en fil är en viktig del i de flesta program. Ur Javas synvinkel är filer objekt med egenskaper och metoder
Tentaupplägg denna gång
Några tips på vägen kanske kan vara bra. Tentaupplägg denna gång TIPS 1: Läs igenom ALLA uppgifterna och välj den du känner att det är den lättaste först. Det kan gärna ta 10-20 minuter. Försök skriva
Tentamen, EDAA20/EDA501 Programmering
LUNDS TEKNISKA HÖGSKOLA 1(4) Institutionen för datavetenskap Tentamen, EDAA20/EDA501 Programmering 2011 10 19, 8.00 13.00 Anvisningar: Denna tentamen består av fem uppgifter. Preliminärt ger uppgifterna