Samenvatting hoorcolleges Vertalerbouw

Maat: px
Weergave met pagina beginnen:

Download "Samenvatting hoorcolleges Vertalerbouw"

Transcriptie

1 Samenvatting hoorcolleges Vertalerbouw J.H. Jongejan 7 juni 2010 LaTeX van Hedde Bosman en Jan Jongejan. 1

2 Inhoudsopgave 1 Voorbeeld van een vertaling Brontaal (source language) Doeltaal (object- of target-language) Fasen in een vertaler Symbol Table Scanner Parser Semantische analyse Genereratie tussencode Code optimalisatie Code generatie Assembly Talen en Automaten in het kort Reguliere expressies Lemma van Arden Omzetting reguliere grammatica in RE Automaten De structuur van een Reguliere Expressie Berekening van functiewaarden in de knopen Constructie accepterend programma Grammatica s Constructie van een equivalente gereduceerde grammatica Stapelautomaten 11 7 Implementatie van een topdown parser Topdown parser met expliciete stapel Implementatie recursive descent parser (zonder error recovery) Recursive descent parser met errorrecovery Hulpprocedures Foutafhandeling tijdens semantische analyse (geen tentamenstof) Bottom-up parser Het bepalen van de toestanden van de stapelautomaat Action en Goto table LR(1) sets of items Attributengrammatica s (géén tentamenstof) Code generatie Representatie codesegment van een procedure aanroep Code segment procedure declaratie Code bij een procedure aanroep Representatie AR van een (procedure) block Naamgeving binnen blocks (of hoofdprogramma) Naamgeving in een programma met procedures Geheugengebruik tijdens de activation van r Voorbeeld van gebruik van functies als parameters Formele procedure parameters Geheugengebruik in vb

3 1 Voorbeeld van een vertaling 1.1 Brontaal (source language) { N 0 } x := 0; while (x + 1) * (x + 1) <= N do x:= x + 1; { x 2 N < (x + 1) 2 } 1.2 Doeltaal (object- of target-language) M(x) := 0 lw: R0 := M(x) R0 := R0 + 1 R1 := R0 R1 := R1 * R0 cc := R1? N jmpgtr lew M(x) := R0 jmp lw lew: 2 Fasen in een vertaler frontend Analyse Bronprogramma Scanner Parser Semantische analyse Generatie tussencode Symbol table backend Synthese Code optimalisatie Code generatie Assembly Doelprogramma Alle fasen gebruiken een module voor de foutafhandeling. De fasen Semantische analyse en Generatie tussencode worden gezien als semantische acties. 3

4 2.1 Symbol Table De symbol table bevat: string table attribuutwaarden voor elke constante, type, variabele en procedure-identifier 2.2 Scanner De lexicale analyse. Invoer: Rij characters (letters, leestekens,...). Beschrijving: Reguliere Expressies (formeel). Uitvoer: Rij tokens Evt. foutmeldingen Taken: Groeperen van deelrijen characters in invoer tot tokens Signaleren van onjuiste characters Verwijderen van spaties en commentaar 2.3 Parser De contextvrije of syntactische analyse. Invoer: Rij tokens Beschrijving: Contextvrije Grammatica (CFG) (formeel). Uitvoer: Een syntax tree (semantische boom) of een parse tree Evt. foutmeldingen Taken: Bepalen van de structuur van de rij tokens (tree) Controleren van de invoer en signaleren van de fouten 2.4 Semantische analyse Invoer: Semantische boom of parsetree Beschrijving: of Contextvrije grammatica aangevuld met semantische routines of Attributengrammatica (formeel) of Natuurlijke taal Uitvoer: (Gewijzigde) Semantische boom Evt. foutmeldingen Taken: 4

5 Verwerken van declaraties Controleren of gebruikte identifiers gedeclareerd zijn Controleren of programma type correct is Identificeren van operatoren impliciete coërcies expliciet maken een programma voorbeeldje ( geeft een fout aan): PROGRAM vb; VAR s : SET OF [0.. 31] ; k,l : integer ; r1,r2 : real ; PROCEDURE p (f1: integer; VAR f2: integer) f2 := f1 * f1; END (* p *) k := m ; // m s := l ; // l geen set s := s * [8.. 15] ; // doorsnede r2 := 2 * r2 ; // coercie 2.0 p(k, 3, l) END (* vb *) // 2 params, 3 args 2.5 Genereratie tussencode Invoer: Semantische boom Beschrijving: of Attributen grammatica of Semantische routines Uitvoer: of Tussencode (3-adres instructies) of Register Transfers (zie 1.2) Taak: Omvormen van de semantische boom naar tussencode 5

6 2.6 Code optimalisatie Invoer: Tussencode Beschrijving:... Uitvoer: Tussencode (van dezelfde vorm als de invoer) Taak: Wijzigen van de tussencode zodanig dat het aantal operaties tijdens uitvoering van het vertaalde programma wordt teruggebracht 2.7 Code generatie Invoer: Tussencode Beschrijving:... Uitvoer: Rij (pseudo-) machine instructies Taken: Afbeelden van variabelen op het geheugen van de doelmachine Kiezen van de instructies (code selection) Peephole optimalisatie Register allocatie 2.8 Assembly Invoer: Rij (pseudo-) machine instructies Beschrijving:... Uitvoer: Tabellen met machine instructies en overige gegevens voor de linker/loader Taak: Instructies in het gewenste formaat coderen en wegschrijven 3 Talen en Automaten in het kort Een alfabet T is een niet lege eindige verzameling symbolen. Een rij a 1 a 2... a n van n symbolen a i, 1 i n uit een alfabet T wordt een string over het alfabet T genoemd. De lege string, notatie ε, is de string die geen symbolen bevat. De lengte van een string s = a 1 a 2... a n, notatie s is het aantal symbolen in de string s. ε = 0. T is de verzameling van alle strings over het alfabet T, inclusief de lege string. Op de verzameling T is de volgende binaire operatie gedefinieerd: De concatenatie van de strings u = a 1 a 2... a n T en v = b 1 b 2... b m T, notatie uv is de string uv = a 1 a 2... a n b 1 b 2... b m T Bovendien geldt voor alle u T : εu = uε = u. De concatenatie is een associatieve operatie. Zij x = uv met u, v T, dan noemen we u een prefix van x en v een suffix van x. Een taal L over een alfabet T is een deelverzameling van T. Het product (concatenatie van verzamelingen) van twee talen L 1 en L 2, notatie L 1.L 2, is de verzameling strings u 1 u 2 met u 1 L 1 en u 2 L 2 : notatie L 1.L 2. Dit product is associatief. Het eenheidselement is {ε}. De n de macht van een taal L (n 0) wordt gedefineerd door: L 0 = {ε} L n = L.L n 1 (n 1) De transitieve afsluiting L + van een taal L wordt gedefineerd door: L + = n=1 Ln 6

7 De star of de (Kleene) closure van een taal L, notatie L, wordt gedefineerd door: L = L 0 L + Een grammatica G is een 4-tupel (T, N, P, S) waarin: T het alfabet van eindsymbolen is (Terminals). N het alfabet van hulpsymbolen is (Nonterminals). (V = T N wordt het volledige alfabet of Vocabulaire genoemd) P een eindige verzameling producties is, dat wil zeggen expressies van de vorm ϕ ψ met ϕ (T N) + en ψ (T N). S het startsymbool van de grammatica G is. (S N). Zij G = (T, N, P, S) een grammatica. De string X heet direct afleidbaar van X, X leidt direct tot X, of X genereert X wanneer er strings σ, τ, ϕ en ψ (T N) zijn zodanig dat X = σϕτ en X = σψτ en ϕ ψ P. Notatie: X G X of X X. De relatie G (of ) op (T N) is de reflexieve transitieve afsluiting van de relatie G (of ) op (T N). Wanneer X G X zeggen we dat X afleidbaar is van X, of dat X leidt tot X, of dat X in nul of meer stappen X genereert. Een string ϕ (T N) heet een zinsvorm (sentential form) van de grammatica G wanneer S G ϕ. Bevat een zinsvorm ϕ uitsluitend eindsymbolen, ϕ T dan noemen we ϕ een zin (sentence) van G. De taal gegenereerd door de grammatica G, notatie L(G), is de verzameling zinnen van G. Twee grammatica s G 1 en G 2 zijn equivalent dan en slechts dan wanneer L(G 1 ) = L(G 2 ). 3.1 Reguliere expressies Een reguliere expressie (RE) over een alfabet T en de door deze RE beschreven taal worden als volgt gedefinieerd: 1. is een RE voor de taal en ε is een RE voor {ε} 2. a is een RE voor {a} als a T 3. Wanneer E 1 en E 2 RE s over T zijn die de talen L(E 1 ) en L(E 2 ) beschrijven dan is: (E 1 E 2 ) of (E 1 + E 2 ) een RE voor L(E 1 ) L(E 2 ), (E 1 E 2 ) een RE voor L(E 1 ).L(E 2 ) en (E 1 ) een RE voor L(E 1 ). Twee RE s E 1 en E 2 over een alfabet T zijn equivalent dan en slechts dan wanneer L(E 1 ) = L(E 2 ). Notatie: E 1 = E 2. Als E 1, E 2 en E 3 RE s over een alfabet T zijn, dan geldt: a) E 1 E 1 = E 1, E 1 = E 1 b) E 1 E 2 = E 2 E 1 c) (E 1 E 2 ) E 3 = E 1 (E 2 E 3 ) = E 1 E 2 E 3 d) (E 1 E 2 )E 3 = E 1 (E 2 E 3 ) = E 1 E 2 E 3 e) E 1 ε = εe 1 = E 1, E 1 = E 1 = f) (E 1 E 2 )E 3 = E 1 E 3 E 2 E 3 g) E 1 (E 2 E 3 ) = E 1 E 2 E 1 E 3 h) E 1 E 1 = E 1 i) (E 1 ) = E 1 7

