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 az utolsó 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:
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:
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:
|