Reguliere Expressies en Automten: Overzicht Alfetten Tekenrijtjes over een lfet Tlen over een lfet Reguliere Uitdrukkingen Reguliere Operties Herkenners voor Reguliere Ptronen Deterministische utomten Non-deterministische utomten Woordenlijsten ls utomt Non-deterministische utomten deterministische utomten De pomp-eigenschp vn reguliere tlen Trnsducers Opdrchten Reguliere Uitdrukkingen Jn vn Eijck p.1
Alfetten Een lfet Σ is een eindige verzmeling symolen. Vooreelden: Σ 1 = {0,1,2,3,4,5,6,7.8.9}. De tien-elements verzmeling vn de decimle cijfers. Σ 2 = {,,c,...,x,y,z}. De 26-elements verzmeling vn lle kleine letters vn het Nederlnds. Een niet-vooreeld: N = {0,1,2,...}. De verzmeling vn lle ntuurlijke getllen is geen lfet, wnt deze verzmeling is oneindig. Reguliere Uitdrukkingen Jn vn Eijck p.2
Tekenrijtjes over een lfet Een tekenrijtje vn lengte n( 0) over een lfet Σ is een geordend n-tl vn elementen vn Σ, geschreven zonder leestekens. Vooreeld: ls Σ = {,,c}, dn zijn,,, cc en c tekenrijtjes over Σ, met respectieve lengtes 1,2,2,3,4. Σ def = de verzmeling vn lle tekenrijtjes over Σ met een eindige lengte. Er is precies één tekenrijtje over Σ vn lengte 0. Dit rijtje heet het lege rijtje, en we geruiken er de nottie ε of {} voor. We spreken f dt tekenrijtjes ltijd eindig zijn (een eindige lengte heen). Reguliere Uitdrukkingen Jn vn Eijck p.3
Tlen over een lfet Een tl is een verzmeling tekenrijtjes over een lfet. Dus: een tl over lfet Σ is een deelverzmeling vn Σ. Vooreelden: De verzmeling {michel, jn}; een tl die slechts twee rijtjes evt. De verzmeling vn lle tekenrijtjes die estn uit letters vn het lfet {,...,z}. De verzmeling vn lle tekenrijtjes die estn uit tekens uit het lfet {0,..., 9} (lle decimle representties vn ntuurlijke getllen, met eventueel nullen voorop). Een niet-vooreeld: de verzmeling die estt uit het ene rijtje 0,14285714285714... (de decimle expnsie vn 1 7 ). Dit rijtje is oneindig. Reguliere Uitdrukkingen Jn vn Eijck p.4
Reguliere Uitdrukkingen (nottie egrep) ** een willekeurig ntl s, gevolgd door een willekeurig ntl s. Deze tl evt de tekenrijtjes,,,, mr niet de tekenrijtjes,, c, c. ()* een willekeurig ntl keren het tekenrijtje :,, mr niet,, of.. een willekeurig symool.* een willekeurige reeks symolen ˆ[ˆ]*$ een regel die geen evt..*q.* lle tekenrijtjes wrin ergens een q voorkomt. (c c)*: lle rijtjes die estn uit een willekeurig ntl mlen c of c. Dus: cc, c, cc zitten er in, niet. Reguliere Uitdrukkingen Jn vn Eijck p.5
Reguliere Operties Lege rijtje, ngeduid ls {} Los symool vn het lfet Σ, ij vooreeld Opeenvolging, ij vooreeld Keuze, ij vooreeld ( ) Itertie, ij vooreeld * Dt is lles. Andere operties kunnen nu ls fkorting worden ingevoerd. Uitgnde vn het lfet {,, c} heen we ij vooreeld: ˆ = ( c). = ( c) + = * = ({} c...*). Reguliere Uitdrukkingen Jn vn Eijck p.6
Herkenners voor Reguliere Ptronen Leeg rijtje: zeg j. Enkel symool : kijk of je een symool kunt inlezen. Zeg nee ls dt niet lukt, of het symool is geen. Zeg j ls het volgende symool een is. Opeenvolging AB: zeg j ls je eerst A kunt herkennen en vervolgens B, nders nee. Keuze (A B): zeg j ls je hetzij A, hetzij B kunt herkennen. Itertie A*: proeer A te herkennen zolng er nog invoer is. Dit is een herhlings-lus. Dit kn mchinl, met ehulp vn een eindige utomt: een mchine die invoer kn lezen, en j of nee kn zeggen, fhnkelijk vn de toestnd wrin hij is. Reguliere Uitdrukkingen Jn vn Eijck p.7
Deterministische utomten Doel: inlezen vn rijtjes, om te kijken of ze n een regulier ptroon voldoen. Begintoestnd: hier strt je. Toestndsovergng ij het lezen vn een enkel symool vn het lfet: voor elk symool hoogstens één overgng (dit heet determinisme). J-toestnden: toestnden wrij de utomt het rijtje ccepteert (ls lle invoer gelezen is). Nee-toestnden: toestnden wrij de utomt het rijtje verwerpt (ls lle invoer gelezen is). Reguliere Uitdrukkingen Jn vn Eijck p.8
Deterministische Automt voor (* * c*) Voor elk symool precies één overgng. c c c c c Reguliere Uitdrukkingen Jn vn Eijck p.9
Determinische Automt voor (* * c*) Voor elk symool hoogstens één overgng. c c Reguliere Uitdrukkingen Jn vn Eijck p.10
Non-deterministische utomt voor ( )* Reguliere Uitdrukkingen Jn vn Eijck p.11
Nog gemkkelijker: Reguliere Uitdrukkingen Jn vn Eijck p.12
Woordenlijsten ls utomt Woordenlijsten kunnen op verschillende mnieren ls utomt worden gepresenteerd. Vergelijk de volgende reguliere expressies. (p lp k lm) (l(p m) (p k)) Een utomt op sis vn de tweede stt sneller zoeken toe. Reguliere Uitdrukkingen Jn vn Eijck p.13
Non-deterministische Deterministische Automten Twee utomten zijn equivlent wnneer ze dezelfde tl ccepteren. Voor elke non-deterministische utomt is er een equivlente deterministische utomt te construeren. Voor overgngen met symoolrijtjes, ij vooreeld,, dienen tussenliggende toestnden te worden geïntroduceerd. Voor de rest vn de constructie is het hoofdidee: mk nieuwe toestnden die estn uit verzmelingen vn oude toestnden. Zorg dt de nieuwe utomt n lezen vn invoer in de verzmeling toestnden komt die in de oude utomt kunnen worden ereikt vnf strt met het lezen vn deze invoer. Reguliere Uitdrukkingen Jn vn Eijck p.14
Vooreeld vn Non-deterministische utomt {} 1 3 {} {} {} 0 2 4 NB: {} stt voor het lege rijtje. Reguliere Uitdrukkingen Jn vn Eijck p.15
Omzetten nr Deterministische Versie {0,1,2,3} {0,1,2,3,4 } {2,3,4] {3,4} {} Reguliere Uitdrukkingen Jn vn Eijck p.16
Pomp-eigenschp vn reguliere tlen Als T een oneindige reguliere tl is. Dn zijn er rijtjes x,y,z te vinden met y ε, en [x,y n,z] in T, voor elke n 0. Idee: omdt T regulier is, is er een deterministische utomt die T herkent. Die utomt heeft een eindig ntl toestnden, zeg k. Omdt de tl oneindig is moeten er rijtjes in T zitten die lengte > k heen. Dus moet de utomt ij het herkennen vn zo n rijtje een toestnd q meer dn één keer ereiken. Mr dn evt de herkenningsprocedure een lus. Tijdens het doorlopen vn die lus wordt een niet-leeg rijtje ingelezen. Noem dt rijtje y, en klr. Reguliere Uitdrukkingen Jn vn Eijck p.17
De pompeigenschp geruiken We willen lten zien dt eplde tlen niet regulier zijn. De tl { p p is een priemgetl } is niet regulier. De tl { n n n 0 } is niet regulier. ww R (de tl vn lle even plindromen) is niet regulier. Verzin zelf nog meer vooreelden. Reguliere Uitdrukkingen Jn vn Eijck p.18
Trnsducers Een trnsducer is een utomt die tot tk heeft eindige invoer rijtjes om te zetten in eindige uitvoerrijtjes. In plts vn lleen een symool te lezen, zet de trnsducer het symool om in een rijtje. We nemen n dt een trnsducer deterministisch is (nders wordt de uitvoer onvoorspelr). Mk vn een deterministische utomt een trnsducer door elke pijl met een symool te vervngen door een pijl met een symool gevolgd door een rijtje w. Dus: vervng door :w. Vooreeld: :1 :{} Reguliere Uitdrukkingen Jn vn Eijck p.19
Trnsducers: vooreelden Progrmm s die ptronen omzetten in ndere ptronen zijn in feite trnsducers. Bij vooreeld: Het omzetten vn je eigen nm in hoofdletters, overl wr die nm voorkomt in een estnd. Het weglten vn regels uit een estnd die lleen spties evtten. Het comprimeren vn rijtjes vn meer dn één sptie in een regel door een enkele sptie. Je kunt trnsducers specificeren met sed (zie opdrchten verderop). Reguliere Uitdrukkingen Jn vn Eijck p.20
Opdrchten: Deterministische utomten construeren Geef (deterministische) utomten over het lfet 0,1 voor de volgende ntuurlijke tl determintoren: 1. Alle (dwz, de utomt die lleen rijtjes 1-en ccepteert) 2. Geen 3. Sommige 4. Niet lle 5. meer dn drie 6. hoogstens zeven 7. minstens drie en hoogstens zeven Reguliere Uitdrukkingen Jn vn Eijck p.21
Opdrchten: Reflectie op utomten 1. Is er een lgemeen recept te vinden voor hoe je de utomt voor Niet lle construeert uit die voor lle? 2. Net zo: is er een lgemeen recept om de utomt voor minstens drie en hoogstens zeven te construeren uit die voor minstens drie en hoogstens zeven? 3. Is het mogelijk een utomt te geven voor de determintor meer dn de helft? Als je denkt dt het kn, geef dn de utomt die het doet, en nders: geef zo nuwkeurig mogelijk n wrom je denkt dt het niet kn. Reguliere Uitdrukkingen Jn vn Eijck p.22
Opdrcht: Regulier of niet? De decimle expnsie vn 1 7 op: 1 7 = 0,14285714285714... (enz, d infinitum) vind je door de strtdeling 7/1\.. uit te voeren. Dt levert Lt T de tl zijn vn lle deelstukken genomen uit deze oneindige expnsie, dwz T = {w w is een deelrijtje vn 0,14285714285714...}. Dit is een tl over het lfet,, 0,..., 9. Is deze tl regulier? Zo j: geef een utomt die de tl herkent. Zo nee: geef n wrom de tl volgens jou niet regulier kn zijn. Reguliere Uitdrukkingen Jn vn Eijck p.23
Opdrchten: Trnsducers 1. Definiëer een trnsducer die klinkers vn medeklinkers onderscheidt. 2. Definiëer een trnsducer die je eigen nm omzet in hoofdletters, mr de rest vn de tekst ongemoeid lt. 3. Definiëer een trnsducer die je eigen nm vervngt door NN, mr de rest vn de tekst ongemoeid lt. 4. Definiëer een trnsducer die getllen in rische cijfers (1 tot en met 20) omzet in woorden ( een tot en met twintig ), en de rest vn de tekst ongemoeid lt. 5. Geef een trnsducer voor het comprimeren vn rijtjes vn meer dn één sptie in een regel door een enkele sptie. 6. Mk implementties in sed. Reguliere Uitdrukkingen Jn vn Eijck p.24