8 j) E 1 E 1 = E 1 E 1, E 1 (E 2 E 1 ) = (E 1 E 2 ) E 1 k) ε E 1 E 1 = E 1 l) ε = ε, = ε m) (E 1 E 2 ) = (E 1 E 2 ) = (E 1 E 2 ) n) (E 1 E 2 ) E 1 = (E 1 E 2 ) o) (E 1 E 2 ) = (E 1 E 2 ) E 2 ε p) (E 1 E 2 ) = E 1 (E 1 E 2 ) ε Lemma van Arden E 1 = E 2 E 3 E 1 = E 2 E 1 E 3 en E 1 = E 2 E 1 E 3 ε L(E 2 ) E 1 = E 2 E Omzetting reguliere grammatica in RE De taal gegenereerd uit een symbool X V van een grammatica G is: L(X) = {u u T X G u} De reguliere grammatica wordt geschreven als een stelsel vergelijkingen in de onbekende nonterminals. Alle producties in G met dezelfde nonterminal als linkerlid worden samengevat in één vergelijking. Het stelsel vergelijkingen wordt opgelost door middel van een schoonveegproces. De RE voor het startsymbool van G is een beschrijving van de taal die door de grammatica gegenereerd wordt. 3.2 Automaten Een eindige automaat (FA) bestaat uit een invoerband, een leeskop en een besturingseenheid. rest van de invoer e e n s t r i n g Leeskop Invoerband Besturingseenheid Een (niet-deterministische) eindige automaat (NFA) is een 5-tupel (Q, Σ, δ, q 0, F ) met: Q het toestandsalfabet, Σ het invoeralfabet, δ de (totale) overgangsfunctie: δ : Q (Σ {ε}) 2 Q, Hierbij is 2 Q de verzameling van alle deelverzamelingen van Q. q 0 Q de begintoestand, F Q de verzameling accepterende toestanden. 8

