In een reguliere taal… zin y x z S E A B v u w u w x z v u w x z v v u w x z v v v u w x z v v v lengte n
Jan 03, 2016
In een reguliere taal…
zinyx z
S EA B
vu w
u wx z
vu wx zv
vu wx zv v
vu wx zv v v
lengte n
In een reguliere taal…
vu w
vu wx zv v
yx z
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 vi w z is ook een zin
“Pomp-stelling”
L is Regulier
n
x, y, z xyzL |y|n
u, v, w uvw=y |v|1
i 0 x u vi w z L
vu w
vu wx zv v
yx z
Pomp-stelling omdraaien…
L is Regulier
n
x, y, z xyzL |y|n
u, v, w uvw=y |v|1
i 0 x u vi w z L
Gebruik vanomgekeerde Pomp-stelling
n
x, y, z xyzL |y|n
u, v, w uvw=y |v|1
i 0 x u vi w z L
Noem mij een n !
…dan geef ik jeeen zin xyz …
yx z …en nou mag jij v aanwijzen …
vu w
…dan vind ik een i zoals nodig!
L is niet Regulier
neem dan i=2…
a a a a b b b b b b baa a a a
…wijs maar een v aan!
Voorbeeld:{ ambm | m0 } 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 a
L
Gevolg
(Hoofdstuk 2){ am bm | m0 } is contextvrij
(Pomp-stelling){ am bm | m0 } is niet regulier
Er zijn contextvrije talendie niet regulier zijn
S a S b S
Reguliere talen: overzicht
RGDefinitie 8 +9
DFADefinitie 1 +3
NFADefinitie 4 +6
REDefinitie 14+15
Stelling 13
Stelling 12
Stelling 7
triviaal
ZRGDefinitie (11)
Stelling 11
triviaal
CFGDefinitie 2.5+7
triviaal
onmogelijk
Stelling 16
Stelling 17
Chomsky-hierarchie
Type 3: Reguliere grammatica’slinks: N rechts: T* N?
Type 2: Contextvrije grammatica’slinks: N rechts: (NT)*
Type 1: Contextgevoelige grammatica’slinks: N rechts: (NT)* Type 0: Algemene grammatica’slinks: (NT)+ rechts: (NT)*
Chomsky-hierarchie
Er zijn talen die contextvrij zijnmaar niet regulier { am bm | m0 }(bewijs met Pomp-stelling)
Er zijn talen die zelfs niet contextvrij zijn { am bm cm | m0 } (bewijs met uitgebreide Pomp-stelling)
Pomp-stellingen
We kunnen ook een pompstelling formuleren voorContextvrije talen
…en daarmee bewijzen datbepaalde talen niet Contextvrij zijn
{ am bm cm | m0 } is niet contextvrij
Ontleedboom bij CFG
S ……… | ……A ………… | ……B …… | …… | …C …… | … | …
m
k nivo’s
m k
z
S
Ontleedboom bij CFG
z
S ……… | ……A ………… | ……B …… | …… | …C …… | … | …
m
>k nivo’s
> m k
k non-
terminals
S
A
A
Als de zin lang genoeg is,is er een pad met een dubbele nonterminal
Pomp-stelling voor CFG
u y
S
v x
A
w
A
v x
A
w
A
v x
A
w
A
Pomp-stelling voor CFG
u y
S
A
w
A
Pomp-stelling voor CFG
u y
S
v x
A
w
A
v x
A
w
A
Voor alle i 0 … u vi w xi y
is ook een zin
Pomp-stelling voor CFG
u y
S
v x
A
w
A
Voor alle i 0 … u vi w xi y
is ook een zin
v en x niet allebei leeg
k+1 nivo’s
|vwx| m k+1
Pomp-stellingvoor Reguliere talen
L is Regulier
n
x, y, z xyzL |y|n
u, v, w uvw=y |v|1
i 0 x u vi w z L
vu w
vu wx zv v
yx z
namelijk|N|
Pomp-stellingvoor Contextvrije talen
L is Contextvrij
c
z zL |z|>c
u,v,w,x,y uvwxy=z |vx| 1
i 0 u vi w xi y L
namelijkm k
|vwx| d
, d
namelijkm k+1
Omgekeerde Pomp-stellingvoor Contextvrije talen
c, d
z zL |z|>c
u,v,w,x,yuvwxy=z |vx| 1
i 0 u vi w xi y L
L is niet Contextvrij
|vwx| d
Voorbeeld:{ anbncn | n0 } 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)
v xw v xw
Opsplitsing bevat <3 verschillende letters
Pompen met i>1 vermeerdert niet alle letters
…wijs maar eenopsplitsing uvwxy aan!
|vwx| d
Stelling 2.10
Als L en MCF-talen zijn dan…
L M is ook CF L M is ook CF L* is ook CF
Als L en MReg-talen zijn dan…
L M is ook Reg
L M is ook Reg
L* is ook Reg
Stelling 5.11
L M is ook Reg
Cmpl(L) is ook Reg
L M is niet CF
Cmpl(L) is niet CF
Doorsnede van CF-talenis niet altijd CF
{ an bn | n 0 } is contextvrij { ck | k 0 } is contextvrij { an bn ck | n, k 0 } is contextvrij { ak bn cn | n, k 0 } is contextvrij Met de pompstelling bewezen we:
{ an bn cn | n 0 } is niet contextvrij
Dus CF-eigenschap blijft niet behouden onder doorsnede
Ontleden met een Stackmachine
S a SS c SS b
a a b
Nonterminal bovenop stack?Vervang door een van de regels!
Terminal bovenop stack?Accepteer die input
S Sa
S
a b
Sa
S
b
b
maar door welke?
Ontleden met een Stackmachine
S c A | bA c B C | b S A | aB c c | C bC a S | b a
c c c c b a
S
c c c c b a
Ac
c c c b a
A
c c c b a
CBc
c c b a
CB
c c b a
Ccc
c b a
Cc
b a
C
b a
ab
a
a
LL(1) grammatica’s
Als je op grond van het eerstvolgende input-symboolde keuze kunt maken
dan is de grammatica een LL(1)-grammatica
… en kan het met de eerste k symbolendan is het een LL(k )-grammatica
Leftmost
Lookahead(k)
Complexiteit van ontleden
Tijd nodig voor het parsenvan een zin met lengte n
Contextvrije grammatica: O(n3) Contextvrije grammatica
met LL(1)-eigenschap: O(n)
Wanneer is een grammatica LL(1) ?
Definitie LL(1)
Een grammatica is LL(1) Als je op grond van het eerstvolgende
input-symbool kunt kiezen uit alternatieven
Formeel: Als de lookahead-sets van de
alternatieven van elke nonterminalonderling disjunct zijn
Definitie Lookaheadset van alternatief N
S
x
N
{ x | S * N * x }
Lah(Nx) = {x}Lah(NP) = ……
Eigenschappen vanNonterminals
… nodig om Lookahead-sets te bepalen
Empty(N) First(N)
Follow(N)
N *
S
x
N
x
N