Växjö 15 april -04Språk & logik: Reguljära uttryck1 DAB760: Språk och logik 15/4: Finita automater och 13-15reguljära uttryck Leif Grönqvist Växjö Universitet (MSI) GSLT (Sveriges nationella forskarskola i språkteknologi) Göteborg Universitet (Institutionen för lingvistik)
2Språk & logik: Reguljära uttryckVäxjö 15 april -04 Dagens föreläsning Repetition av determiniseringsalgoritmen Reguljära uttryck Obs! Webbsida med Leifs material finns länkad från:
3Språk & logik: Reguljära uttryckVäxjö 15 april -04 Exempel på ett språk: jämna binära tal Σ = {0, 1} Exempel på strängar i Σ * : ε, 0, 1, 01, 10, 000 Språket J: Mängden av alla strängar i Σ * vars sista symbol är 0 (och första är 1 om längden är minst 2 symboler) Exempel: 0, 10, 100, Vi vill inte ha med 00, 010, ε, 1, 111, etc.
4Språk & logik: Reguljära uttryckVäxjö 15 april -04 Automat för jämna binära tal (felaktig) Alfabetet Σ = {0, 1} Tillståndsmängd S = {0, 1} Starttillstånd: 0 Accepterande tillstånd: start 0 1
5Språk & logik: Reguljära uttryckVäxjö 15 april -04 Korrekt (icke-deterministisk) automat för jämna binära tal 13 2 start 0 Icke-deterministisk eftersom tillstånd 0 har två övergångar med symbol 0 Vi gör den deterministisk!
6Språk & logik: Reguljära uttryckVäxjö 15 april -04 Determinisering av icke- deterministisk FSA En icke-deterministisk automat N med tillståndsmängd S={s 0, s 1, …, s m } kan determiniseras till D: Tillstånd i D (D-tillstånd) utgörs av mängder av tillstånd i N (N-tillstånd) Låt S 0 = {s 0 } vara starttillstånd för D De accepterande tillstånden i D är de D-tillstånd som innehåller något av de accepterande N- tillstånden Givet ett D-tillstånd S i och en symbol x, skapa en övergång från S i för x till det D-tillstånd S j som innehåller alla N-tillstånd för vilka det finns en övergång för x från något N-tillstånd i S i
7Språk & logik: Reguljära uttryckVäxjö 15 april -04 De två automaterna Den icke-deterministiska (N) S = {1,2,3} S 0 = 1 F = {3} Σ = {0, 1} Den deterministiska (D) S = {1, 2, 3, 12, 13, 23, 123} S 0 = 1 F = {3, 13, 23, 123} (alla som innehåller N- tillståndet 3) Σ = {0, 1}
8Språk & logik: Reguljära uttryckVäxjö 15 april -04 Resultatet av determiniseringen Start
9Språk & logik: Reguljära uttryckVäxjö 15 april -04 Men vissa tillstånd kan man inte komma till! Det finns inga övergångar till: 12, 13 eller 123 så vi tar bort dem Kvar blir en deterministisk automat med fyra tillstånd Start
10Språk & logik: Reguljära uttryckVäxjö 15 april -04 Implementation Deterministiska FSA/FST implementeras extremt effektivt i C En label för varje tillstånd Använd goto för att hoppa mellan tillstånd Stacken används inte – vi behöver inte komma ihåg varifrån vi kommit Icke-determinism är besvärligare Välj en väg i taget Backtracka för att testa alla möjligheter I praktiken är de användbara om det inte finns ”för mycket” icke-determinism
11Språk & logik: Reguljära uttryckVäxjö 15 april -04 Reguljära uttryck Ett annat sätt att definiera formella språk Enklare för människor – liknar mer vårt sätt att tänka(?) Språken vi kan definiera är de samma som för finita automater De kan kompileras till deterministiska automater eller transduktorer
12Språk & logik: Reguljära uttryckVäxjö 15 april -04 Definitioner Atomära reguljära uttryck givet alfabetet Σ x (där x ε Σ) ε (den tomma strängen) Ø (matchar ingenting) R (en variabel innehållande ett reguljärt uttryck) Språken som definieras av atomära reguljära uttryck L(x) = {x} L(ε) = {ε} L(Ø) = Ø
13Språk & logik: Reguljära uttryckVäxjö 15 april -04 Sammansatta reguljära uttryck Om R och S är reguljära uttryck så är: Union R | S ett reguljärt uttryck L (R | S) = L(R) L(S) Konkatenering R S ett reguljärt uttryck L (R S) = {r s | r ε L(R), s ε L(S)} Hölje R* ett reguljärt uttryck L (R*) = L(ε | R | R R | R R R | …) Precedensordning: Hölje, Konkatenering, Union
14Språk & logik: Reguljära uttryckVäxjö 15 april -04 Exempel: de jämna binära talen Σ = {0, 1} Reguljärt uttryck: 0 | 1 (0 | 1)* 0 Vi får med 0 Samt alla sekvenser som börjar med 1 och slutar med 0 Men inga sekvenser som börjar med 0 förutom sekvensen 0
15Språk & logik: Reguljära uttryckVäxjö 15 april -04 Utvidgningar Det är smidigt att införa beteckningar för vanliga mängder: Teckenmängden siffra = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Reguljärt uttryck som beskriver siffra: (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9) Motsvarande i UNIX: [0-9] Reguljärt uttryck för heltalskonstant: (- | ε) siffra siffra*
16Språk & logik: Reguljära uttryckVäxjö 15 april -04 Fler utvidgningar Fler operatorer Noll eller en: R? R | ε En eller flera: R+ R R* Förenklad definition av heltalskonstanter: -? siffra+ Specialtecken i UNIX.Ett godtyckligt ASCII-tecken ^början på rad $Radslut [^0-9]Ett tecken som inte är en siffra
17Språk & logik: Reguljära uttryckVäxjö 15 april -04 Från reguljärt uttryck (RE) till FSA Denna algoritm konverterar ett RE till en icke-deterministisk automat med ε- övergångar Starttillstånd: s 0 Accepterande tillstånd s A Ingen övergång till s 0 Ingen övergång från s A
18Språk & logik: Reguljära uttryckVäxjö 15 april -04 RE -> FSA Atomära uttryck Ø: Ingen övergång ε: Lägg till en ε-övergång från s 0 till s A Symbol a: Lägg till en a-övergång från s 0 till s A En variabel innehållande ett reguljärt uttryck Operatorer (givet automater för uttrycken R och S) Union (R | S) Lägg till en ε-övergång från s 0 till R-start och S- start Lägg till ε-övergångar från R-accept och S-accept till s A
19Språk & logik: Reguljära uttryckVäxjö 15 april -04 RE -> FSA, forts. Operatorer, forts. Konkatenering (R S) Låt s 0 = R-start Låt s A = S-accept Låt R-accept = S-Start Hölje (R*) Lägg till en ε-övergång från s 0 till R-start Lägg till en ε-övergång från R-accept till s A Lägg till en ε-övergång från s 0 till s A Lägg till en ε-övergång från R-accept till R-start En annan algoritm tar bort ε-övergångarna
20Språk & logik: Reguljära uttryckVäxjö 15 april -04 Exempel De jämna binära talen: 0 | 1 (0 | 1)* 0 Ytterst har vi en union: R = 0 S = 1 (0 | 1)* 0 R är ett atomärt uttryck: S är en konkatenering av S 1 = 1 S 2 = (0 | 1)* S 3 = 0 S 2 är ett hölje, osv. s0s0 start sasa 0
21Språk & logik: Reguljära uttryckVäxjö 15 april -04 FSA -> RE Det finns en algoritm som gör även denna omvandling Läs mer i boken hur den fungerar