9 Een configuratie van de NFA N = (Q, Σ, δ, q 0, F ) is een expressie van de vorm: qx met q Q en x Σ Op de verzameling configuraties van de NFA N wordt de relatie N (gaat in één stap over in) gedefinieerd door: qx N q x dan en slechts dan als q δ(q, ε) en qax N q x dan en slechts dan als q δ(q, a) voor a Σ, x Σ en q, q Q. ( N is de reflexieve transitieve afsluiting.) Een string x Σ wordt door de NFA N geaccepteerd dan en slechts dan wanneer (q : q F : q 0 x N q). L(N) = {x x Σ (q : q F : q 0 x N q)} is de geaccepteerde taal. Een NFA is een deterministische eindige automaat (DFA) dan en slechts dan als: (q : q Q : δ(q, ε) = ) (a, q : a Σ q Q : #(δ(q, a)) 1) Een voorspellende (deterministische) eindige automaat (PFA) is een 6-tupel (Q, Σ, δ, q 0, F, A) met: Q het toestandsalfabet, Σ het invoeralfabet ( Σ), δ de functie δ : Q (Σ { } Q A de (gedeeltelijke) overgangsfunctie, q 0 de begintoestand, q 0 Q, F Q de verzameling accepterende toestanden, A het alfabet {Read, Skip} (Actie-alfabet). De overgangsfunctie δ voldoet aan: (q, q : q, q Q : δ(q, ) (q, Read)). Een configuratie van de PFA is een expressie van de vorm: qx met q Q en x Σ. Op de verzameling configuraties van de PFA P wordt de relatie gedefinieerd door: P qax q x dan en slechts dan als δ(q, a) = (q, Read), en P qax P q ax dan en slechts dan als δ(q, a) = (q, Skip), en q P q dan en slechts dan als δ(q, ) = (q, Skip), voor a Σ, x Σ en q, q Q. P is de reflexieve transitieve afsluiting van P. Als duidelijk is uit de context wie P is laten we die P weg ( ). Een string x Σ wordt door de PFA geaccepteerd dan en slechts dan als (q : q F : q 0 x q ). De door PFA P geaccepteerde taal is L(P ) = {x x Σ (q : q F : q 0 x P q )}. 4 De structuur van een Reguliere Expressie Een reguliere expressie kunnen we representeren door middel van een boomstructuur op dezelfde wijze als we dat met rekenkundige ezpressies kunnen. 4.1 Berekening van functiewaarden in de knopen In knoop k worden nullable(k) en first(k) berekend aan de hand van de vorm van de knoop: knoop(k) nullable(k) ε true a (a Σ) false k 1 k 2 nullable(k 1 ) nullable(k 2 ) k 1 k 2 nullable(k 1 ) nullable(k 2 ) k 1 + k 1 true nullable(k 1 ) 9

10 knoop(k) first(k) ε a (a Σ) {a} k 1 k 2 first(k 1 ) first(k 2 ) k 1 k 2 k 1 k 1 + IF nullable(k 1 ) THEN first(k 1 ) first(k 2 ) ELSE first(k 1 ) first(k 1 ) first(k 1 ) In knoop k i wordt de functie follow berekend. Voor de wortel van de boom k 0 geldt: follow(k 0 ) =. Voor de overige knopen k i wordt de waarde berekend aan de hand van de ouderknoop k: knoop(k) follow(k i ) k 1 k 2 follow(k 1 ) := follow(k) ; follow(k 2 ) := follow(k) k 1 k 2 k 1 k 1 + IF nullable(k 2 ) THEN follow(k 1 ) := follow(k) first(k 2 ) ELSE follow(k 1 ) := first(k 2 ) ; follow(k 2 ) := follow(k) follow(k 1 ) := follow(k) first(k 1 ) follow(k 1 ) := follow(k) first(k 1 ) De functie LA wordt gedefinieerd door: LA(k) = IF nullable(k) THEN first(k) follow(k) ELSE first(k) 4.2 Constructie accepterend programma De afbeelding τ zet nu een knoop van de boom voor een RE om naar een accepterend programmafragment voor die knoop. τ(ε): (* SKIP *) τ(a): IF nextcl = a THEN getcl ELSE error τ(k 1 k 2 ): IF nextcl LA(k 1 ) THEN τ(k 1 ) ELSE τ(k 2 ) τ(k 1 k 2 ): τ(k 1 ) ; τ(k 2 ) τ(k 1 ): WHILE nextcl first(k 1 ) DO τ(k 1 ) τ(k 1 + ): REPEAT τ(k 1 ) UNTIL nextcl first(k 1 ) Hierbij zijn de characters in classes opgedeeld (alle digits, alle letters, etc.). De procedure getcl leest het volgende invoercharacter en bepaalt de waarde van de variabele nextcl. 10

11 5 Grammatica s Een grammatica is een 4-tupel (T, N, P, S), met V = T N, is gereduceerd dan en slechts dan wanneer: (X : X V : (u, v, x : u, v, x T : S uxv uxv)) Een symbool X V termineert dan en slechts dan wanneer: (x : x T : X x) Een symbool X V heet bereikbaar dan en slechts dan wanneer: (u, v : u, v T : S uxv) 5.1 Constructie van een equivalente gereduceerde grammatica Bepaal eerst de verzameling terminerende non-terminals in G. Verwijder alle overige non-terminals uit N en alle producties waarin niet-terminerende non-terminals voorkomen uit P. Resultaat: equivalente grammatica G = (T, N, P, S) Bepaal vervolgens in G de verzameling bereikbare symbolen. Verwijder alle niet bereikbare symbolen en de producties waarin de niet bereikbare symbolen voorkomen. Resultaat: equivalente gereduceerde grammatica G = (T, N, P, S) 6 Stapelautomaten a + b * c Leeskop Invoerband + Ṭ Lees/schrijfkop Besturingseenheid Stapel Een (niet-deterministische) stapelautomaat (NPDA) is een 7-tupel (Q, Σ, Γ, δ, q 0, Z, F ) met: Q het toestandsalfabet, Σ het invoeralfabet, Γ het stapelalfabet, δ de totale stapelfunctie, δ : Γ Q (Σ {ε}) 2 Γ Q, q 0 Q de begintoestand, Z Γ het startsymbool op de stapel, F Q de verzameling accepterende toestanden. Constructie van een NPDA corresponderend met een CFG (T, N, P, S): Kies: Σ = T Γ = T N (= V ) Q = {q 0 } Z = S F = {q 0 } δ wordt alsvolgt gedefinieerd: δ(a, q 0, a) = {(ε, q 0 )} voor a T δ(x, q 0, a) = voor a T, X V, a X δ(a, q 0, ε) = {(ϕ, q 0 ) A ϕ P } voor A N Een configuratie van een NPDA is een 3-tupel (γ, q, x) met γ Γ, q Q en x Σ. Op de verzameling configuraties van de NPDA N wordt de relatie (gaat in één stap over in) gedefinieerd door: N 11

12 (cα, q, ax) N (βα, q, x) dan en slechts dan als (β, q ) δ(c, q, a) en (cα, q, x) N (βα, q, x) dan en slechts dan als (β, q ) δ(c, q, ε). ( N is de reflexieve transitieve afsluiting van N.) Waar mogelijk laten we die N weg. Een string x Σ wordt door een NPDA geaccepteerd dan en slechts dan als: (Z, q 0, x) (ε, q, ε). De taal geaccepteerd door de NPDA N is: L(N) = {x x Σ (q : q Q : (Z, q 0, x) N (ε, q, ε))}. Een voorspellende stapelautomaat (PPDA) is een 5-tupel (Σ, Γ, δ, Z, A) met: Σ het invoeralfabet ( Σ), Γ het stapelalfabet ( Γ), δ de stapelfunctie, δ : Γ (Σ { }) 2 Γ A, Z Γ het startsymbool op de stapel, A (Action) het actie alfabet {Read, Skip}. De stapelfunctie voldoet aan: (c, γ : c Γ γ Γ : (γ, Read) δ(c, )) Een configuratie van een PPDA is een paar (γ, x ) met γ Γ en x Σ. Op de verzameling configuraties van de PPDA P wordt de relatie (gaat in één stap over in) gedefinieerd P door: (cγ, ax ) (βγ, x ) dan en slechts dan (β, Read) δ(c, a) P (cγ, ax ) P (βγ, ax ) dan en slechts dan (β, Skip) δ(c, a) (cγ, ) P (βγ, ) dan en slechts dan (β, Skip) δ(c, ) P is de reflexieve transitieve afsluiting van P.) Waar mogelijk laten we P weg. Een string x Σ wordt door een PPDA geaccepteerd dan en slechts dan als: (S, x ) (, ). De door PPDA P geaccepteerde taal is: L(P ) = {x x Σ (S, x ) P (, )}. Een PPDA is deterministisch dan en slechts dan als (c, a : c Γ a (Σ { }) : #(δ(c, a)) 1) We gaan in het vervolg uit van de uitgebreide grammatica G van grammatica G: G = (T { }, N Z, P {Z S }, Z). Als dat geen verwarring wekt zullen we ook in de uitgebreide grammatica spreken over T, N, S, P. De lookaheadset LA(A α) van een productie A α P is gelijk aan {a a T { } (w, y, ϕ : w T (y = ε y T.{ }) ϕ V : S waϕ wαϕ way). G G Die LA lijkt nogal lastig te bepalen. Verderop blijkt dit toch efficient te kunnen. L Constructie van een PPDA corresponderend met de uitgebreide grammatica van G: Kies: Σ = T Γ = T N Z = Z (startsymbool van G ) De stapelfunctie δ wordt gedefinieerd door: δ(a, a) = {(ε, Read)} voor a T δ(a, b) = voor a T, b T { }, b a δ(a, b) = {(α, Skip) A α P b LA(A α)} δ(a, b) = als geen van de voorgaande geldt De met G corresponderende PPDA is deterministisch dan en slechts dan als: (A α, A β P α β : LA(A α) LA(A β)= ) 12

13 Voor G worden de volgende functies gedefinieerd: first : V 2 T first(ϕ) = {b b T (σ : σ V : ϕ bσ)} G nullable : V Boolean nullable(ϕ) = ϕ ε G follow : N 2 T follow(a) = {b b T (B, σ, τ : B N σ V τ V : B + G σabτ) richters : P 2 T richters(a α) = IF nullable(α) THEN first(α) follow(a) ELSE first(α) FI Wanneer een grammatica gereduceerd is geldt voor elke productie A α P : richters(a α) = LA(A α) Een grammatica is LL(1) dan en slechts dan als voor elk tweetal producties A α en A β, met zelfde linkerlid A en α β, geldt: LA(A α) LA(A β) = Een LL(1) grammatica is niet ambigu. Wanneer een gereduceerde grammatica een linksrecursieve nonterminal bevat is deze grammatica zeker niet LL(1). 7 Implementatie van een topdown parser We gaan uit van een gereduceerde LL(1) grammatica. De eerste implementatie gebruikt een expliciete stapel datastructuur. 7.1 Topdown parser met expliciete stapel We implementeren een topdown parser voor de uitgebreide grammatica voor G E. De grammatica G E kent de volgende producties: E T X, T F Y, X +T X, X, Y F Y, Y, F a b c (E) 13

14 (* initialisaties *) nextsym ; (* initialisatie variabele sym *) initstack ; push( ); push(e); (* stack: E *) WHILE top DO CASE top OF a, b, c, (, ),, +: IF sym = top THEN pop; nextsym END ELSE error E: IF sym {a, b, c, (} THEN (* richters E T X *) pop; push(x); push(t ) END ELSE error T : IF sym {a, b, c, (} THEN pop; push(y ); push(f ) END ELSE error X: IF sym {+} THEN (* richters X +T X *) pop; push(x); push(t ); push(+) END ELSE IF sym {), } THEN (* richters X *) pop ELSE error... END (* CASE *) END (* WHILE *) IF sym THEN error; (* acceptatie *) END 7.2 Implementatie recursive descent parser (zonder error recovery) De tweede implementatie gebruikt een verzameling recursieve procedures: recursive descent. Voor het herkennen van een terminal: PROCEDURE match(fs : tsymbol); IF sym = fs THEN nextsym ELSE error END (* match *) Het hoofdprogramma corresponderend met extra product Z S : 14

15 (* initialisaties *) nextsym ; (* initialisatie sym *) ps; IF sym THEN error; (* acceptatie *) END Voor een string ϕ V worden de statements τ(ϕ) gegenereerd: (* SKIP *) als ϕ = ε match(a) pa τ(ψ) ; τ(x) als ϕ = a T als ϕ = A N als ϕ = ψx met ψ V + en X V Voor het herkennen van een A N met m 2 producties A ϕ 1, A ϕ 2,..., A ϕ m : PROCEDURE pa; IF sym LA(A ϕ 1 ) THEN τ(ϕ 1 ) END ELSE IF sym LA(A ϕ 2 ) THEN τ(ϕ 2 )... END ELSE IF sym LA(A ϕ m ) THEN τ(ϕ m ) END ELSE error END (* pa *); Voor het herkennen van A N die precies één productie A ϕ heeft: PROCEDURE pa; τ(ϕ) END (* pa *); We kunnen ons een test uitsparen met een simpele truc. Kies voor elke nonterminal A N één productieregel als default regel, en wel juuist die productie die het snelst termineert. Verwissel die productie nu met A ϕ m. Het nieuwe recept luidt dan alsvolgt: PROCEDURE pa; (* A ϕ m als default regel *) IF sym LA(A ϕ 1 ) THEN τ(ϕ 1 ) END ELSE IF sym LA(A ϕ 2 ) THEN τ(ϕ 2 )... END ELSE IF sym LA(A ϕ m 1 ) THEN τ(ϕ m 1 ) END ELSE τ(ϕ m ) END END (* pa *); 15

16 7.3 Recursive descent parser met errorrecovery Als we een fout hebben aangetroffen in de invoer is de parser in een geblokkeerde configuratie. Eerst wat hulpdefinities: Een string u T is een geldige prefix van de taal L(G) dan en slechts dan wanneer (v : v T : uv L(G)). Een string v T met uv L(G) wordt een voortzetting (continuation) van de geldige prefix u genoemd. Het symbool a T in de string xay (x, y T ) is het foutsymbool van deze string dan en slechts dan wanneer x een geldige prefix is en xa niet een geldige prefix is. Voor een bepaalde voortzetting v van een geldige prefix x wordt de verzameling anchors gedefinieerd door: anchors(v) = {a T (v p : v p T : v p is een prefix van v xv p a is een geldige prefix} Stel a T is het foutsymbool in xay en S L xϕ, met ϕ = X 1 X 2... X n (n 1, X i V, dan wordt de (geblokkeerde) configuratie (ϕ, ay) hersteld door de volgende acties uit te voeren: 1. Bepaal de voortzetting v = v 1 v 2... v n uit X 1 X 2... X n zodanig dat X i v i door uitsluitend default producties toe te passen. 2. Bepaal de verzameling keys, gedefineerd door keys = n i=1 first(x i). Deze keys zullen we gebruiken als implementatie van anchors(v). 3. Verwijder de vooroplopende symbolen van ay die niet tot de verzameling keys behoren. Geef voor elk verwijderd symbool een foutmelding. Rest van de invoer is ky (een suffix van ay) en k keys. 4. Wijzig de configuratie, te beginnen met (ϕ, ky ), zolang k niet geaccepteerd kan worden, door de stappen uit te voeren die corresponderen met het verwerken van een aantal vooroplopende symbolen (via default producties) van de voortzetting v. Geef voor elk toegevoegd symbool een foutmelding. Hierna laten we zien hoe dit geïmplemteerd kan worden Hulpprocedures PROCEDURE deletion; Verzorg foutmelding: sym deleted PROCEDURE insertion (fs : tsymbol); Verzorg foutmelding: fs inserted PROCEDURE delete (keys : tsymbolset); WHILE NOT (sym IN keys) DO deletion; nextsym END { POST sym keys } END (* delete *); Voor het herkennen van een terminal: 16

17 PROCEDURE match(fs : tsymbol; keys: tsymbolset); IF fs = sym THEN nextsym ELSE delete({f s} + keys); IF sym = fs THEN nextsym ELSE insertion(fs) END END (* match *) Hoofdprogramma corresponderend met de extra productie Z S : (* initialisaties *) nextsym (* initialisatie sym *) ps({ }); delete({ }); (* finalisatie *) END Voor een string ϕ V worden de statements τ(ϕ, keys) gegenereerd: τ(ϕ, keys) (* SKIP *) als ϕ = ε match(a, keys) pa(keys) τ(ψ, keys + first(x)); τ(x, keys) als ϕ = a T als ϕ = A N als ϕ = ψx met ψ V + en X V Voor het herkennen van een string uit L(A) voor A N met precies één productie A ϕ: PROCEDURE pa(keys : tsymbolset); τ(ϕ, keys) END (* pa *); Voor het herkennen van een string uit L(A) voor A N met m 2 producties A ϕ i (1 i m), waarbij A ϕ m de defaultproductie voor A is. (Alleen ϕ m is eventueel nullable!) PROCEDURE pa(keys : tsymbolset); delete(first(a) + keys); IF sym first(ϕ 1 ) THEN τ(ϕ 1, keys) END ELSE IF sym first(ϕ 2 ) THEN τ(ϕ 2, keys)... END ELSE IF sym first(ϕ m 1 ) THEN τ(ϕ m 1, keys) END ELSE τ(ϕ m, keys) END END (* pa *); 7.4 Foutafhandeling tijdens semantische analyse (geen tentamenstof) Statische semantische fouten worden ontdekt tijdens het berekenen van de attributen van de knopen van de abstract syntax tree (AST), en wel bij de controle of de attribuutwaarden aan bepaalde voorwaarden (de context conditions) voldoen. 17

18 Doel: Signaleren van meerdere semantische fouten in de programmatekst in één vertaalslag. Overbodige foutmeldingen moeten worden vermeden evenals niet terechte foutmeldingen (spurious errors). Herstelactie van een semantische fout moet eenvoudig uitgevoerd kunnen worden. In geen geval mag een foutief programma worden geaccepteerd. Uitgangspunt: Een syntactisch correct programma of daarmee corresponderende AST. Inventarisatie mogelijke semantische fouten: 1. Symbolen die door de parser zijn verwijderd (delete actie in error recovery). 2. Symbolen die door de parser zijn toegevoegd (insert actie in error recovery). 3. Niet gedeclareerde identifiers worden gebruikt. 4. Het gebruik van een identifier is niet consistent met de declaratie. 5. Dubbel gedeclareerde identifiers in een block 6. Bij typecontrole van expressies: het gebruik van een operator is niet consistent met de definitie. 8 Bottom-up parser We introduceren het begrip item: een productie met ergens in de rechterkant een., de voortgangswijzer, bijvoorbeeld E T. + E. De T is herkend, we verwachten nog een string afleidbaar uit +E. We leiden nu een bottom-up parser af bij de producties: 1) S asb 2) S A 3) A c 4) B bb 5) B c 8.1 Het bepalen van de toestanden van de stapelautomaat De closure berekening van een toestand van de stapelautomaat: C := "kernel"; repeat oldc := C; forall A α.bβ C do forall B γ P do C := C B.γ until oldc = C 18

