DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin
|
|
- Lovisa Svensson
- för 5 år sedan
- Visningar:
Transkript
1 DD1361 Programmeringsparadigm Formella Språk & Syntaxanalys Föreläsning 3 Per Austrin
2 Huvudkoncept hittils: Snabb repetition Formellt språk en mängd strängar Reguljära språk den klass av formella språk som kan beskrivas med reguljära uttryck eller ändliga automater (DFA:er) viktigt: reguljära uttryck och automater lika kraftfulla, kan beskriva samma saker Grammatiker verktyg för att beskriva språk som med enkla rekursiva definitioner Stackautomater automat med minne i form av en stack
3 Idag Stackautomater (forts.) Lexikal analys Härledningar och syntaxträd Omskrivning av grammatiker Rekursiv medåkning och LL(1)-grammatiker
4 Idag Stackautomater (forts.) Lexikal analys Härledningar och syntaxträd Omskrivning av grammatiker Rekursiv medåkning och LL(1)-grammatiker
5 Stackautomater (repetition från förra fredagen) Stackautomat (PDA, Push-Down Automaton): som DFA, men har ett obegränsat minne i form av en stack
6 Stackautomater (repetition från förra fredagen) Stackautomat (PDA, Push-Down Automaton): som DFA, men har ett obegränsat minne i form av en stack a, ɛ/a c, a/ɛ a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z start c, b/ɛ b, ɛ/b b, a/ɛ
7 Stackautomater (repetition från förra fredagen) Stackautomat (PDA, Push-Down Automaton): som DFA, men har ett obegränsat minne i form av en stack a, ɛ/a c, a/ɛ a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z start c, b/ɛ b, ɛ/b Läs a:n och b:n och lägg på stacken b, a/ɛ
8 Stackautomater (repetition från förra fredagen) Stackautomat (PDA, Push-Down Automaton): som DFA, men har ett obegränsat minne i form av en stack start a, ɛ/a b, ɛ/b a, b/ɛ c, a/ɛ c, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z När det kommer ett c, hoppa till något av de accepterande tillstånden beroende på om det översta tecknet på stacken är a eller b b, a/ɛ
9 Stackautomater (repetition från förra fredagen) Stackautomat (PDA, Push-Down Automaton): som DFA, men har ett obegränsat minne i form av en stack a, ɛ/a c, a/ɛ a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z start c, b/ɛ b, ɛ/b b, a/ɛ Om sista tecknet innan c var ett b: fortsätt läsa b:n från indata och kolla att det ligger minst lika många a:n på stacken
10 Stackautomater (repetition från förra fredagen) Stackautomat (PDA, Push-Down Automaton): som DFA, men har ett obegränsat minne i form av en stack a, ɛ/a c, a/ɛ a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z start c, b/ɛ b, ɛ/b b, a/ɛ Automaten accepterar om den är i ett accepterande tillstånd OCH stacken är tom när indata är slut
11 Exempelkörning, stackautomat (repetition) a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z a, ɛ/a c, a/ɛ start c, b/ɛ b, ɛ/b b, a/ɛ
12 Exempelkörning, stackautomat (repetition) a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z a, ɛ/a c, a/ɛ start c, b/ɛ b, ɛ/b Indata: baabcbbb b, a/ɛ
13 Exempelkörning, stackautomat (repetition) a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z a, ɛ/a c, a/ɛ start c, b/ɛ b, ɛ/b Indata: baabcbbb b, a/ɛ Stacken:
14 Exempelkörning, stackautomat (repetition) a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z a, ɛ/a c, a/ɛ start c, b/ɛ b, ɛ/b Indata: baabcbbb b, a/ɛ Stacken: b pushas
15 Exempelkörning, stackautomat (repetition) a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z a, ɛ/a c, a/ɛ start c, b/ɛ b, ɛ/b Indata: baabcbbb b, a/ɛ Stacken: a pushas b
16 Exempelkörning, stackautomat (repetition) a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z a, ɛ/a c, a/ɛ start c, b/ɛ b, ɛ/b Indata: baabcbbb b, a/ɛ Stacken: a pushas a b
17 Exempelkörning, stackautomat (repetition) a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z a, ɛ/a c, a/ɛ start c, b/ɛ b, ɛ/b Indata: baabcbbb b, a/ɛ Stacken: b pushas a a b
18 Exempelkörning, stackautomat (repetition) a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z a, ɛ/a c, a/ɛ start c, b/ɛ b, ɛ/b Indata: baabcbbb b, a/ɛ Stacken: b poppas a a b
19 Exempelkörning, stackautomat (repetition) a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z a, ɛ/a c, a/ɛ start c, b/ɛ b, ɛ/b Indata: baabcbbb b, a/ɛ Stacken: a poppas a b
20 Exempelkörning, stackautomat (repetition) a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z a, ɛ/a c, a/ɛ start c, b/ɛ b, ɛ/b Indata: baabcbbb b, a/ɛ Stacken: a poppas b
21 Exempelkörning, stackautomat (repetition) a, b/ɛ x, y/z: läs x, poppa y från stacken, pusha z a, ɛ/a c, a/ɛ start c, b/ɛ b, ɛ/b Indata: baabcbbb b, a/ɛ Stacken: Övergång saknas, för tecknet b måste vi ha ett a högst upp på stacken automaten accepterar inte b
22 Stackautomat för balanserade parentesuttryck En grammatik för balanserade parentesuttryck: Expr ɛ (Expr)Expr
23 Stackautomat för balanserade parentesuttryck En grammatik för balanserade parentesuttryck: Expr ɛ (Expr)Expr Vi kan också lätt konstruera en PDA för språket, vi behöver faktiskt bara ett enda tillstånd! (Plus det implicita fail-tillståndet.) start (, ɛ/( ), (/ɛ
24 Stackautomat för balanserade parentesuttryck En grammatik för balanserade parentesuttryck: Expr ɛ (Expr)Expr Vi kan också lätt konstruera en PDA för språket, vi behöver faktiskt bara ett enda tillstånd! (Plus det implicita fail-tillståndet.) start (, ɛ/( När vi ser en vänsterparentes, pusha på vänsterparentes på stacken ), (/ɛ
25 Stackautomat för balanserade parentesuttryck En grammatik för balanserade parentesuttryck: Expr ɛ (Expr)Expr Vi kan också lätt konstruera en PDA för språket, vi behöver faktiskt bara ett enda tillstånd! (Plus det implicita fail-tillståndet.) start (, ɛ/( När vi ser en vänsterparentes, pusha på vänsterparentes på stacken ), (/ɛ När vi ser högerparentes, poppa en vänsterparentes från stacken
26 Från grammatiker till stackautomater Parentesuttryck var enkelt att bygga stackautomat för.
27 Från grammatiker till stackautomater Parentesuttryck var enkelt att bygga stackautomat för. Kan man alltid konvertera en grammatik till en stackautomat?
28 Från grammatiker till stackautomater Parentesuttryck var enkelt att bygga stackautomat för. Kan man alltid konvertera en grammatik till en stackautomat? Nej, det kan man inte!
29 Från grammatiker till stackautomater Parentesuttryck var enkelt att bygga stackautomat för. Kan man alltid konvertera en grammatik till en stackautomat? Nej, det kan man inte! Exempel: Palindrom över {a, b} Palin ɛ a b a Palin a b Palin b Det existerar inte någon PDA som känner igen detta språk.
30 Från grammatiker till stackautomater Parentesuttryck var enkelt att bygga stackautomat för. Kan man alltid konvertera en grammatik till en stackautomat? Nej, det kan man inte! Exempel: Palindrom över {a, b} Palin ɛ a b a Palin a b Palin b Det existerar inte någon PDA som känner igen detta språk. Intuition: PDA:n borde, när den kommit exakt halvvägs in i strängen, börja matcha av tecken mot de som den redan sett, men det finns inget sätt för den att veta när den är halvvägs.
31 Från grammatiker till stackautomater Parentesuttryck var enkelt att bygga stackautomat för. Kan man alltid konvertera en grammatik till en stackautomat? Nej, det kan man inte! Exempel: Palindrom över {a, b} Palin ɛ a b a Palin a b Palin b Det existerar inte någon PDA som känner igen detta språk. Intuition: PDA:n borde, när den kommit exakt halvvägs in i strängen, börja matcha av tecken mot de som den redan sett, men det finns inget sätt för den att veta när den är halvvägs. Man kan bevisa detta med ett pumping-lemma för PDA:er, liknande beviset vi såg för DFA:er (ingår ej i kursen).
32 Grammatiker vs. stackautomater Om stackautomater inte är tillräckligt kraftfulla för att kunna användas till alla grammatiker, vad är poängen?
33 Grammatiker vs. stackautomater Om stackautomater inte är tillräckligt kraftfulla för att kunna användas till alla grammatiker, vad är poängen? Poängen är att de kan användas för de flesta grammatiker, t.ex. (nästan?) alltid de man får när man konstruerar programspråk.
34 Idag Stackautomater (forts.) Lexikal analys Härledningar och syntaxträd Omskrivning av grammatiker Rekursiv medåkning och LL(1)-grammatiker
35 Grammatik för aritmetiska uttryck Låt oss skriva en grammatik för aritmetiska uttryck med heltal, operatorerna +,,, /, och parenteser.
36 Grammatik för aritmetiska uttryck Låt oss skriva en grammatik för aritmetiska uttryck med heltal, operatorerna +,,, /, och parenteser. Möjlig grammatik: Expr Number Expr + Expr Expr Expr Expr Expr Expr/Expr (Expr) Number Digit Digit Number Digit Icke-slutsymboler: Expr (representerar uttryck) Number (representerar heltal) Digit (representerar siffror)
37 Det väsentliga i den här grammatiken är de rekursiva reglerna för hur man formar ett uttryck. Onödigt komplicerat? Expr Number Expr + Expr Expr Expr Expr Expr Expr/Expr (Expr) Number Digit Digit Number Digit
38 Det väsentliga i den här grammatiken är de rekursiva reglerna för hur man formar ett uttryck. Reglerna för vad som är ett tal känns lite som ett bihang som vi var tvungna att ha med för att göra grammatiken fullständig. Onödigt komplicerat? Expr Number Expr + Expr Expr Expr Expr Expr Expr/Expr (Expr) Number Digit Digit Number Digit
39 Det väsentliga i den här grammatiken är de rekursiva reglerna för hur man formar ett uttryck. Reglerna för vad som är ett tal känns lite som ett bihang som vi var tvungna att ha med för att göra grammatiken fullständig. Onödigt komplicerat? Expr Number Expr + Expr Expr Expr Expr Expr Expr/Expr (Expr) Number Digit Digit Number Digit Att känna igen tal är ju väldigt enkelt (kan t.ex. göras med det reguljära uttrycket [0-9]+), är lite overkill att använda grammatik för det.
40 Pre-processa heltal Idé: pre-processa indata-strängen för att ta hand om de delar som utgör enkla beståndsdelar av grammatiken
41 Pre-processa heltal Idé: pre-processa indata-strängen för att ta hand om de delar som utgör enkla beståndsdelar av grammatiken Exempel: låt oss titta på strängen 378*232*(582-01)
42 Pre-processa heltal Idé: pre-processa indata-strängen för att ta hand om de delar som utgör enkla beståndsdelar av grammatiken Exempel: låt oss titta på strängen 378*232*(582-01) Detta är teckensekvensen 3, 7, 8, *, 2, 3, 2, *, (, 5, 8, 2, -, 0, 1, )
43 Pre-processa heltal Idé: pre-processa indata-strängen för att ta hand om de delar som utgör enkla beståndsdelar av grammatiken Exempel: låt oss titta på strängen 378*232*(582-01) Detta är teckensekvensen 3, 7, 8, *, 2, 3, 2, *, (, 5, 8, 2, -, 0, 1, ) Vi pre-processar detta till den nya sekvensen Number, *, Number, *, (, Number, -, Number, )
44 Pre-processa heltal Idé: pre-processa indata-strängen för att ta hand om de delar som utgör enkla beståndsdelar av grammatiken Exempel: låt oss titta på strängen 378*232*(582-01) Detta är teckensekvensen 3, 7, 8, *, 2, 3, 2, *, (, 5, 8, 2, -, 0, 1, ) Vi pre-processar detta till den nya sekvensen Number, *, Number, *, (, Number, -, Number, ) Elementen i den nya sekvensen kallas för tokens.
45 Pre-processa heltal Idé: pre-processa indata-strängen för att ta hand om de delar som utgör enkla beståndsdelar av grammatiken Exempel: låt oss titta på strängen 378*232*(582-01) Detta är teckensekvensen 3, 7, 8, *, 2, 3, 2, *, (, 5, 8, 2, -, 0, 1, ) Vi pre-processar detta till den nya sekvensen Number, *, Number, *, (, Number, -, Number, ) Elementen i den nya sekvensen kallas för tokens. Några tokens är helt enkelt enstaka tecken från indata-strängen, men andra består av delsträngar från indata-strängen som getts en typ (i det här fallet Number )
46 Pre-processa heltal Idé: pre-processa indata-strängen för att ta hand om de delar som utgör enkla beståndsdelar av grammatiken Exempel: låt oss titta på strängen 378*232*(582-01) Detta är teckensekvensen 3, 7, 8, *, 2, 3, 2, *, (, 5, 8, 2, -, 0, 1, ) Vi pre-processar detta till den nya sekvensen Number, *, Number, *, (, Number, -, Number, ) Elementen i den nya sekvensen kallas för tokens. Några tokens är helt enkelt enstaka tecken från indata-strängen, men andra består av delsträngar från indata-strängen som getts en typ (i det här fallet Number ) Vi betraktar denna tokensekvens som ett indata att parsa
47 Åter till grammatiken Vad händer med vår grammatik? Expr Number Expr + Expr Expr Expr Expr Expr Expr/Expr (Expr) Number Digit Digit Number Digit
48 Åter till grammatiken Vad händer med vår grammatik? Expr Number Expr + Expr Expr Expr Expr Expr Expr/Expr (Expr) Number Digit Digit Number Digit
49 Åter till grammatiken Vad händer med vår grammatik? Expr Number Expr + Expr Expr Expr Expr Expr Expr/Expr (Expr) Number Digit Digit Number Digit Man kan säga att vi har uppgraderat (eller nedgraderat?) Number till en slut-symbol istället för en icke-slutsymbol
50 Lexikal analys Lexikal analys är processen att transformera en indatasträng (sekvens av tecken) till en sekvens av tokens. Syften: 1. Abstrahera bort smådetaljer ur grammatiken. 2. Städa bort irrelevanta delar av indata Kommentarer i programmeringsspråk Whitespace Vi vill antagligen att 12+5 och ska behandlas likadant, men att ska behandlas annorlunda
51 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta
52 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Vad är lämpliga val av tokens i Haskell? Förslag: Where/Let/Derives/etc alla keywords i språket Equal/Plus/Minus/Times/etc operatorer Int/Double/etc tal av olika typer Name Variabel/funktionsnamn (och många fler)
53 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys:
54 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Detta är en kommentar så vi ignorerar den
55 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Name
56 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Name, Name
57 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Name, Name, Name
58 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Name, Name, Name, Equal
59 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Name, Name, Name, Equal, Int
60 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Name, Name, Name, Equal, Int, Times
61 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Name, Name, Name, Equal, Int, Times, Name
62 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Name, Name, Name, Equal, Int, Times, Name, Where
63 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Name, Name, Name, Equal, Int, Times, Name, Where Detta är en kommentar så vi ignorerar den
64 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Name, Name, Name, Equal, Int, Times, Name, Where, Name
65 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Name, Name, Name, Equal, Int, Times, Name, Where, Name, Equal
66 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Name, Name, Name, Equal, Int, Times, Name, Where, Name, Equal, Name
67 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Name, Name, Name, Equal, Int, Times, Name, Where, Name, Equal, Name, Minus
68 Lexikal analys, exempel Betrakta följande Haskell-funktion -- Det här är min funktion minfunktion alfa beta = 5*x where -- beräkna differensen x = alpha-beta Möjlig tokenisering/lexikal analys: Name, Name, Name, Equal, Int, Times, Name, Where, Name, Equal, Name, Minus, Name
69 Idag Stackautomater (forts.) Lexikal analys Härledningar och syntaxträd Omskrivning av grammatiker Rekursiv medåkning och LL(1)-grammatiker
70 Språk inte bara syntax Hittills har vi bara pratat om syntax: givet en sträng, ligger den i språket, ja eller nej?
71 Språk inte bara syntax Hittills har vi bara pratat om syntax: givet en sträng, ligger den i språket, ja eller nej? Exempel Är 4*(5+3) ett syntaktiskt korrekt aritmetiskt uttryck? Är min java-fil ett giltigt java-program?
72 Språk inte bara syntax Hittills har vi bara pratat om syntax: givet en sträng, ligger den i språket, ja eller nej? Exempel Är 4*(5+3) ett syntaktiskt korrekt aritmetiskt uttryck? Är min java-fil ett giltigt java-program? Men ofta har ju strängarna i språken en mening en semantik som man vill kunna analysera
73 Språk inte bara syntax Hittills har vi bara pratat om syntax: givet en sträng, ligger den i språket, ja eller nej? Exempel Är 4*(5+3) ett syntaktiskt korrekt aritmetiskt uttryck? Är min java-fil ett giltigt java-program? Men ofta har ju strängarna i språken en mening en semantik som man vill kunna analysera Exempel Vad är värdet av 4*(5+3)? Vad händer när man kör mitt java-program?
74 Härledning En härledning av en indatasträng är en sekvens av grammatikregler som producerar strängen Expr Num Expr + Expr Expr Expr Expr Expr Expr/Expr (Expr)
75 Härledning En härledning av en indatasträng är en sekvens av grammatikregler som producerar strängen Exempel: Låt oss härleda 4*(5+3), dvs token-sekvensen Num, *, (, Num, +, Num, ) Expr Num Expr + Expr Expr Expr Expr Expr Expr/Expr (Expr)
76 Härledning En härledning av en indatasträng är en sekvens av grammatikregler som producerar strängen Exempel: Låt oss härleda 4*(5+3), dvs token-sekvensen Num, *, (, Num, +, Num, ) Expr Num Expr + Expr Expr Expr Expr Expr Expr/Expr (Expr) Härledning: Expr Expr Expr Num Expr Num (Expr) Num (Expr+Expr) Num (Num+Expr) Num (Num+Num)
77 Härledning En härledning av en indatasträng är en sekvens av grammatikregler som producerar strängen Exempel: Låt oss härleda 4*(5+3), dvs token-sekvensen Num, *, (, Num, +, Num, ) Expr Num Expr + Expr Expr Expr Expr Expr Expr/Expr (Expr) Härledning: Expr Expr Expr Num Expr Num (Expr) Num (Expr+Expr) Num (Num+Expr) Num (Num+Num) Varje steg använder en av produktionsreglerna, och vi landar till slut i indata-sekvensen
78 Syntaxträd Det bästa sättet att representera härledningar på är med syntaxträd
79 Syntaxträd Det bästa sättet att representera härledningar på är med syntaxträd Härledning Expr Expr Expr Num Expr Num (Expr) Num (Expr+Expr) Num (Num+Expr) Num (Num+Num)
80 Syntaxträd Det bästa sättet att representera härledningar på är med syntaxträd Härledning Visualiserat som syntaxträd Expr Expr Expr Num Expr Num (Expr) Num (Expr+Expr) Num (Num+Expr) Num (Num+Num) Num Expr Expr * Expr ( Expr ) Expr Num + Expr Num
81 Semantik från härledningar/syntaxträd Uttryck: 4*(5+3) Syntaxträd: Expr Expr * Expr Num ( Expr ) Expr Num + Expr Num
82 Semantik från härledningar/syntaxträd Uttryck: 4*(5+3) För att kunna beräkna värdet av uttrycket behöver vi ju veta exakt vilka tal som de olika Num-elementen var. Syntaxträd: Num Expr Expr * Expr ( Expr ) Expr Num + Expr Num
83 Semantik från härledningar/syntaxträd Uttryck: 4*(5+3) För att kunna beräkna värdet av uttrycket behöver vi ju veta exakt vilka tal som de olika Num-elementen var. Syntaxträd: Expr Num(4) Expr * Expr ( Expr ) Varje Num-token taggas med semantisk data som talar om vilket tal det representerar Expr + Expr Num(5) Num(3)
84 Semantik från härledningar/syntaxträd Uttryck: 4*(5+3) För att kunna beräkna värdet av uttrycket behöver vi ju veta exakt vilka tal som de olika Num-elementen var. Syntaxträd: Expr Num(4) Expr * Expr ( Expr ) Varje Num-token taggas med semantisk data som talar om vilket tal det representerar Expr + Expr Num(5) Num(3) Man kan nu beräkna värdet med en enkel sökning i trädet. if leafnode: value = token.value() if plusnode: value = left.value() + right.value() if mulnode: value = left.value() * right.value() etc...
85 Uttryck: 3*2+1 Syntaxträd, exempel 2
86 Uttryck: 3*2+1 Syntaxträd, exempel 2 Anna hävdar att det har följande syntaxträd: Expr Bengt hävdar att det har följande syntaxträd: Expr Expr * Expr Expr + Expr Num(3) Expr + Expr Expr * Expr Num(1) Num(2) Num(1) Num(3) Num(2) Vem har rätt?
87 Uttryck: 3*2+1 Syntaxträd, exempel 2 Anna hävdar att det har följande syntaxträd: Expr Bengt hävdar att det har följande syntaxträd: Expr Expr * Expr Expr + Expr Num(3) Expr + Expr Expr * Expr Num(1) Num(2) Num(1) Num(3) Num(2) Vem har rätt? Båda är korrekta syntaxträd för uttrycket enligt grammatiken!
88 Tvetydighet Båda är korrekta syntaxträd för uttrycket enligt grammatiken
89 Tvetydighet Båda är korrekta syntaxträd för uttrycket enligt grammatiken Grammatiken är tvetydig det finns flera olika syntaxträd för samma sträng
90 Tvetydighet Båda är korrekta syntaxträd för uttrycket enligt grammatiken Grammatiken är tvetydig det finns flera olika syntaxträd för samma sträng Om vi utvärderar uttrycket med de olika träden får vi olika svar: 3 (2 + 1) = 9 vs. (3 2) + 1 = 7
91 Tvetydighet Båda är korrekta syntaxträd för uttrycket enligt grammatiken Grammatiken är tvetydig det finns flera olika syntaxträd för samma sträng Om vi utvärderar uttrycket med de olika träden får vi olika svar: 3 (2 + 1) = 9 vs. (3 2) + 1 = 7 Att en grammatik är tvetydig spelar ingen roll för syntaxen (ändrar inte vad som är giltiga strängar), men gör att det finns flera olika semantiska tolkningar av strängarna i språket.
92 Tvetydighet Båda är korrekta syntaxträd för uttrycket enligt grammatiken Grammatiken är tvetydig det finns flera olika syntaxträd för samma sträng Om vi utvärderar uttrycket med de olika träden får vi olika svar: 3 (2 + 1) = 9 vs. (3 2) + 1 = 7 Att en grammatik är tvetydig spelar ingen roll för syntaxen (ändrar inte vad som är giltiga strängar), men gör att det finns flera olika semantiska tolkningar av strängarna i språket. Sådan dubbeltydighet kan vara charmig i naturliga språk, men antagligen inget man vill ha i sitt programmeringsspråk...
93 Idag Stackautomater (forts.) Lexikal analys Härledningar och syntaxträd Omskrivning av grammatiker Rekursiv medåkning och LL(1)-grammatiker
94 Exempel: 3* *3/2+3*(5-3) Varför blev det tvetydigt?
95 Exempel: 3* *3/2+3*(5-3) Varför blev det tvetydigt? Vi vill att * och / ska ha högre prioritet än + och -
96 Exempel: 3* *3/2+3*(5-3) Varför blev det tvetydigt? Vi vill att * och / ska ha högre prioritet än + och - Men detta finns inte med i grammatiken
97 Exempel: 3* *3/2+3*(5-3) Varför blev det tvetydigt? Vi vill att * och / ska ha högre prioritet än + och - Men detta finns inte med i grammatiken Ett mer detaljerat resonemang om hur aritmetiska uttryck ser ut: ett uttryck består av en eller flera termer (separerade av + eller ) varje term består av en eller flera faktorer (separerade av eller /) varje faktor är antingen ett tal, eller ett uttryck omgivet av parenteser
98 Grammatik för aritmetiska uttryck, version 3 Ny, bättre, grammatik för aritmetiska uttryck: Expr Term Expr + Term Expr Term Term Factor Term Factor Term/Factor Factor Num (Expr)
99 Grammatik för aritmetiska uttryck, version 3 Ny, bättre, grammatik för aritmetiska uttryck: Syntaxträd för 3*2+1: Expr Term Expr + Term Expr Term Term Factor Term Factor Term/Factor Factor Num (Expr) Expr Expr + Term Term Factor Term * Factor Num(1) Factor Num(2) Num(3)
100 Eliminera tvetydighet Tyvärr är det i allmänhet väldigt svårt att se på en grammatik om den är tvetydig eller inte
101 Eliminera tvetydighet Tyvärr är det i allmänhet väldigt svårt att se på en grammatik om den är tvetydig eller inte Har man tur (eller otur...) och hittar två olika syntax-träd för samma sträng så vet man att grammatiken är tvetydig
102 Eliminera tvetydighet Tyvärr är det i allmänhet väldigt svårt att se på en grammatik om den är tvetydig eller inte Har man tur (eller otur...) och hittar två olika syntax-träd för samma sträng så vet man att grammatiken är tvetydig Men det finns inget enkelt sätt att övertyga sig om att en grammatik är otvetydig (Att avgöra om en grammatik är tvetydig är ett så kallat oavgörbart problem det existerar ingen algoritm för att göra detta.)
103 Idag Lexikal analys Härledningar och syntaxträd Omskrivning av grammatiker Rekursiv medåkning och LL(1)-grammatiker
104 Grammatik för binära träd BinTree Leaf LParen Number RParen Branch LParen BinTree Comma BinTree RParen
105 Grammatik för binära träd BinTree Leaf LParen Number RParen Branch LParen BinTree Comma BinTree RParen Slutsymboler: Leaf: strängen leaf Branch: strängen branch Number: [0-9]+ LParen, RParen, Comma: parenteser och kommatecken
106 Grammatik för binära träd BinTree Leaf LParen Number RParen Branch LParen BinTree Comma BinTree RParen Slutsymboler: Leaf: strängen leaf Branch: strängen branch Number: [0-9]+ LParen, RParen, Comma: parenteser och kommatecken Exempel: branch(branch(leaf(17),leaf(42)),leaf(5))
107 Grammatik för binära träd BinTree Leaf LParen Number RParen Branch LParen BinTree Comma BinTree RParen Slutsymboler: Leaf: strängen leaf Branch: strängen branch Number: [0-9]+ LParen, RParen, Comma: parenteser och kommatecken Exempel: branch(branch(leaf(17),leaf(42)),leaf(5)) Efter lexikal analys: Branch, LParen, Branch, LParen, Leaf, LParen, Number, RParen, Comma, Leaf, LParen, Number, RParen, RParen, Comma, Leaf, LParen, Number, RParen, RParen
108 Rekursiv medåkning Rekursiv medåkning är en meta-algoritm för att konstruera en parser för en grammatik.
109 Rekursiv medåkning Rekursiv medåkning är en meta-algoritm för att konstruera en parser för en grammatik. Huvudidé: en funktion per icke-slutsymbol, som är ansvarig för att parsa den icke-slutsymbolen. tittar på nästa token i indata och väljer produktionsregel baserat på det sedan rekursiva anrop för att parsa de olika delarna av högerledet
110 Rekursiv medåkning för binära träd BinTree Leaf(Number) Branch(BinTree, BinTree)
111 Rekursiv medåkning för binära träd BinTree Leaf(Number) Branch(BinTree, BinTree) Bara en icke-slutsymbol, vi ska ha en funktion BinTree som är ansvarig för att parsa BinTree
112 Rekursiv medåkning för binära träd BinTree Leaf(Number) Branch(BinTree, BinTree) Bara en icke-slutsymbol, vi ska ha en funktion BinTree som är ansvarig för att parsa BinTree ParseTree BinTree() { Token t = NextToken(); if (t.type == Leaf) { if (NextToken().type!= LParen) throw SyntaxError(); Token Num = NextToken(); if (Num.type!= Number) throw SyntaxError(); if (NextToken().type!= RParen) throw SyntaxError(); return new LeafNode(Num.data); } else if (t.type == Branch) { if (NextToken().type!= LParen) throw SyntaxError(); ParseTree left = BinTree(); if (NextToken().type!= Comma) throw SyntaxError(); ParseTree right = BinTree(); if (NextToken().type!= RParen) throw SyntaxError(); return new BranchNode(left, right); } }
113 Rekursiv medåkning för binära träd BinTree Leaf(Number) Branch(BinTree, BinTree) Fullständig Java-implementation av lexikal Bara en icke-slutsymbol, analys och rekursiv vi skamedåknings-parser ha en funktion BinTree för som är ansvarig för binära att parsa trädbintree finns på kurshemsidan under kursmaterial för dagens föreläsning ParseTree BinTree() { Token t = NextToken(); if (t.type == Leaf) { if (NextToken().type!= LParen) throw SyntaxError(); Token Num = NextToken(); if (Num.type!= Number) throw SyntaxError(); if (NextToken().type!= RParen) throw SyntaxError(); return new LeafNode(Num.data); } else if (t.type == Branch) { if (NextToken().type!= LParen) throw SyntaxError(); ParseTree left = BinTree(); if (NextToken().type!= Comma) throw SyntaxError(); ParseTree right = BinTree(); if (NextToken().type!= RParen) throw SyntaxError(); return new BranchNode(left, right); } }
114 Rekursiv medåkning för aritmetiska uttryck? För att skriva en parser för detta med rekursiv medåkning ska vi ha tre funktioner Expr, Term, Factor Expr Term Expr + Term Expr Term Term Factor Term Factor Term/Factor Factor Num (Expr)
115 Rekursiv medåkning för aritmetiska uttryck? För att skriva en parser för detta med rekursiv medåkning ska vi ha tre funktioner Expr, Term, Factor ParseTree Factor() { Token t = NextToken(); if (t.type == Num) { // produktionsregel 1 return NumberNode(t.value); } else { // produktionsregel 2 if (t.type!= LParen) throw SyntaxError(); ParseTree subexpression = Expr(); if (NextToken().type!= RParen) throw SyntaxError(); } } Expr Term Expr + Term Expr Term Term Factor Term Factor Term/Factor Factor Num (Expr)
116 Rekursiv medåkning för aritmetiska uttryck? För att skriva en parser för detta med rekursiv medåkning ska vi ha tre funktioner Expr, Term, Factor ParseTree Factor() { Token t = NextToken(); if (t.type == Num) { // produktionsregel 1 return NumberNode(t.value); } else { // produktionsregel 2 if (t.type!= LParen) throw SyntaxError(); ParseTree subexpression = Expr(); if (NextToken().type!= RParen) throw SyntaxError(); } } ParseTree Term() { Token t = NextToken(); TODO: hur veta vilken produktionsregel som ska användas??? } Expr Term Expr + Term Expr Term Term Factor Term Factor Term/Factor Factor Num (Expr)
117 LL(1)-grammatiker En grammatik som man kan parsa med rekursiv medåkning kallas för en LL(1)-grammatik Expr Term Expr + Term Expr Term Term Factor Term Factor Term/Factor Factor Num (Expr)
118 LL(1)-grammatiker En grammatik som man kan parsa med rekursiv medåkning kallas för en LL(1)-grammatik Den här grammatiken för aritmetiska uttryck är inte LL(1) och kan inte parsas med rekursiv medåkning Expr Term Expr + Term Expr Term Term Factor Term Factor Term/Factor Factor Num (Expr)
119 LL(1)-grammatiker En grammatik som man kan parsa med rekursiv medåkning kallas för en LL(1)-grammatik Den här grammatiken för aritmetiska uttryck är inte LL(1) och kan inte parsas med rekursiv medåkning Expr Term Expr + Term Expr Term Term Factor Term Factor Term/Factor Factor Num (Expr) (Ettan står för att vi tittar ett token framåt och bestämmer oss för vilken produktionsregel som ska användas, mer generellt finns LL(k) där vi tittar på de kommande k tokens när vi ska välja produktionsregel)
120 Nästa föreläsning Olika typer av grammatiker Kontextfria LL-grammatiker LR-grammatiker Kanske lite om parser-generatorer Sammanfattning av kursavsnittet och anvisningar för kontrollskrivningen
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
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.
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
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
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
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
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 =
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)
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
Definition. Mängden av reguljära uttryck på alfabetet Σ definieras av. om α och β är reguljära uttryck så är (α β) ett reguljärt uttryck
Lunds tekniska högskola Datavetenskap Lennart Andersson Föreläsningsanteckningar EDAF10 6 Reguljära uttryck I unix-skal finns ange enkla mönster för filnamn med * och?. En del program, t ex emacs, egrep
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
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
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
Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt
Binära träd (forts) Ett binärt träd kan lagras i ett enda sammanhängande minne Roten har index 1 Vänster barn till nod i har index 2*i Höger barn till nod i har index 2*i + 1 Föräldern till nod i har index
PROV I MATEMATIK Automatateori och formella språk DV1 4p
UPPSALA UNIVERSITET Matematiska institutionen Salling (070-6527523) PROV I MATEMATIK Automatateori och formella språk DV1 4p 19 mars 2004 SKRIVTID: 15-20. POÄNGGRÄNSER: 18-27 G, 28-40 VG. MOTIVERA ALLA
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
Föreläsning 13. Träd
Föreläsning 13 Träd Träd Ett träd är en datastruktur som tillåter oss att modellera sådant som vi inte kan modellera med linjära datastrukturer. Ett datavetenskapligt träd består av noder med pilar emellan.
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
11. Reguljära uttryck och grammatiker
Objektorienterad modellering och diskreta strukturer 11. Reguljära uttryck och grammatiker Sven Gestegård Robertz Datavetenskap, LTH 2014 Rekaputilation Vi har talat om satslogik och härledning predikatlogik
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
Klassdeklaration. Metoddeklaration. Parameteröverföring
Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar
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
11. Reguljära uttryck och grammatiker
Objektorienterad modellering och diskreta strukturer 11. Reguljära uttryck och grammatiker Sven Gestegård Robertz Datavetenskap, LTH 2015 Rekaputilation Vi har talat om satslogik och härledning predikatlogik
b) S Ø aa, A Ø aa» bb, B Ø aa» bc, C Ø ac» bc» 2. Låt L vara språket över 8a< som nedanstående NFA accepterar.
Salling, 070-6527523 TID : 9-14 HJÄLPMEDEL : Inga BETYGSGRÄNSER : G 18p, VG 28p SKRIV TYDLIGT OCH MOTIVERA NOGA! PROV I MATEMATIK AUTOMATEORI & FORMELLA SPRÅK DV1, 4 p 20 MARS 2002 1. Språket L över alfabetet
Föreläsning 2 5/6/08. Reguljära uttryck 1. Reguljära uttryck. Konkatenering och Kleene star. Några operationer på språk
Reguljära uttryck Ändliga automater och reguljära uttryck Språk som är och inte är reguljära Konkatenering och Kleene star Två strängar u och v (på alfabetet )kan konkateneras till strängen uv Givet två
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
Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2009
Kompilatorteknik Görel Hedin Datavetenskap Lunds Tekniska Högskola Temaföreläsning, Datorer i system, 2009 Kompilatorteknik källkod kompilator maskinkod Teknik för att bygga verktyg för formella språk.
12. Relationer och funktioner
Objektorienterad modellering och diskreta strukturer 12. Relationer och funktioner Sven Gestegård Robertz Institutionen för datavetenskap, LTH 2013 Laboration 4 Syntaxanalys Grammatik för (vår delmängd
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
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
Lite mer psykologi. L2: Automater, Sökstrategier. Top-down. Kimballs sju principer
Lite mer psykologi Perception: yntaktiskt bearbetning: emantisk bearbetning PERON() & LIKE(, y) L2: Automater, ökstrategier Korttidsminnet D4510 Parsningsalgoritmer Höstterminen 200 Långtidsminne Anders
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
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
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
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
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
12. Relationer och funktioner
Objektorienterad modellering och diskreta strukturer 12. Relationer och funktioner Sven Gestegård Robertz Datavetenskap, LTH 2014 Laboration 4 Syntaxanalys Grammatik för (vår delmängd av) satslogiska uttryck
Föreläsning 3. Stack
Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista ADT Stack Grundprinciper: En stack
Tentamen Datastrukturer D DAT 035/INN960
Tentamen Datastrukturer D DAT 035/INN960 22 december 2006 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng från övningarna tillkommer.) Betygsgränser,
Föreläsning 11. ADT:er och datastrukturer
Föreläsning 11 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
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
10. Mängder och språk
Objektorienterad modellering och diskreta strukturer 10. Mängder och språk Sven Gestegård Robertz Institutionen för datavetenskap, LTH 2013 Rekaputilation Vi har talat om satslogik, predikatlogik och härledning
Ö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.........................
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...
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,
Introduktion till programmering och Python Grundkurs i programmering med Python
Introduktion till programmering och Python Hösten 2009 Dagens lektion Vad är programmering? Vad är en dator? Filer Att tala med datorer En första titt på Python 2 Vad är programmering? 3 VAD ÄR PROGRAMMERING?
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
Matematik för språkteknologer
1 / 21 Matematik för språkteknologer 3.3 Kontext-fria grammatiker (CFG) Mats Dahllöf Institutionen för lingvistik och filologi Februari 2014 2 / 21 Dagens saker Kontext-fria grammatiker (CFG). CFG kan
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
Användning av stack: evaluera uttryck i RPN
(28 september 2010 T9.1 ) Användning av stack: evaluera uttryck i RPN /* rpn.c */ #include "stack.h" /** Eget interface till stackmekanismen för att få en stack med double */ static Stack operands; //
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
TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18
TDDC74 Programmering: Abstraktion och modellering Datortenta - 017-10-7, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis
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)
Introduktion till programmering D0009E. Föreläsning 1: Programmets väg
Introduktion till programmering D0009E Föreläsning 1: Programmets väg 1 Vad är en dator? En maskin vars beteende styrs av de innehållet (bitmönster) som finns lagrade i datorns minne (inte helt olikt förra
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
Datorspråk Breddgivande föreläsning
1 2 TDDC10 Perspektiv på datateknik/datavetenskap TDDC79 Perspektiv på informationsteknologi TDP001 Handhavande av datormiljö (D, IT, C, IP) Datorspråk Breddgivande föreläsning språk med textuell representation
Grundläggande datalogi - Övning 1
Grundläggande datalogi - Övning 1 Björn Terelius October 30, 2008 Python är ett tolkat språk som kan köras interaktivt. tcs-ray:~/grudat08>python >>> 11+3*4 23 >>> a = 15 >>> b=a >>> print "a =", a, "b
Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass
Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klassen Mio ffl Särfall ffl Interface Kungl. Tekn. Högskolan
Föreläsning 3. Stack
Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista Evaluate postfix expressions Läsanvisningar
TDDC77 Objektorienterad Programmering
TDDC77 Objektorienterad Programmering Föreläsning 3 Sahand Sadjadee IDA, Linköpings Universitet Hösttermin 2018 Outline Operatorer Java Standard Library Inmatning Operatorer operatorer En operator är en
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
Föreläsning 3: Typomvandling, villkor och val, samt textsträngar
Föreläsning 3: Typomvandling, villkor och val, samt textsträngar Camilla Kirkegaard camilla.kirkegaard@liu.se Linköpings universitet Sweden October 14, 2013 1 Innehåll n n n n n Repetition Typomvandlingar
Tentamen Datastrukturer (DAT036/DAT037/DIT960)
Tentamen Datastrukturer (DAT036/DAT037/DIT960) Datum och tid för tentamen: 2016-04-07, 14:00 18:00. Författare: Nils Anders Danielsson. (Tack till Per Hallgren och Nick Smallbone för feedback.) Ansvarig:
TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.
1 (8) TENTMEN: lgoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. örja varje uppgift på ett nytt blad. Skriv inga lösningar i tesen. Skriv ditt idnummer
Konstruktion av datorspråk
Konstruktion av datorspråk Fö4: Domänspecifika språk och parsning Peter Dalenius petda@ida.liu.se Institutionen för datavetenskap Linköpings universitet 2009-02-12 Domänspecifika språk Ett domänspecifikt
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
Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2
Objektorienterad programmering E Algoritmer Linjär sökning Binär sökning Tidsuppskattningar Föreläsning 9 Vad behöver en programmerare kunna? (Minst) ett programspråk; dess syntax och semantik, bibliotek
Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition):
Översikt Motivering Syntax och semantik Imperativa språkets byggstenar och Python Datatyper Tilldelning och uttryck Kontrollstrukturer (på satsnivå) Subprogram Relaterade avsnitt: PL 3.1-3.2, 5.1-5.3,
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
Datorlingvistisk grammatik
Datorlingvistisk grammatik Kontextfri grammatik, m.m. http://stp.lingfil.uu.se/~matsd/uv/uv11/dg/ Mats Dahllöf Institutionen för lingvistik och filologi Februari 2011 Denna serie Formella grammatiker,
Algoritmer. Två gränssnitt
Objektorienterad programmering E Algoritmer Sökning Linjär sökning Binär sökning Tidsuppskattningar Sortering Insättningssortering Föreläsning 9 Vad behöver en programmerare kunna? (Minst) ett programspråk;
Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)
Programmönster: # Listan som sekvens, Rekursiv process Enkel genomgång av sekvens (element på toppnivån i en lista)) TDDC60 Programmering: abstraktion och modellering Föreläsning 5 Rekursiva och iterativa
Sökning och sortering
Sökning och sortering Programmering för språkteknologer 2 Sara Stymne 2013-09-16 Idag Sökning Analys av algoritmer komplexitet Sortering Vad är sökning? Sökning innebär att hitta ett värde i en samling
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
Obligatorisk uppgift 5
(5 oktober 2018 Symbolisk kalkylator 1 ) Obligatorisk uppgift 5 En kalkylator som hanterar uttryck symboliskt dvs värden är uttryck inte bara tal. Uppgiften exemplifierar: objektorientering återanvändning
Tentamen Datastrukturer (DAT037)
Tentamen Datastrukturer (DAT07) Datum och tid för tentamen: 2016-01-09, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och ca
Dynamisk programmering
Algoritmer, datastrukturer och komplexitet, hösten 27 Uppgifter till övning 4 Dynamisk programmering På denna övning är det också inlämning av skriftliga lösningar av teoriuppgifterna till labb 2 och muntlig
Programmering för språkteknologer II, HT2011. Rum
Programmering för språkteknologer II, HT2011 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv11/pst2/ Idag - Hashtabeller - Flerdimensionella arrayer (2D) 2 Repetition -
Programmeringsmetodik DV1 Programkonstruktion 1. Moment 9 Om högre ordningens funktioner. PK1&PM1 HT-06 moment 9 Sida 1 Uppdaterad
Programmeringsmetodik DV1 Programkonstruktion 1 Moment 9 Om högre ordningens funktioner PK1&PM1 HT-06 moment 9 Sida 1 Uppdaterad 2006-09-06 Anonyma funktioner igen En funktion som inte är namngiven kallas
Tentamen Datastrukturer (DAT036)
Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2013-12-16, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och
Teoretisk del. Facit Tentamen TDDC (6)
Facit Tentamen TDDC30 2014-08-29 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Vad är skillnaden mellan synligheterna public, private och protected? (1p) Svar:public: Nåbar för
Svar till vissa uppgifter från första veckan.
Svar till vissa uppgifter från första veckan. Svar till kortuppgifter F:. Ja! Förhoppningsvis så ser man direkt att g fx) är ett polynom. Vidare så gäller det att g fα) = gfα)) = gβ) = 0. Använd faktorsatsen!
Tentamen Datastrukturer (DAT036)
Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2014-04-25, 14:00 18:00. Författare: Nils Anders Danielsson. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker
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
Ö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
Repetition C-programmering
Repetition C-programmering Viktor Kämpe C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. Repetition
Språket Python - Del 1 Grundkurs i programmering med Python
Hösten 2009 Dagens lektion Ett programmeringsspråks byggstenar Några inbyggda datatyper Styra instruktionsflödet Modulen sys 2 Ett programmeringsspråks byggstenar 3 ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR
Grundläggande logik och modellteori
Grundläggande logik och modellteori Kapitel 6: Binära beslutsdiagram (BDD) Henrik Björklund Umeå universitet 22. september, 2014 Binära beslutsdiagram Binära beslutsdiagram (Binary decision diagrams, BDDs)
BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X
Algoritmer och Datastrukturer Kary FRÄMLING/Göran PULKKIS (v23) Kap. 7, Sid 1 BINÄRA TRÄD Träd används för att representera olika slags hierarkier som ordnats på något sätt. Den mest använda trädstrukturen
Tentamen i Objektorienterad modellering och diskreta strukturer
Lunds Tekniska Högskola Datavetenskap Tentamen EDAF10 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och diskreta strukturer Vid bedömningen kommer hänsyn att tas till lösningens kvalitet.
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.
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
Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T
Algoritmer och datastrukturer H I 1 0 2 9 HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T Föreläsning 1 Inledande om algoritmer Rekursion Stacken vid rekursion Rekursion iteration Möjliga vägar
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
Föreläsning Datastrukturer (DAT037)
Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-11-23 Idag Mer om grafer: Minsta uppspännande träd (för oriktade grafer). Djupet först-sökning. Minsta uppspännande träd Träd (utan rot)
F3: Recursive descent, tokenisering, avbildningar och undantag. Carl Nettelblad
F3: Recursive descent, tokenisering, avbildningar och undantag Carl Nettelblad 2017-04-03 Säg vad du vill göra Varför skriver vi kod? För att få datorn att göra det vi vill För att själva läsa koden För
Tentamen Datastrukturer (DAT036)
Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2012-08-24, 8:30 12:30. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 9:30 och ca
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 12 Anton Grensjö grensjo@csc.kth.se 10 december 2015 Anton Grensjö ADK Övning 12 10 december 2015 1 / 19 Idag Idag Komplexitetsklasser Blandade uppgifter
DD1361 Programmeringsparadigm HT15
DD1361 Programmeringsparadigm HT15 Logikprogrammering 3 Dilian Gurov, TCS Idag Induktiva datatyper: Träd (inte inbyggd) Binära träd utan data Binära träd med data Prolog-specifika konstruktioner Negation,
Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd
Föreläsning 8 Innehåll Datastrukturer i kursen Träd, speciellt binära träd egenskaper användningsområden implementering Undervisningsmoment: föreläsning 8, övningsuppgifter 8, lab 4 Avsnitt i läroboken: