In een reguliere taal… zin yxz S E A B vuwuwxzvuwxzvvuwxzvvvuwxzvvv lengte n
In een reguliere taal… vuwvuwxzvvyxz Er is een n, zo dat … Voor elke deelzin y met lengte n … Er is een kern v, waarvoor … Voor alle i 0 … x u v i w z is ook een zin
“Pomp-stelling” L is Regulier n x, y, zxyz L|y| n u, v, wuvw=y|v| 1 i 0x u v i w z L vuw vuwxzvvyxz
Pomp-stelling omdraaien… L is Regulier n x, y, zxyz L|y| n u, v, wuvw=y|v| 1 i 0x u v i w z L
Gebruik van omgekeerde Pomp-stelling n x, y, zxyz L|y| n u, v, wuvw=y|v| 1 i 0x u v i w z L Noem mij een n ! …dan geef ik je een zin xyz … yxz …en nou mag jij v aanwijzen … vuw …dan vind ik een i zoals nodig! L is niet Regulier
neem dan i=2… a a b b b b b b baa …wijs maar een v aan! Voorbeeld: { a m b m | m 0 } is niet regulier Noem mij een n ! …met een opsplitsing … a a a a a a ab b b b b b b Nou, ehh, 7 ! a a a a a a a b b b b b b b …dan is hier een zin … deze neem ik! a L
Gevolg n(Hoofdstuk 2) { a m b m | m 0 } is contextvrij n(Pomp-stelling) { a m b m | m 0 } is niet regulier nEr zijn contextvrije talen die niet regulier zijn S a S bS S a S bS
Reguliere talen: overzicht RG Definitie 8 +9 DFA Definitie 1 +3 NFA Definitie 4 +6 RE Definitie Stelling 13 Stelling 12 Stelling 7 triviaal ZRG Definitie (11) Stelling 11 triviaal CFG Definitie triviaal onmogelijk Stelling 16 Stelling 17
Chomsky-hierarchie nType 3: Reguliere grammatica’s links: N rechts: T* N ? nType 2: Contextvrije grammatica’s links: N rechts: (N T)* nType 1: Contextgevoelige grammatica’s links: N rechts: (N T)* nType 0: Algemene grammatica’s links: (N T) + rechts: (N T)*
Chomsky-hierarchie nEr zijn talen die contextvrij zijn maar niet regulier { a m b m | m 0 } (bewijs met Pomp-stelling) nEr zijn talen die zelfs niet contextvrij zijn { a m b m c m | m 0 } (bewijs met uitgebreide Pomp-stelling)
Pomp-stellingen nWe kunnen ook een pompstelling formuleren voor Contextvrije talen n…en daarmee bewijzen dat bepaalde talen niet Contextvrij zijn n{ a m b m c m | m 0 } is niet contextvrij
Ontleedboom bij CFG S ……… | …… A ………… | …… B …… | …… | … C …… | … | … m m k nivo’s m k z S
Ontleedboom bij CFG z S ……… | …… A ………… | …… B …… | …… | … C …… | … | … m m >k nivo’s > m k k non- terminals S A A nAls de zin lang genoeg is, is er een pad met een dubbele nonterminal
Pomp-stelling voor CFG uy S vx A w A vx A w A vx A w A
uy S A w A
uy S vx A w A vx A w A nVoor alle i 0 … u v i w x i y is ook een zin
Pomp-stelling voor CFG uy S vx A w A nVoor alle i 0 … u v i w x i y is ook een zin n v en x niet allebei leeg k+1 nivo’s n |vwx| m k+1
Pomp-stelling voor Reguliere talen L is Regulier n x, y, zxyz L|y| n u, v, wuvw=y|v| 1 i 0x u v i w z L vuw vuwxzvvyxz namelijk |N|
Pomp-stelling voor Contextvrije talen L is Contextvrij c zz L |z|>c u,v,w,x,yuvwxy=z |vx| 1 i 0u v i w x i y L namelijk m k |vwx| d, d namelijk m k+1
Omgekeerde Pomp-stelling voor Contextvrije talen c, d zz L |z|>c u,v,w,x,yuvwxy=z |vx| 1 i 0u v i w x i y L L is niet Contextvrij |vwx| d
Voorbeeld: { a n b n c n | n 0 } is niet CF Noem mij een c,d ! a a a … a a a b b b … b b b c c c … c c c …dan is hier een zin … max(c,d) vxwvxw nOpsplitsing bevat <3 verschillende letters nPompen met i>1 vermeerdert niet alle letters …wijs maar een opsplitsing uvwxy aan! |vwx| d
Stelling 2.10 Als L en M CF-talen zijn dan… nL M is ook CF nL M is ook CF nL*is ook CF Als L en M Reg-talen zijn dan… nL M is ook Reg nL M is ook Reg nL*is ook Reg Stelling 5.11 nL M is ook Reg nCmpl(L)is ook Reg nL M is niet CF nCmpl(L)is niet CF
Doorsnede van CF-talen is niet altijd CF n { a n b n | n 0 } is contextvrij n { c k | k 0 } is contextvrij n { a n b n c k | n, k 0 } is contextvrij n { a k b n c n | n, k 0 } is contextvrij n Met de pompstelling bewezen we: { a n b n c n | n 0 } is niet contextvrij n Dus CF-eigenschap blijft niet behouden onder doorsnede
Ontleden met een Stackmachine S a S S c S S b a a b nNonterminal bovenop stack? Vervang door een van de regels! nTerminal bovenop stack? Accepteer die input S S a S a b S a S b b maar door welke?
Ontleden met een Stackmachine S c A | b A c B C | b S A | a B c c | C b C a S | b a c c c c b a S A c c c c b a A C B c c c b a C B C c c c b a C c b a C a b a a
LL(1) grammatica’s nAls je op grond van het eerstvolgende input-symbool de keuze kunt maken dan is de grammatica een LL(1)-grammatica n… en kan het met de eerste k symbolen dan is het een LL(k )-grammatica Leftmost Lookahead(k)
Complexiteit van ontleden Tijd nodig voor het parsen van een zin met lengte n nContextvrije grammatica: O(n 3 ) nContextvrije grammatica met LL(1)-eigenschap:O(n) Wanneer is een grammatica LL(1) ?
Definitie LL(1) Een grammatica is LL(1) nAls je op grond van het eerstvolgende input-symbool kunt kiezen uit alternatieven Formeel: nAls de lookahead-sets van de alternatieven van elke nonterminal onderling disjunct zijn
Definitie Lookaheadset van alternatief N S x N { x | S * N * x } Lah(N x ) = {x} Lah(N P ) = ……
Eigenschappen van Nonterminals … nodig om Lookahead-sets te bepalen nEmpty(N) nFirst(N) nFollow(N) N * S x N N