19 1. Z S, 2 6. S as B, 7 S asb, 3 B bb, 8 S A, 4 B c, 9 A c, 5 7. S asb red 2. Z S acc 8. B b B, S a SB, 6 B bb, 8 S asb, 3 B c, 9 S A, 4 A c, 5 9. B c red 4. S A red 10. B bb red 5. A c red 8.2 Action en Goto table Een item van de vorm A α.tβ met t T geeft een shift aktie aan (lees t van de input). Een item van de vorm A α. geeft een reduce aktie aan, dat wil zeggen pas de productie A α in omgekeerde richting toe. Soms bevat een toestand zowel een shift als een reduce aktie. We noemen dat een shift/reduce conflict. Een tweede soort conflict is wanneer er in een toestand twee verschillende reducties mogelijk zijn: reduce/reduce conflict. Een voorbeeld: bij de grammatica G met productieregels 1) E E + T 2) E T 3) T T F 4) T F 5) F id 6) F (E) kunnen we opnieuw de toestanden van de herkennende automaat uitrekenen en daaruit de action en goto table construeren. We zien een shift/reduce conflict in de uitgerekende toestanden 2 en 9. We kunnen echter een keuze maken door gebruik te maken van follow(e). Kies voor reductie wanneer het inputsymbol in follow(e) zit en doe anders een shift. Dit alles vinden we terug in de Action en Goto table: id + * ( ) E T F 0 S S6 ACC 2 R2 S7! R2 R2 3 R4 R4 R4 R4 4 R5 R5 R5 R5 5 S4 S S4 S S4 S S6 S11 9 R1 S7! R1 R1 10 R3 R3 R3 R3 11 R6 R6 R6 R6 Om een keuze te maken uit twee reducties moet de doorsnede van de follow sets van beide linkerleden disjunct zijn. Wanneer we zo alle conflicten hebben kunnen oplossen heet de grammatica Simpel LR(1) (SLR(1)). Lukt dit niet met follow informatie dan hebben we een krachtiger parsing algoritme nodig. 19

20 8.3 LR(1) sets of items Een LR(1) item is een paar, bestaande uit een gewoon (LR(0)) item en een lookahead symbol, bijvoorbeeld (E T. + E, ) ). Als LR(1) voorbeeld nemen we de volgende producties: 1) Z S 2) S E = E 3) S f 4) E E + T 5) E T 6) T T + f 7) T f De LR(1) berekening van de closure van een toestand lijkt erg op die van LR(0): C := "kernel"; repeat oldc := C; forall (A α.bβ, a) C do forall B γ P do forall b f irst(βa) do C := C (B.γ, b) until oldc = C Voor de gegeven producties leidt dit tot de volgende toestanden: 1. Z S, {?} 8. S E = E, { } S E = E, { } E E +T, {, +} S f, { }, E T, {=, +} 9. E T, {, +} E E + T, {=, +} T T f, {, +, } T f, {=, +, }, T T f, {=, +, } 10. T f, {, +, }, 2. Z S, {?} 11. T f, {=, +, }, 3. S E = E, { } 12. E E + T, {=, +} E E +T, {=, +} T T f, {=, +, }, 4. E T, {=, +} 13. T T f, {=, +, } T T f, {=, +, }, 14. T T f, {=, +, } 5. S f, { }, T f, {=, +, } 15. E E + T, {, +} T f, {, +, } 6. S E = E, { } T T f, {, +, } E E + T, {, +}, E T, {, +} 16. E E + T, {, +} T f, {, +, } T T f, {, +, } T T f, {, +, }, 17. T T f, {, +, } 7. E E + T, {=, +}, T T f, {=, +, } 18. T T f, {, +, } T f, {=, +, }, We zien een shift/reduce conflict in toestanden 4, 8, 9, 12 en 16. Bovendien een reduce/reduce conflict in toestand 5. Hierbij is het conflict in toestand 5 niet oplosbaar met follow informatie, zodat deze grammatica 20

21 niet SLR(1) is. We zien dat alle conflicten wel opgelost worden met de LR(1) sets of items. Deze grammatica is daarom LR(1). Bij de grammatica G met productieregels 1) Z S 2) S A B A 3) A a A 4) A b 5) B B b 6) B vinden we: 1. Z S, {} 6. S AB A, { } S ABA, { } B B b, {a, b} A aa, {a, b} A aa, { } A b, {a, b} A b, { } 2. Z S, {} 7. A aa, {a, b} 3. S A BA, { } 8. S ABA, { } B Bb, {a, b} B, {a, b} 9. B Bb, {a.b} A b, { } 4. A a A, {a, b} A aa, {a, b} 10. A a A, { } A b, {a, b} A aa, { } A b, { } 5. A b, {a, b} 11. A b, { } 12. A aa, { } Meerdere toestanden zijn gelijk qua eerste component maar verschillen in de tweede component van ieder LR(1) item. Wat gebuert er wanneer we die toestanden mergen? Te mergen toestanden zijn: (4, 10), (5, 11), (7, 12). Mergen levert geen reduce/reduce conflicten op, dan noemen we de grammatica Lookahead LR(1) (LALR(1)). Opmerking bij toestand 9: niet SLR(1), wel LR(1). De Action en Goto tabel zijn nu: a b S A B 1 S4 S acc 3 R6 R6 R6 6 4* S4 S5 7 5* R4 R4 R4 6 S4 S9 8 7* R3 R3 R3 8 R2 R2 R2 9 R5 R5 R4! * = gemerged 9 Attributengrammatica s (géén tentamenstof) Grammatica: int denot : digit SEQUENCE, radix PACK { digit < radix and intdenot < 32767} radix : digit SEQUENCE { radix {2, 8, 10} } 21

22 Correcte zinnen: 1101(2), 1101(10), 776(8) Production Attribute Rule int denot : number { number.r := radix.r;, radix PACK int denot.v := number.v;. CHECK radix.r IN [2,8,10] } radix : digit { radix.r := digit.v } ; radix 1, digit { radix.r := 10 * radix 1.R + digit.v }. digit : { digit.v := } ; ; 9 { digit.v := 9 }. number : digit { number.v := digit.v; check digit.v < number.r } ; number 1, digit { number 1.R := number.r; number.v := number.r * number 1.V + digit.v;. CHECK digit.v < number.r AND number.v } NT attributen-types int denot V {syn} radix R{syn} digit V {syn} number V {syn}, R{inh} T: radnum/int denot number ( radix ) number digit digit digit CDG(T): V ( R V ) ( R V ) V V R V V = Val R = Rad 22

23 10 Code generatie 10.1 Representatie codesegment van een procedure aanroep Vertaling van de declaratie τ(proc p; block_p) en van de aanroep τ(p) moeten we zodanig op elkaar afstemmen dat: 1. het codesegment τ(proc p; block_p) één keer in het doelprogramma voorkomt, 2. tijdens de uitvoering van de instructies in τ(p) de regie wordt overgedragen aan τ(proc p; block_p), en 3. na de uitvoering van de instructies in τ(proc p; block_p) de regie wordt overgedragen aan de volgende instructie na de juiste aanroep τ(p) PROGRAM vb1; VAR a, i : INTEGER; PROCEDURE p (VAR x : INTEGER); VAR b, i : INTEGER;... i... a... b... p(b)... i... END... i... a... p(i)... END (* vb1 *) Tijdens de 2 e activation van p: Codesegment vb1 Aanroep p Codesegment p Aanroep p ra(1) ra(2) AR vb1 waarde a = A 0 waarde i = I 0 AR p (1) waarde x = I 0 waarde b = B 1 waarde i = I 1 AR p (2) waarde x = B 1 waarde b = B 2 waarde i = I 2 23

24 Code segment procedure declaratie τ(proc p; block p) : lab p: proc entry τ(block p) proc exit proc exit { dst := pop(returnstack) jump dst ; o.a. geheugenbeheer ; o.a. geheugenbeheer } return Code bij een procedure aanroep τ(p) : retlab: parameter prelude push(returnstack,retlab) jump lab p parameter postlude ; klaarzetten van de parameters } call lab p ; evt result parameters kopiëren 10.2 Representatie AR van een (procedure) block 1. plaats van variabele of parameter in AR, 2. toegang tot variabele in een levend AR, 3. instructies bij block entry/exit en bij proc entry/exit 4. geheugenbeheer 5. parameter overdracht en instructies in parameter prelude/postlude. Conventie: identifier (variabele identifier) om een variable in de programmatekst aan te geven. naam (variabele naam) om een variabele tijdens compilatie aan te geven. adres om een variabele tijdens de uitvoering van het vertaalde programma te vinden Naamgeving binnen blocks (of hoofdprogramma) Vb2: B 0 : DECLARE a, b, c : INTEGER;... B 1 : DECLARE d, e, f : INTEGER;... d... b... END B 1 ;... B 2 : DECLARE g, h : INTEGER;... h... c... END B 2 ; END B 0 ; 24

