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: deterministisch en nondeterministisch Taal L is regulier L geaccepteerd door een dfa Taal L is regulier L geaccepteerd door een nfa 3 / 31
Grammatica s Een grammatica definieert een taal. Toepassingsgebieden zijn natuurlijke taal, kunstmatige intelligentie en syntax van programmeertalen. Voorbeeld zin lidw znw werkw lidw znw lidw de lidw een znw boer znw koe werkw melkt Met deze spelregels kun je een zin bouwen. 4 / 31
Grammatica s Voorbeeld de boer melkt een koe is een zin in de taal. zin lidw znw werkw lidw znw de znw werkw lidw znw de boer werkw lidw znw de boer melkt lidw znw de boer melkt een znw de boer melkt een koe Bijv. een koe melkt de boer is ook een zin in de taal. 5 / 31
Grammatica s Een grammatica G = (V, T, S, P) bestaat uit: eindige verzameling V van variabelen (in het voorbeeld: zin, lidw, znw, werkw ) eindige verzameling T van terminals (in het voorbeeld: de, een, boer, koe, melkt) symbool S V, de startvariabele (in het voorbeeld: zin ) eindige verzameling P van producties x y met x (V T ) + y (V T ) (meestal en in het voorbeeld: x V ) 6 / 31
Taal gegenereerd door een grammatica Als x y een productie in P is, dan is er voor elke u, v (V T ) een afleidingsstap uxv uyv Er is een afleiding u v (resp. u + v) als v uit u verkregen kan worden door nul (resp. één) of meer afleidingsstappen. Voor een grammatica G = (V, T, S, P) is de taal gegenereerd door G. L(G) = {w T S + w} 7 / 31
Taal gegenereerd door een grammatica Voorbeeld G = ({S}, {a, b}, S, P), waarbij P bestaat uit S asb S λ Dan geldt: L(G) = {a n b n n 0}. Vraag Geef een grammatica G zo dat L(G) = {a, b} {c}{b, c}. 8 / 31
Notationele conventies voor grammatica s Bij het definiëren van G = (V, T, S, P) gebruiken we hoofdletters voor variabelen en kleine letters voor terminals. We specificeren daarom vaak alleen de producties. Voorbeeld G 1 G 2 S Ab S asb A aab S b A λ L(G 1 ) = L(G 2 ) = {a n b n+1 n 0}. 9 / 31
B(ackus) N(aur) F(orm) Zet variabelen tussen en. Voorbeeld stm var := expr stm stm ; stm stm begin stm end stm if cond then stm else stm stm if cond then stm stm while cond do stm cond var expr Schrijf var ::= x y z in plaats van var x var y var z 10 / 31
Rechts-lineaire grammatica s Een grammatica G = (V, T, S, P) heet rechts-lineair als er alleen producties zijn van de vorm met A, B V en u T. A ub en A u Vraag Geef een rechts-lineaire grammatica G zo dat L(G) = {a, b} {aa}{b} 11 / 31
Rechts-lineaire grammatica s reguliere talen Stelling Taal L is regulier er is een rechts-lineaire grammatica G met L(G) = L Constructie ( = ) Voor elke rechts-lineaire grammatica G = (V, T, S, P) is er een nfa M = (Q, Σ, δ, q 0, F ) met L(M) = L(G). Σ = T V {A f } Q, met A f V. Voor elke rechterkant a 1 a n B (resp. a 1 a n ) in P met n 1 zit a i+1 a n B (resp. a i+1 a n A f ) in Q voor i = 1,..., n. q 0 = S F = {A f } 12 / 31
Rechts-lineaire grammatica s naar nfa s Voor elke productie in P van de vorm A a 1 a n B A a 1 a n met n 1 introduceren we in M pijlen A a 1 a 2 a n B a 2 a n B A a 1 a a 2 a n A 2 a f n Af Voor producties A B en A λ in P introduceren we pijlen A λ B A λ A f Er bestaat een afleiding in G van S naar u T dan en slechts dan als er een pad is in M van S naar A f met als labels achtereenvolgens de elementen van u. Oftewel, L(G) = L(M). 13 / 31
Vraag Geef een nfa die de taal accepteert die wordt gegenereerd door S at T abs b 14 / 31
Vraag Hoe kunnen we bij een nfa een equivalente rechts-lineaire grammatica bouwen? 15 / 31
Nfa s naar rechts-lineaire grammatica s Constructie ( ) Voor elke nfa M = (Q, Σ, δ, q 0, F ) is er een rechts-lineaire grammatica G = (V, T, S, P) met L(G) = L(M). V = Q en T = Σ en S = q 0. P bevat voor elke r δ(q, a) (of r δ(q, λ)) een productie en voor elke q F een productie q ar (of q r) q λ Er is een afleiding in G van S naar u T dan en slechts dan als er een pad is in M van S naar een toestand in F met als labels achtereenvolgens de elementen van u. Oftewel, L(G) = L(M). 16 / 31
Vraag Geef een rechts-lineaire grammatica die genereert. L({ab}({a} {cb}) {b}) 17 / 31
Links-lineaire grammatica s Een grammatica G = (V, T, S, P) heet links-lineair als er alleen producties zijn van de vorm met A, B V en u T. A Bu en A u Stelling Een taal L is regulier er is een links-lineaire grammatica G met L(G) = L. Dit volgt uit het feit dat L R regulier is voor reguliere talen L. 18 / 31
Links-lineaire grammatica s Rechts- en links-lineaire producties tezamen genereren niet altijd een reguliere taal. Voorbeeld G is de grammatica S aa A Sb S λ L(G) = {a n b n n 0} is niet regulier. 19 / 31
Reguliere expressies We definiëren de reguliere expressies over een input alfabet Σ: is een reguliere expressie λ is een reguliere expressie a is een reguliere expressie voor alle a Σ r 1 + r 2 is een reguliere expressie voor alle reg. expr. r 1 en r 2 r 1 r 2 is een reguliere expressie voor alle reg. expr. r 1 en r 2 r is een reguliere expressie voor alle reg. expr. r Elke reguliere expressie r definieert een taal L(r): L( ) = L(λ) = {λ} L(a) = {a} (a Σ) L(r 1 + r 2 ) = L(r 1 ) L(r 2 ) L(r 1 r 2 ) = L(r 1 )L(r 2 ) L(r ) = L(r) 20 / 31
Source: xkcd.com 21 / 31
Reguliere expressies Voorbeeld L((a + b) c ) = {a, b}{c} Reguliere expressies worden gebruikt om patronen in een stuk tekst te zoeken en manipuleren (bijv. grep in Unix). Script-talen Perl en Tcl/Tk zijn gebaseerd op reguliere expressies. Vraag Geef een reguliere expressie r over {a, b} zo dat L(r) uit de strings bestaat die het patroon bab bevatten. 22 / 31
Reguliere expressies corresponderen met reguliere talen Stelling Een taal L is regulier er is een reguliere expressie r met L(r) = L. Constructie Voor elke reguliere expressie r is er een nfa M met L(M) = L(r). We construeren inductief voor elke een reguliere expressie een nfa met dezelfde bijbehorende taal. Deze nfa heeft één eindtoestand, verschillend van de starttoestand. 23 / 31
Reguliere expressie naar nfa (1) λ λ a a λ r 1 λ r 1 + r 2 λ r 2 λ r 1 r 2 r 1 λ r 2 24 / 31
Reguliere expressie naar nfa (2) λ r λ r λ λ ((a ) b) laat zien dat de nieuwe begintoestand noodzakelijk is. (a (b )) laat zien dat de nieuwe eindtoestand noodzakelijk is. 25 / 31
nfa naar reguliere expressie (1) Voor elke nfa M is er een reguliere expressie r met L(r) = L(M). Voeg (als er meerdere eindtoestanden zijn) een nieuwe toestand q toe, en uit elke eindtoestand in M een pijl naar q met label λ. Laat alleen q eindtoestand zijn. We zetten nfa M met #F = 1 om in een reguliere expressie r met L(r) = L(M). We gebruiken gegeneraliseerde transitiegrafen, met reguliere expressies als labels van pijlen. Als er twee pijlen zijn van een q 1 naar een q 2, met labels r 1 en r 2, vervang deze dan door één pijl met label r 1 + r 2. 26 / 31
nfa naar reguliere expressie (2) Als er behalve q 0 en de eindtoestand nog andere toestanden zijn, verwijder dan één andere toestand q als volgt. Voeg voor elke pijl van een toestand q 1 naar q met label r 1 en voor elke pijl van q naar een toestand q 2 met label r 2 een nieuwe pijl toe van q 1 naar q 2 met label r 1 r 2 als er geen pijl is van q naar q, of met label r 1 r r 2 als de pijl van q naar q label r heeft. 27 / 31
nfa naar reguliere expressie (3) Als F {q 0 }, dan is de gegeneraliseerde transitiegraaf uiteindelijk van de vorm r 1 r 4 q 0 r 2 (eventueel met r 1, r 2, r 3 of r 4 gelijk aan ). L(r1 r 2 (r 4 + r 3 r1 r 2 ) ) = L(M) r 3 Vraag Welke gegeneraliseerde transitiegraaf en reguliere expressie krijgen we uiteindelijk in het geval dat F = {q 0 }? 28 / 31
Vraag Geef een reguliere expressie r zo dat L(r) = {w {a, b} n a (w) even en n b (w) oneven} met n a (w) en n b (w) respectievelijk het aantal a s en b s in w. 29 / 31
Alternatieve beschrijvingen van reguliere talen De volgende beweringen zijn equivalent: er is een dfa M met L(M) = L er is een nfa M met L(M) = L er is een rechts-lineaire grammatica G met L(G) = L er is een links-lineaire grammatica G met L(G) = L er is een reguliere expressie r met L(r) = L 30 / 31
Vooruit kijken Lees: Linz 1.2, 3.1 3.3 Maak: Linz 1.2: 11a,b,c, 13, 14a,b,e,f,h Linz 3.1: 5, 7, 13, 16,a,b Linz 3.2: 1, 2, 4b,d, 9, 10a,c, 13a Linz 3.3: 1, 3, 6, 12 Volgend college: Eigenschappen van reguliere talen 31 / 31