Next: About this document ...
A feladat:
Egy CF nyelvet az
nyelvtan definiál.
(a) Készíts erre a nyelvre gyenge LL(k) elemzőt minél kisebb k-val!
(b) Ezután elemezd az aaababaab szót!
(c) Készíts az (a)-ban adott gyenge elemzőből erőset,
aztán nézd meg, hogy hogyan viselkedik a gyenge és az erős az
aabab szón!
A megoldás:
Először is át kell alakítani a nyelvtant, hogy ne legyen
balrekurzív (Ez úgy megy, hogy az
szabályok
helyett az
,
szabályokat veszük be. Ezzel a közvetlen balrekurzió már
nincsen és ez most elég is):
,
,
.
Ez már szép nyelvtan, próbálkozzunk először
gyenge LL(1) elemzővel.
A táblácskák:
Itt már látszik is, hogy LL(1)-gyel nem megy, mert ebben a
táblácskában
mindkét szabály esetén lehetne a-t látni.
Jöjjön a gyenge LL(2).
A táblácskák:
Az elemzőtábla:
|
aa |
ab |
ba |
bb |
a |
b |
|
S1 |
|
|
|
|
|
|
,
1 |
S2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
,
3 |
|
|
,3 |
|
|
|
|
|
a |
pop |
pop |
|
|
pop |
|
|
b |
|
|
pop |
pop |
|
pop |
|
|
|
|
|
|
|
|
ACC |
Az aaababaab elemzése (elöl az input, aztán a veremtartalom, a veremtető a baloldalon, végül
az output):
Accept
Mivel a fenti gyenge elemzőtáblában nincsen ütközés a különböző indexű, de amúgy azonos
nemterminálisokhoz tartozó sorok között, készíthetünk a gyenge táblából
erőset, úgy hogy az indexezést elfelejtjük és a sorokat összevonjuk:
|
aa |
ab |
ba |
bb |
a |
b |
|
S |
|
|
|
|
|
|
|
|
|
,3 |
|
|
|
|
,3 |
a |
pop |
pop |
|
|
pop |
|
|
b |
|
|
pop |
pop |
|
pop |
|
|
|
|
|
|
|
|
ACC |
Nézzük meg, hogy hogyan viselkedik egy rossz szóra, például az aabab-re
a két elemző:
Előbb e gyenge:
HIBA!!!
Az erős:
HIBA!!!
Azaz a gyenge hamarabb észrevette a hibát. A két elemző gyengén ekvivalens,
de nem ekvivalens.
Next: About this document ...
Judit Csima
2000-04-20