25 gereserveerd geheugen c b a f e d Activation B 1 h g Activation B 0 Activation B 2 tijd Plaats direct bereikbare identifiers namen (= adressen) B 0 a, b, c 0, 1, 2 B 1 a, b, c, d, e, f 0, 1, 2, 3, 4, 5 B 2 a, b, c, g, h 0, 1, 2, 3, 4 Naamgeving: Opeenvolgende identifiers in een block krijgen opeenvolgende namen. De eerste identifier in het buitenste block krijgt de naam 0 (nul). De eerste identifier in een binnenblock krijgt de naam 1+ naam van de laatste identifier uit het direct omvattende block Naamgeving in een programma met procedures PROGRAM vb3; VAR a, b, c : INTEGER; (* voorlopige namen: 0, 1, 2 *) PROCEDURE p; VAR d, e, f : INTEGER (* voorlopige namen: 0, 1, 2 *)... END (* p *) PROCEDURE q; VAR g, h : INTEGER (* voorlopige namen: 0, 1 *) PROCEDURE r; VAR i, j, k : INTEGER (* voorlopige namen 0, 1, 2 *)... p 2... r 2... END (* r *)... r 1... END (* q *)... p 1... q... END (* vb3 *) 25

26 gereserveerd geheugen f e d i p k 2 j r 2 f i e h r 1 d g c p 1 b a q vb3 k j tijd Plaats direct bereikbare identifiers verband tussen namen en adressen vb3 a, b, c adres = naam p 1 a, b, c adres = naam d, e, f adres = naam+3 q a, b, c adres = naam g, h adres = naam+3 r 1 a, b, c adres = naam g, h adres = naam+3 i, j, k adres = naam+5 p 2 a, b, c adres = naam d, e, f adres = naam+8 r 2 a, b, c adres = naam g, h adres = naam+3 i, j, k adres = naam+8 Dit gaan we verder in detail uitwerken. Een naam is nu een paar. We houden een functie display bij, zodanig dat de naam (x.pn,disp) wordt afgebeeld op adres(x) = display(x.pn) + disp. Implementatie van de functie display kan op drie manieren gerealiseerd worden: 1. Tijdens de uitvoering van de huidige procedure (curr) zijn de functiewaarden van display opgeslagen in de registers R.0 tot en met R.curr.PN (R.l = display(l)). Het assignment k := g (met name(k)=(2,2) en name(g)=(1,0)) wordt dan omgezet naar: M(R2+2) := M(R1+0) 2. Tijdens de uitvoering van de huidige procedure zijn de functiewaarden van display opgeslagen in een tabel in het geheugen. Als D0 het beginadres is van de tabel wordt het assignment k := g: R0 := M(D0+2); R1 := M(D0+1); M(R0+2) := M(R1+0) 3. Tijdens de uitvoering van de huidige procedure zijn een aantal functiewaarden van display in het geheugen opgeslagen. Deze opgeslagen waarden vormen een linked list: de statische keten (static chain). De overige functie-waarden zijn opgeslagen in registers; met name zit in register LNB (local name base) display(curr). Merk op dat k nu naam (2,3) heeft, omdat plaats (2,0) nu de start van de statische keten (static link (SL)) bevat. Het assignment k := g wordt nu: R0 := M(LNB); M(LNB+3) := M(R0+0) 4. We hebben nog geen rekening gehouden met het korrekt terugplaatsen van de oude LNB bij het verlaten van een procedure. Daarom passen we opnieuw de naamgeving aan, in r 2 beginnen de lokalen nu bij 2 (ipv. 0), en in p 2 bij 1 (ipv. 0). 26

27 Geheugengebruik tijdens de activation van r k j i old LNB 6 SL 3 k j i old LNB 3 SL 3 h g old LNB 0 c b a AR r 2 AR r 1 AR q AR vb3 Vertaling van k := g (in r): R 0 := M(LNB) M(LNB+4) := M(R 0 +1) 10.3 Voorbeeld van gebruik van functies als parameters PROGRAM form; VAR s1, s2 : INTEGER; FUNCTION kwadr(v: INTEGER) : INTEGER; kwadr := v*v END (* kwadr *); FUNCTION derdem(v: INTEGER) : INTEGER; derdem := v*v*v END (* derdem *); PROCEDURE sommeer(van, tot : INTEGER; FUNCTION f(i : INTEGER) : INTEGER; VAR som : INTEGER); VAR k : INTEGER; som := 0; for k := van TO tot DO som := som + f(k); END (* sommeer *) sommeer(0, 100, kwadr, s1); sommeer(0, 100, derdem, s2); END (* form *) Dit is duidelijk een verrijking van de brontaal! 27

28 Formele procedure parameters PROGRAM vb4; PROCEDURE a (PROCEDURE fp); PROCEDURE b;... fp... END (* b *);... b... END (* a *); PROCEDURE c; PROCEDURE d; PROCEDURE e;... END (* e *)... a(e)... END (* d *)... a 1 (d)... END (* c *);... c... END (* vb4 *) Geheugengebruik in vb4 Herinner je dat we in procedures met P N = 1 de namen van lokale variabelen bij 1 beginnen te nummeren en voor P N 2 bij 2 beginnen te nummeren. In de volgende figuur zien we het geheugengebruik op het moment dat e aangeroepen is. 28

29 . a 8 a 7 a 6 a 5 a 4 a 3 a 2 a 1 0 old LNB: SL: old LNB: SL: param fp: old LNB: old LNB: SL: old LNB: SL: old LNB: a 6 a 4 a 5 a 5 e a 4 a 3 a 1 a 2 a 2 0 AR e AR b AR a 2 AR d AR b AR a 1 old LNB: a 1 param fp: d AR c AR vb4 display(0..3) = (0,a 1,a 4,a 7 ) display(0..2) = (0,a 5,a 6 ) display(0..1) = (0,a 5 ) display(0..2) = (0,a 1,a 4 ) display(0..2) = (0,a 2,a 3 ) display(0..1) = (0,a 2 ) display(0..1) = (0,a 1 ) display(0..0) = (0) Procedure b weet niet wie procedure fp in werkelijkheid is. Als b de parameter aan wil roepen heeft hij de SL van fp nodig en zijn startadres. Een formele procedure parameter wordt dus op de stack gerepresenteerd door een paar (startadres,static link). 29

rij karakters scanner rij tokens parser ontleedboom (filteren separatoren) (niet expliciet geconstrueerd) (+ add. inform.) (contextvrije analyse)

rij karakters scanner rij tokens parser ontleedboom (filteren separatoren) (niet expliciet geconstrueerd) (+ add. inform.) (contextvrije analyse) scanning and parsing 1/57 rij karakters scanner (filteren separatoren) rij tokens (+ add. inform.) (niet expliciet geconstrueerd) parser (contextvrije analyse) ontleedboom (parse tree) representeert syntactische

Nadere informatie

Automaten & Complexiteit (X )

Automaten & Complexiteit (X ) Automaten & Complexiteit (X 401049) Beschrijven van reguliere talen Jeroen Keiren j.j.a.keiren@gmail.com VU University Amsterdam 5 Februari 2015 Talen Vorig college: Talen als verzamelingen Eindige automaten:

Nadere informatie

Inhoud eindtoets. Eindtoets. Introductie 2. Opgaven 3. Terugkoppeling 6

Inhoud eindtoets. Eindtoets. Introductie 2. Opgaven 3. Terugkoppeling 6 Inhoud eindtoets Eindtoets Introductie 2 Opgaven 3 Terugkoppeling 6 1 Formele talen en automaten Eindtoets I N T R O D U C T I E Deze eindtoets is bedoeld als voorbereiding op het tentamen van de cursus

Nadere informatie

c, X/X a, c/λ a, X/aX b, X/X

c, X/X a, c/λ a, X/aX b, X/X ANTWOORDEN tentamen FUNDAMENTELE INFORMATICA 3 vrijdag 25 januari 2008, 10.00-13.00 uur Opgave 1 L = {x {a,b,c} n a (x) n b (x)} {x {a,b,c} n a (x) n c (x)}. a. Een stapelautomaat die L accepteert: Λ,

Nadere informatie

Het omzetten van reguliere expressies naar eindige automaten, zie de vakken Fundamentele Informatica 1 en 2.

Het omzetten van reguliere expressies naar eindige automaten, zie de vakken Fundamentele Informatica 1 en 2. Datastructuren 2016 Programmeeropdracht 3: Patroonherkenning Deadlines. Woensdag 23 november 23:59, resp. vrijdag 9 december 23:59. Inleiding. Deze opdracht is gebaseerd op Hoofdstuk 13.1.7 in het boek

Nadere informatie

Automaten. Informatica, UvA. Yde Venema

Automaten. Informatica, UvA. Yde Venema Automaten Informatica, UvA Yde Venema i Inhoud Inleiding 1 1 Formele talen en reguliere expressies 2 1.1 Formele talen.................................... 2 1.2 Reguliere expressies................................

Nadere informatie

Een korte samenvatting van enkele FORTRAN opdrachten

Een korte samenvatting van enkele FORTRAN opdrachten Een korte samenvatting van enkele FORTRAN opdrachten Inhoud 1 Introductie 3 2 De structuur van een FORTRAN programma 3 3 Datatypen, variabelen en declaraties 3 4 Expressies-volgorde van uitwerking 4 5

Nadere informatie

Deeltentamen Grammatica s en ontleden 22 december 2005

Deeltentamen Grammatica s en ontleden 22 december 2005 Tentamen Grammatica s en ontleden 22 december 2005 1 Deeltentamen Grammatica s en ontleden 22 december 2005 Let op: opgave 1 t/m 4 tellen voor (slechts) 5 punten mee, opgave 5 voor maar liefst 50 punten,

Nadere informatie

Reguliere Expressies

Reguliere Expressies Reguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord) die, volgens bepaalde syntaxregels, een verzameling strings (een taal) beschrijft Reguliere expressies worden

Nadere informatie

Automaten & Complexiteit (X )

Automaten & Complexiteit (X ) Automaten & Complexiteit (X 401049) Inleiding Jeroen Keiren j.j.a.keiren@vu.nl VU University Amsterdam Materiaal Peter Linz An Introduction to Formal Languages and Automata (5th edition) Jones and Bartlett

