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å språk L 1 och L 2 kan man bilda det konkatenerade språket L 1 L 2 : L 1 L 2 = {uv : u L 1 och v L 2 } L 2 = LL; L 3 = LLL; L 4 = LLLL; L 1 = L; L 0 = {e}: Givet ett språk L kan man bilda Kleene star L* L* = {e} L L 2 L 3 med andra ord språket som består av alla konkateneringar av alla längder av ord i L (+ e) (Notera: * är mängden av alla strängar som kan bildas av alfabetet ) 5/6/08 Reguljära uttryck 2 Några operationer på språk Givet att L och M är språk (på alfabetet ) kan vi bilda L M L M L - M * - L (komplementet till L) LM L* 5/6/08 Reguljära uttryck 3 Reguljära uttryck 1
Introduktion till reguljära uttryck Man har ett behov av att klassificera strängar av olika slag Man vill också uttrycka en klass eller mängd strängar på ett så kortfattat sätt som möjligt En sådan klass eller mängd kan sägas utgöra ett språk, t ex ett naturligt språk eller ett programspråk Vi ska titta på den enklaste formen av språk, de språk som beskrivs med så kallade reguljära uttryck (regular expression, RE) 5/6/08 Reguljära uttryck 4 Reguljära uttryck specificerar språk Def. reguljära uttryck: givet ett alfabet Ø, e och varje a är ett reguljärt uttryck (grundelement) om α och β är reguljära uttryck är även (α β), (αβ) och α* reguljära uttryck ingen annan sträng över alfabetet är ett reguljärt uttryck Varje reguljärt uttryck α specificerar ett språk L(α) L(Ø) = Ø, L(e) = {e}, L(a) = {a}, för varje a om α och β är reguljära uttryck så är L(α β) = L(α) L(β) L((αβ)) = L(α)L(β) L(α*) = (L(α))* 5/6/08 Reguljära uttryck 5 Exempel på RE Hur kan man beskriva strängar i ett språk med ett reguljärt uttryck? Exempel 1: ett språk vars strängar byggs upp av alfabetet {a,b} och innehåller minst ett a: (a b)*a(a b)* t ex: baaaba, a, ab Exempel 2: ett språk vars strängar byggs upp av alfabetet {a,b} : ((ab) (ba))* t ex: abababba, abbaab 5/6/08 Reguljära uttryck 6 Reguljära uttryck 2
Att koppla RE till DFA Vi tittar på det reguljära uttrycket ((ab) (ba))* Vi får tillståndsdiagrammet q0 a b b a q1 q2 5/6/08 Reguljära uttryck 7 FA och reguljära språk Vi tittar alltså på språk (dvs en viss kategori av textsträngar) och hur de hör ihop med automater Först har vi den klass av språk som accepteras av ändliga automater Det visar sig vara precis klassen av reguljära språk, dvs. språk som kan beskrivas av reguljära uttryck 5/6/08 Reguljära uttryck 8 Slutning eller hölje (closure) Klassen av språk som accepteras av FA sägs vara sluten under ett antal operationer, vad innebär det? En mängd är sluten under en viss operation om resultatet av operationen också är element i mängden; t ex är mängden heltal sluten under subtraktion Att mängden av reguljära språk är sluten under en rad operationer innebär alltså att resultatspråket (dvs det språk som blir resultatet av att använda en operation) också tillhör klassen reguljära språk 5/6/08 Reguljära uttryck 9 Reguljära uttryck 3
Mängden reguljära språk är sluten under följande operationer Utgångsläget är L och M, två reguljära språk Union - L M, dvs strängar från L eller strängar från M Snitt (intersection) - de strängar som L och M har gemensamt bildar det reguljära språket L M Komplement - alla strängar som inte hör till L bildar godkända strängar i det reguljära språket L Konkatenering - strängar från L hopslagna med strängar från M bildar strängar i ett språk som också är reguljärt Kleene star - obegränsade upprepningar av godkända strängar i L bildar godkända strängar i det reguljära språket L* 5/6/08 Reguljära uttryck 10 Icke reguljära språk Ett språk är reguljärt omm det accepteras av en FA. Alla ändliga språk är reguljära Många oändliga språk är reguljära men inte alla Ex med Σ = {0,1}: A = {0 n 1 n : n 0} B = {w: w har lika många 0 och 1} C = {w: w har lika många delsträngar 01 och 10} Ovanstående kan inte uttryckas med reguljära uttryck, kan inte accepteras av någon FA, för det krävs någon sorts minne som kommer ihåg obegränsat antal nollor respektive ettor (men en FA har ju bara ett fixt, ändligt antal tillstånd) 5/6/08 Reguljära uttryck 11 Pumping lemma Vad är det som gör att reguljära språk kan vara oändliga? (Intuitivt: förekomsten av en loop i motsvarande automat; förekomst av Kleene star i motsvarande reguljära uttryck) Pumping lemma. Alla reguljära språk har följande egenskap: alla strängar i språket kan "pumpas" om de är minst så långa som ett speciellt värde, "pumplängden". Dvs varje sträng har en sektion som kan upprepas hur många gånger som helst, och resulterande sträng tillhör fortfarande språket 5/6/08 Reguljära uttryck 12 Reguljära uttryck 4
Pumping lemma, formellt Om L är ett reguljärt språk, finns ett tal n sådant att om w är någon sträng vilken som helst i L med längd n, så kan w delas i tre delar (konkatenerade), w = xyz, där y > 0 xy n för varje i 0, xy i z L Kan bevisas med något som kallas pigeonholeprincipen (överkurs) Icke-reguljära språk kan ändå formaliseras, men på andra sätt 5/6/08 Reguljära uttryck 13 Reguljära uttryck 5