Nadere informatie

Automaten en Berekenbaarheid 2016 Oplossingen #4

Automaten en Berekenbaarheid 2016 Oplossingen #4 Automaten en Berekenbaarheid 2016 Oplossingen #4 28 oktober 2016 Vraag 1: Toon aan dat de klasse van context vrije talen gesloten is onder concatenatie en ster. Antwoord Meerdere manieren zijn mogelijk:

Nadere informatie

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken - belangrijkste punten: - ontleden van de programmatekst - bijhouden van de datastructuren Data Structuren en Algoritmen

Nadere informatie

TENTAMEN Basismodellen in de Informatica VOORBEELDUITWERKING

TENTAMEN Basismodellen in de Informatica VOORBEELDUITWERKING TENTAMEN Basismodellen in de Informatica vakcode: 211180 datum: 2 juli 2009 tijd: 9:00 12:30 uur VOORBEELDUITWERKING Algemeen Bij dit tentamen mag gebruik worden gemaakt van het boek van Sudkamp, van de

Nadere informatie

Compilers (2IC25) docent: G. Zwaan, HG 5.41, tel. ( )4291, webpagina:

Compilers (2IC25) docent: G. Zwaan, HG 5.41, tel. ( )4291,   webpagina: Compilers (2IC25) docent: G. Zwaan, HG 5.41, tel. (040 247)4291, e-mail: G.Zwaan@tue.nl webpagina: http://www.win.tue.nl/~wsinswan/compilers/ compileren compilatie vertalen (een werk) bijeenbrengen door

Nadere informatie

Talen & Automaten. Wim Hesselink Piter Dykstra Opleidingsinstituut Informatica en Cognitie 9 mei 2008

Talen & Automaten. Wim Hesselink Piter Dykstra Opleidingsinstituut Informatica en Cognitie   9 mei 2008 Talen & Automaten Wim Hesselink Piter Dykstra Opleidingsinstituut Informatica en Cognitie www.cs.rug.nl/~wim 9 mei 2008 Talen & automaten Week 1: Inleiding Dit college Talen Automaten Berekenbaarheid Weekoverzicht

Nadere informatie

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010 Opdracht 1 Topics on Parsing and Formal Languages - fall 2010 Rick van der Zwet 8 december 2010 Samenvatting Dit schrijven zal uitwerkingen van opgaven behandelen uit het boek [JS2009]

Nadere informatie

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010 Opdracht 1 Topics on Parsing and Formal Languages - fall 2010 Rick van der Zwet 13 november 2010 Samenvatting Dit schrijven zal uitwerkingen van opgaven behandelen uit het boek [JS2009]

Nadere informatie

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies 17 Operaties op bits In hoofdstuk 1 is gezegd dat C oorspronkelijk bedoeld was als systeemprogrammeertaal om het besturingssysteem UNIX te implementeren. Bij dit soort toepassingen komt het voor dat afzonderlijke

Nadere informatie

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser colleges recursieve datastructuren college 9 interpreteren: waarde van bomen bepalen transformeren: vorm van bomen veranderen parseren herkennen van expressie in de tekst herkennen van functies onderwerp

Nadere informatie

Tentamen Compilers (2M220) 19 maart 2002, 9.00u-12.00u

Tentamen Compilers (2M220) 19 maart 2002, 9.00u-12.00u 12/k Tentamen Compilers (2M220) 19 maart 2002, 9.00u-12.00u 1. Beschouw de volgende deelverzameling van de ASCII-karakters V = { 0, 1,..., 9, A, B,..., Y, Z, a, b,..., y, z } De karakters in V staan vermeld

Nadere informatie

3 De stelling van Kleene

3 De stelling van Kleene 18 3 De stelling van Kleene Definitie 3.1 Een formele taal heet regulier als hij wordt herkend door een deterministische eindige automaat. Talen van de vorm L(r) met r een reguliere expressie noemen we

Nadere informatie

De klasse van recursief opsombare talen is gesloten onder en. Dit bewijzen we met behulp van een recursieve opsomming

De klasse van recursief opsombare talen is gesloten onder en. Dit bewijzen we met behulp van een recursieve opsomming Recursieve talen De klasse van recursief opsombare talen is gesloten onder en. Echter, het is niet zo dat L recursief opsombaar is voor alle recursief opsombare talen L. Dit bewijzen we met behulp van

Nadere informatie

Natuurlijke-Taalverwerking

Natuurlijke-Taalverwerking Natuurlijke-Taalverwerking Week 5 Parsing Overzicht DCG s en links-recursie Shift-reduce parsing Chart parsing Generatie Links-recursie?- voorouder(geert,youri). ouder(geert,jan). ouder(jan,youri). voorouder(x,y)

Nadere informatie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk

Nadere informatie

VAN HET PROGRAMMEREN. Inleiding

VAN HET PROGRAMMEREN. Inleiding OVERZICHT VAN HET PROGRAMMEREN Inleiding Als je leert programmeren lijkt het nogal overweldigend om die eerste stappen te doorworstelen. Er zijn dan ook heel wat programmeertalen (Java, Ruby, Python, Perl,

Nadere informatie

7 Omzetten van Recursieve naar Iteratieve Algoritmen

7 Omzetten van Recursieve naar Iteratieve Algoritmen 7 Omzetten van Recursieve naar Iteratieve Algoritmen Het lijkt mogelijk om elke oplossings-algoritme, die vaak in eerste instantie recursief geformuleerd werd, om te zetten in een iteratieve algoritme

Nadere informatie

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c Een Minimaal Formalisme om te Programmeren We hebben gezien dat Turing machines beschouwd kunnen worden als universele computers. D.w.z. dat iedere berekening met natuurlijke getallen die met een computer

Nadere informatie

Bouwstenen voor PSE. Datatypes en Datastructuren

Bouwstenen voor PSE. Datatypes en Datastructuren Bouwstenen voor PSE Datatypes en Datastructuren Definitie Datatype Klasse van dataobjecten tesamen met operaties om ze te construeren, te manipuleren en te verwijderen. Een datatype omvat een specificatie

Nadere informatie

opgaven formele structuren deterministische eindige automaten

opgaven formele structuren deterministische eindige automaten opgaven formele structuren deterministische eindige automaten Opgave. De taal L over het alfabet {a, b} bestaat uit alle strings die beginnen met aa en eindigen met ab. Geef een reguliere expressie voor

Nadere informatie

Logische Complexiteit Hoorcollege 4

Logische Complexiteit Hoorcollege 4 Logische Complexiteit Hoorcollege 4 Jacob Vosmaer Bachelor CKI, Universiteit Utrecht 8 februari 2011 Contextvrije grammatica s Inleiding + voorbeeld Definities Meer voorbeelden Ambiguiteit Chomsky-normaalvormen

Nadere informatie

Computerarchitectuur en netwerken. Memory management Assembler programmering

Computerarchitectuur en netwerken. Memory management Assembler programmering Computerarchitectuur en netwerken 2 Memory management Assembler programmering Lennart Herlaar 10 september 2018 Inhoud 1 Protectie: Hoe het O.S. programma s tegen elkaar kan beschermen modes memory management

Nadere informatie

Zelftest Inleiding Programmeren

Zelftest Inleiding Programmeren Zelftest Inleiding Programmeren Document: n0824test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST INLEIDING PROGRAMMEREN Deze

Nadere informatie

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie Leren Programmeren met Visual Basic 6.0 Les 3+4 Hoofdstuk 4 : De Selectie Visual Basic 6.0 1 Basisstructuren (herhaling) Sequentie (HK2) : Alle opdrachten gewoon na mekaar uitvoeren. Hier worden geen keuzes

Nadere informatie

Datastructuren: stapels, rijen en binaire bomen

Datastructuren: stapels, rijen en binaire bomen Programmeermethoden Datastructuren: stapels, rijen en binaire bomen week 12: 23 27 november 2015 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Inleiding In de informatica worden Abstracte DataTypen (ADT s)

Nadere informatie

Formeel Denken. Herfst 2004

Formeel Denken. Herfst 2004 Formeel Denken Herman Geuvers Deels gebaseerd op het herfst 2002 dictaat van Henk Barendregt en Bas Spitters, met dank aan het Discrete Wiskunde dictaat van Wim Gielen Herfst 2004 Contents 1 Talen 1 1.1

Nadere informatie

Zevende college Algoritmiek. 6 april Verdeel en Heers

Zevende college Algoritmiek. 6 april Verdeel en Heers Zevende college Algoritmiek 6 april 2018 Verdeel en Heers 1 Algoritmiek 2018/Backtracking Programmeeropdracht 2 Puzzel 2: D O N A L D G E R A L D + R O B E R T Elke letter stelt een cijfer voor (0,1,...,9)

Nadere informatie

Tentamen TI2310 Automaten en Talen. 19 april 2012, uur

Tentamen TI2310 Automaten en Talen. 19 april 2012, uur TECHNISCHE UNIVERSITEIT DELFT Faculteit Elektrotechniek, Wiskunde en Informatica TP Delft Tentamen TI2310 Automaten en Talen 19 april 2012, 14.00-17.00 uur Totaal aantal pagina's (exclusief dit titelblad):

Nadere informatie

Programmeren in Java les 3

Programmeren in Java les 3 4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een

Nadere informatie

Elfde college complexiteit. 23 april NP-volledigheid III

Elfde college complexiteit. 23 april NP-volledigheid III college 11 Elfde college complexiteit 23 april 2019 NP-volledigheid III 1 TSP Als voorbeeld bekijken we het Travelling Salesman/person Problem, ofwel het Handelsreizigersprobleem TSP. Hiervoor geldt: TSP

Nadere informatie

PYTHON REEKS 1: BASICS. Mathias Polfliet

PYTHON REEKS 1: BASICS. Mathias Polfliet PYTHON REEKS 1: BASICS Mathias Polfliet mpolflie@etrovub.be EENVOUDIGE REKENMACHINE 2 soorten getallen Getallen Z -> integers (gehele getallen) Getallen R -> floating points (reële getallen) Door beperkte

Nadere informatie

Elfde college algoritmiek. 18 mei Algoritme van Dijkstra, Heap, Heapify & Heapsort

Elfde college algoritmiek. 18 mei Algoritme van Dijkstra, Heap, Heapify & Heapsort Algoritmiek 018/Algoritme van Dijkstra Elfde college algoritmiek 18 mei 018 Algoritme van Dijkstra, Heap, Heapify & Heapsort 1 Algoritmiek 018/Algoritme van Dijkstra Uit college 10: Voorb. -1- A B C D

Nadere informatie

Uitbreiding van de Model Specification Language (MSL) compiler. Thierry Cornelis

Uitbreiding van de Model Specification Language (MSL) compiler. Thierry Cornelis Uitbreiding van de Model Specification Language (MSL) compiler Thierry Cornelis 29 november 2002 Inhoudsopgave 1 Prototype 1 3 1.1 AToM 3............................... 3 1.2 Compileren............................

Nadere informatie

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding:

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding: Programmeren A Genetisch Programma voor het Partitie Probleem begeleiding: Inleiding Het Partitie Probleem luidt als volgt: Gegeven een verzameling van n positieve integers, vindt twee disjuncte deelverzamelingen

Nadere informatie

Zelftest Programmeren in PL/I

Zelftest Programmeren in PL/I Zelftest Programmeren in PL/I Document: n0830test.fm 26/03/2012 ABIS Training & Consulting P.. Box 220 B-3000 Leuven Belgium TRAINING & CNSULTING INLEIDING BIJ DE ZELFTEST PRGRAMMEREN IN PL/I m de voorkennis

Nadere informatie

Zelftest Programmeren in COBOL - deel I

Zelftest Programmeren in COBOL - deel I Zelftest Programmeren in CBL - deel I Document: n1290test.fm 05/01/2016 ABIS Training & Consulting P.. Box 220 B-3000 Leuven Belgium TRAINING & CNSULTING INLEIDING BIJ DE ZELFTEST PRGRAMMEREN IN CBL -

Nadere informatie

IN2505 II Berekenbaarheidstheorie Tentamen Maandag 2 juli 2007, uur

IN2505 II Berekenbaarheidstheorie Tentamen Maandag 2 juli 2007, uur TECHNISCHE UNIVERSITEIT DELFT Faculteit Elektrotechniek, Wiskunde en Informatica Mekelweg 4 2628 CD Delft IN2505 II Berekenbaarheidstheorie Tentamen Maandag 2 juli 2007, 14.00-17.00 uur BELANGRIJK Beschikbare

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 13 december 2013 Terugblik Fibonacci public class Fibonacci { public static void main(string[] args) { // Print het vijfde Fibonaccigetal System.out.println(fib(5));

Nadere informatie

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object.

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object. een symbolische naam voor een object. Variabelen Constanten Variabelen Expressies naam : geeft de plaats in het geheugen aan waarde : de inhoud van het object identifier : een rij van letters en/of cijfers

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 6 december 2013 Terugblik Programma en geheugen Opdrachten Variabelen Methoden Objecten Klasse Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in

Nadere informatie

Variabelen en statements in ActionScript

Variabelen en statements in ActionScript Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer

Nadere informatie

Beslisbare talen (1) IN2505-II Berekenbaarheidstheorie. Beslisbare talen (2) Beslisbare talen (3) De talen: College 7

Beslisbare talen (1) IN2505-II Berekenbaarheidstheorie. Beslisbare talen (2) Beslisbare talen (3) De talen: College 7 Beslisbare talen (1) College 7 Algoritmiekgroep Faculteit EWI TU Delft 10 mei 2009 De talen: A DFA = { M, w M is een DFA die w accepteert} A NFA = { M, w M is een NFA die w accepteert} E DFA = { M M is

Nadere informatie

Zevende college algoritmiek. 23/24 maart Verdeel en Heers

Zevende college algoritmiek. 23/24 maart Verdeel en Heers Zevende college algoritmiek 23/24 maart 2017 Verdeel en Heers 1 Algoritmiek 2017/Backtracking Tweede Programmeeropdracht 0 1 2 3 0 1 2 3 4 1 2 3 4 5 2 Algoritmiek 2017/Backtracking Tweede Programmeeropdracht

Nadere informatie

Kennisrepresentatie & Redeneren. Piter Dykstra Instituut voor Informatica en Cognitie

Kennisrepresentatie & Redeneren. Piter Dykstra Instituut voor Informatica en Cognitie Kennisrepresentatie & Redeneren Piter Dykstra Instituut voor Informatica en Cognitie www.math.rug.nl/~piter piter@math.rug.nl 8 oktober 2007 GRAMMATICA S Kennisrepresentatie & Redeneren Week6: Grammatica

Nadere informatie

Datastructuren en Algoritmen

Datastructuren en Algoritmen Datastructuren en Algoritmen Tentamen Vrijdag 6 november 2015 13.30-16.30 Toelichting Bij dit tentamen mag je gebruik maken van een spiekbriefje van maximaal 2 kantjes. Verder mogen er geen hulpmiddelen

Nadere informatie

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40 Recursion Introductie 37 Leerkern 37 5.1 Foundations of recursion 37 5.2 Recursive analysis 37 5.3 Applications of recursion 38 Terugkoppeling 40 Uitwerking van de opgaven 40 Hoofdstuk 5 Recursion I N

Nadere informatie

Taaltechnologie. Januari/februari Inhoud

Taaltechnologie. Januari/februari Inhoud Taaltechnologie Januari/februari 2002 1 Finite state............................................... 4 1.1 Deterministic finite state automata.................... 4 1.2 Non-deterministic finite state automata................

Nadere informatie

Recursive-Descent Parsing

Recursive-Descent Parsing Week 2 Recursive-Descent Parsing PRACTICUM Tijdens dit practicum wordt een eenvoudige one-pass recursive-descent vertaler ontwikkeld in Java. We volgen daarbij hoofdstuk 4 van Watt & Brown. De te ontwikkelen

Nadere informatie

Automaten en Berekenbaarheid

Automaten en Berekenbaarheid Automaten en Berekenbaarheid Bart Demoen KU Leuven 2016-2017 Les 2: 20-35 reguliere expressies NFA DFA minimalisatie Van RE naar NFA I 2/11 structureel (als algebra s) zijn RegExp en de NFA s gelijk voor

Nadere informatie

OEFENINGEN PYTHON REEKS 1

OEFENINGEN PYTHON REEKS 1 Vraag 1: Expressies & Types OEFENINGEN PYTHON REEKS 1 Python maakt gebruik van enkele vaak voorkomende (data)types. Zo zijn er integers die behoren tot de gehele getallen (VB: 3), zijn er float s die behoren

Nadere informatie

Let op dat de scoping regels gerespecteerd blijven; het volgende voorbeeld mag geen fout melden.

Let op dat de scoping regels gerespecteerd blijven; het volgende voorbeeld mag geen fout melden. Vrije Universiteit Brussel Faculteit Wetenschappen Vakgroep Computerwetenschappen Academiejaar 2009 2010: tweede examenzittijd Interpretatie van Computerprogrammaʼs I schriftelijke test Voorafgaandelijk:

Nadere informatie

Compilers.

Compilers. Compilers joost.vennekens@denayer.wenk.be Job van een compiler Job van een compiler 68: newarray int int grens = min + (max - min) / 2; int[] kleiner = new int[n]; int[] groter = new int[n]; int k = 0;

Nadere informatie

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Syntax- (compile), runtime- en logische fouten Binaire operatoren Inhoud Syntax- (compile), runtime- en logische fouten Binaire operatoren Operaties op numerieke datatypen Evaluatie van expressies, bindingssterkte Assignment operaties en short-cut operatoren Controle

Nadere informatie

Logische Complexiteit

Logische Complexiteit Logische Complexiteit Universele Turing machines College 12 Donderdag 18 Maart 1 / 11 Hoog-niveau beschrijvingen en coderen Vanaf nu: hoog-niveau beschrijvingen van TM s. Daarbij worden objecten die geen

Nadere informatie

maplev 2012/5/1 15:47 page 469 #471 Procedures (vervolg)

maplev 2012/5/1 15:47 page 469 #471 Procedures (vervolg) maplev 2012/5/1 15:47 page 469 #471 Module 30 Procedures (vervolg) Onderwerp Voorkennis Expressies Procedures: Bereik van lokale variabelen, call by evaluated name, level-1-evaluatie van lokale variabelen,

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 13 november 2015 Expressies Functies Ingebouwde functies Variabelenbereik Inleveropgave 1 Terugblik Programma is een lijst van opdrachten Terugblik Programma is

Nadere informatie

Zevende college algoritmiek. 24 maart Verdeel en Heers

Zevende college algoritmiek. 24 maart Verdeel en Heers Zevende college algoritmiek 24 maart 2016 Verdeel en Heers 1 Verdeel en heers 1 Divide and Conquer 1. Verdeel een instantie van het probleem in twee (of meer) kleinere instanties 2. Los de kleinere instanties

Nadere informatie

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS Laatste aanpassing: 15 oktober 2003 Inhoudsopgave 1 Bestandsnamen 3 2 Organizatie Bestanden 3 3 Indentatie

Nadere informatie

CLIPS en het Rete-algoritme. Productieregels in CLIPS. Feiten. Productiesysteem (voorbeeld)

CLIPS en het Rete-algoritme. Productieregels in CLIPS. Feiten. Productiesysteem (voorbeeld) CLIPS en het Rete-algoritme CLIPS: acroniem voor C Language Integrated Production System Verwant aan OPS5 (Carnegie-Mellon University), en gebaseerd op ART (Artificial Reasoning Tool) Ontwikkeld door Lyndon

Nadere informatie

Getallensystemen, verzamelingen en relaties

Getallensystemen, verzamelingen en relaties Hoofdstuk 1 Getallensystemen, verzamelingen en relaties 1.1 Getallensystemen 1.1.1 De natuurlijke getallen N = {0, 1, 2, 3,...} N 0 = {1, 2, 3,...} 1.1.2 De gehele getallen Z = {..., 4, 3, 2, 1, 0, 1,

Nadere informatie

Tentamen Compilers (2IC25) 21 juni 2010, 9.00u-12.00u

Tentamen Compilers (2IC25) 21 juni 2010, 9.00u-12.00u Tentamen Compilers (2IC25) 21 juni 2010, 9.00u-12.00u 1. Beschouw de reguliere expressie e = (a (a b) ) c (Er mag geen materiaal worden geraadpleegd.) (De TL-interpretator is als bijlage toegevoegd.) Faculteit

Nadere informatie

Datastructuren Werkcollege Intro

Datastructuren Werkcollege Intro Bart Hijmans, Universiteit Leiden. Universiteit Leiden The Netherlands Focus 1 19 ˆ Ervaring in gebruik en implementatie van datastructuren ˆ Kennis van mogelijkheden ˆ Programmeren voor andere programmeurs

Nadere informatie

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14 Python Vraag 1: Expressies en types Integrated Development Environment (IDE): Ø Wing 101 (gratis te downloaden op www.wingware.com) Oefeningen in de shell >> noemen we de prompt Python commando s = expressies

Nadere informatie

Er zijn alle soorten modificaties hoe je deze FST beter kan maken. Bijvoorbeeld, door - teen van thirteen - nineteen in het algemeen te lezen.

Er zijn alle soorten modificaties hoe je deze FST beter kan maken. Bijvoorbeeld, door - teen van thirteen - nineteen in het algemeen te lezen. 3. FST Het antwoord is: Er zijn alle soorten modificaties hoe je deze FST beter kan maken. Bijvoorbeeld, door - teen van thirteen - nineteen in het algemeen te lezen. Het idee is duidelijk hoop ik: voor

Nadere informatie

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten

Nadere informatie

Programmeermethoden NA. Week 6: Lijsten

Programmeermethoden NA. Week 6: Lijsten Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Getal opbouwen Stel je leest losse karakters (waaronder cijfers) en je moet daar een getal

Nadere informatie

Semantische eigenschappen van XML-schematalen

Semantische eigenschappen van XML-schematalen transnationale Universiteit Limburg School voor Informatietechnologie Universiteit Hasselt Semantische eigenschappen van XML-schematalen Thesis voorgedragen tot het behalen van de graad van licentiaat

Nadere informatie

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Uitwerking tentamen Analyse van Algoritmen, 29 januari Uitwerking tentamen Analyse van Algoritmen, 29 januari 2007. (a) De buitenste for-lus kent N = 5 iteraties. Na iedere iteratie ziet de rij getallen er als volgt uit: i rij na i e iteratie 2 5 4 6 2 2 4

Nadere informatie

Lab Webdesign: Javascript 3 maart 2008

Lab Webdesign: Javascript 3 maart 2008 H5: OPERATORS In dit hoofdstuk zullen we het hebben over de operators (of ook wel: operatoren) in JavaScript waarmee allerlei rekenkundige en logische bewerkingen kunnen worden uitgevoerd. Daarbij zullen

Nadere informatie

Sparse columns in SQL server 2008

Sparse columns in SQL server 2008 Sparse columns in SQL server 2008 Object persistentie eenvoudig gemaakt Bert Dingemans, e-mail : info@dla-os.nl www : http:// 1 Content SPARSE COLUMNS IN SQL SERVER 2008... 1 OBJECT PERSISTENTIE EENVOUDIG

Nadere informatie

inleiding theoretische informatica practicum 1 deadline woensdag 20 februari 2008 om uur

inleiding theoretische informatica practicum 1 deadline woensdag 20 februari 2008 om uur 1 Inleiding inleiding theoretische informatica 2007-2008 practicum 1 deadline woensdag 20 februari 2008 om 14.00 uur Dit practicum is een kennismaking met functioneel programmeren. Twee belangrijke functionele

Nadere informatie

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet

Nadere informatie

Achtste college algoritmiek. 12 april Verdeel en Heers. Dynamisch Programmeren

Achtste college algoritmiek. 12 april Verdeel en Heers. Dynamisch Programmeren Achtste college algoritmiek 12 april 2019 Verdeel en Heers Dynamisch Programmeren 1 Uit college 7: Partitie Partitie Partitie(A[l r]) :: // partitioneert een (sub)array, met A[l] als spil (pivot) p :=

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde

Nadere informatie

Controle structuren. Keuze. Herhaling. Het if statement. even1.c : testen of getal even of oneven is. statement1 statement2

Controle structuren. Keuze. Herhaling. Het if statement. even1.c : testen of getal even of oneven is. statement1 statement2 Controle structuren De algemene vorm: 1 bloks door middel van indentatie Keuze Herhaling if expressie :...... In de volgende vorm is het else gedeelte weggelaten: if expressie :... Het if keuze- of conditioneel

Nadere informatie

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk. HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een

Nadere informatie

College Notatie, Recursie, Lijsten

College Notatie, Recursie, Lijsten College 2016-2017 2. Notatie, Recursie, Lijsten Doaitse Swierstra (Jeroen Bransen) Utrecht University September 13, 2016 Functieapplicatie functieapplicatie associeert naar links: als x in f x y moet kiezen

Nadere informatie

OEFENINGEN PYTHON REEKS 1

OEFENINGEN PYTHON REEKS 1 Vraag 1: Expressies & Types OEFENINGEN PYTHON REEKS 1 Python maakt gebruik van enkele vaak voorkomende (data)types. Zo zijn er integers die behoren tot de gehele getallen (VB: 3), zijn er float s die behoren

Nadere informatie

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax, Deel 1: Arduino kennismaking Wat is een microcontroller, structuur van een programma, syntax, Wat is een microcontroller Wat is een microcontroller? Microcontroller = kleine dedicated computer. - Beperkt

Nadere informatie

Twaalfde college algoritmiek. 13 mei Branch & Bound Heap, Heapsort & Heapify

Twaalfde college algoritmiek. 13 mei Branch & Bound Heap, Heapsort & Heapify Algoritmiek 2016/Branch & Bound Twaalfde college algoritmiek 13 mei 2016 Branch & Bound Heap, Heapsort & Heapify 1 Algoritmiek 2016/Branch & Bound TSP met Branch & Bound Mogelijke ondergrenzen voor de

Nadere informatie

String Matching. Algoritmiek

String Matching. Algoritmiek String Matching Algoritmiek String Matching Gegeven string (haystack): aabaabbabaaba zoek patroon abba (needle) 4 algoritmen: Naïef Rabin-Karp Eindige Automaat Knuth-Morris-Pratt 2 String Matching (formeel)

Nadere informatie

Java virtuele machine JVM

Java virtuele machine JVM Implementatie Java Java virtuele machine JVM Java programma vertaald naar byte code instructies Byte code instructies uitgevoerd door JVM JVM is processor architectuur kan in principe in hardware worden

Nadere informatie

Computerarchitectuur en netwerken. Memory management Assembler programmering

Computerarchitectuur en netwerken. Memory management Assembler programmering Computerarchitectuur en netwerken 2 Memory management Assembler programmering Lennart Herlaar 12 september 2016 Inhoud 1 Protectie: Hoe het O.S. programma s tegen elkaar kan beschermen modes memory management

Nadere informatie

Uitwerking tentamen Algoritmiek 10 juni :00 13:00

Uitwerking tentamen Algoritmiek 10 juni :00 13:00 Uitwerking tentamen Algoritmiek 10 juni 2014 10:00 13:00 1. Dominono s a. Toestanden: n x n bord met in elk hokje een O, een X of een -. Hierbij is het aantal X gelijk aan het aantal O of hooguit één hoger.

Nadere informatie

software constructie recursieve datastructuren college 15 5 stappen plan ontwerpen de software bestaat uiteindelijk uit datatypen functies

software constructie recursieve datastructuren college 15 5 stappen plan ontwerpen de software bestaat uiteindelijk uit datatypen functies software constructie recursieve datastructuren college 15 software engineering highlights 1 de software bestaat uiteindelijk uit datatypen functies verbindingen geven gebruik aan main is de top van het

Nadere informatie

Programmeermethoden NA

Programmeermethoden NA Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Getal opbouwen Stel je leest losse karakters (waaronder

Nadere informatie

Het minimale aantal sleutels op niveau h is derhalve

Het minimale aantal sleutels op niveau h is derhalve 1 (a) In een B-boom van orde m bevat de wortel minimaal 1 sleutel en maximaal m 1 sleutels De andere knopen bevatten minimaal m 1 sleutels en maximaal m 1 sleutels (b) In een B-boom van orde 5 bevat elke

Nadere informatie

Constraint satisfaction. Computationele Intelligentie. Voorbeelden. Een constraint satisfaction probleem. Constraint Satisfaction

Constraint satisfaction. Computationele Intelligentie. Voorbeelden. Een constraint satisfaction probleem. Constraint Satisfaction Constraint satisfaction Computationele Intelligentie Constraint Satisfaction Een constraint satisfaction probleem (CSP) bestaat uit: een verzameling variabelen; een domein van waarden voor elke variabele;

Nadere informatie

Datastructuren Programmeeropdracht 3: Expressies. 1 Expressies. Deadline. Dinsdag 8 december 23:59.

Datastructuren Programmeeropdracht 3: Expressies. 1 Expressies. Deadline. Dinsdag 8 december 23:59. Datastructuren 2015 Programmeeropdracht 3: Expressies Deadline. Dinsdag 8 december 23:59. Inleiding. Deze opdracht is losjes gebaseerd op Opdracht 5.13.2 in het boek van Drozdek. U wordt gevraagd expressies

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 26, 2018 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te

Nadere informatie

String Matching. Algoritmiek

String Matching. Algoritmiek String Matching Algoritmiek String Matching Gegeven string (haystack): aabaabbabaaba zoek patroon abba (needle) 4 algoritmen: Naïef Rabin-Karp Eindige Automaat Knuth-Morris-Pratt 2 String Matching (formeel)

Nadere informatie