• Nem Talált Eredményt

Greibach normálforma

In document ALGEBRAI NYELV- ÉS KÓDELMÉLET (Pldal 51-55)

I. NYELVEK 7

3. Környezetfüggetlen nyelvek 32

3.6. Greibach normálforma

A G = (VN, VT, S, H) környezetfüggetlen grammatikáról azt mondjuk, hogy Greibach normálformában van megadva, ha minden szabálya

X −→xP (X ∈VN, x∈VT, P ∈VN) alakú.

Ez a normálforma bizonyos analógiát mutat a3típusú grammatikákkal. Lé-nyeges különbség azonban, hogyP egynél több változóból is állhat. Ha ugyanis a Greibach normálforma további finomításával elérhető lenne, hogy a szabályok jobb oldalán mindig legfeljebb egy változó szerepeljen, akkor ez azt jelentené, hogy az L3 reguláris nyelvosztály megegyezne az L2 környezetfüggetlen nyelv-osztállyal. Ezt azonban később kimutatjuk, hogy nem igaz. A definíció alapján könnyen belátható, hogy a Greibach normálformájú grammatikában nincs bal-rekurzív változó. Egy Greibach normálformában megadott G grammatikában egy p∈L(G)szó levezetése pontosan |p|lépésből áll.

3.17. Példa. Tekintsük a Greibach normálformában megadott G= ({S, X, Y},{a, b}, S, H)

grammatikát, amelynek a szabályai:

S −→aY X, X −→aY, X −→b, Y −→b.

A 3.14 Lemma szerint az

S =⇒ aY X =⇒abX =⇒ abb, S =⇒ aY X =⇒abX =⇒abaY =⇒ abab

bal oldali levezetések mutatják, hogy L(G) = {abb, abab}. Az abb szó levezetése 3 lépésből, az abab szó levezetése pedig 4 lépésből áll.

3.18. Tétel. Szigorúan e-mentes környezetfüggetlen grammatikához van vele ekvivalens Greibach normálformában megadott grammatika.

Bizonyítás LegyenG= (VN, VT, S, H)szigorúane-mentes környezetfüggetlen grammatika. A 3.3 Tétel szerint G megadható Chomsky normálformában.

Vezessünk be a VN halmazon egy tetszőleges≤ rendezést. Legyen X1 < X2 <· · ·< Xn (n=|VN|).

Először olyan átalakításokat végzünk, amellyel elérjük, hogy a szabályok jobb oldala terminálissal vagy a bal oldalon lévő változónál nagyobb változóval kez-dődjön. Induljunk ki azokból a szabályokból, amelyek bal oldala X1. Ha X1

nem közvetlenül balrekurzív, akkor ezek a szabályok megfelelnek a követelmé-nyeknek.

Ha X1 közvetlenül balrekurzív, akkor a végezzük el a szabályokban a 3.16 Lemma szerinti átalakításokat. A bevezetett új változót jelölje X10, és legyen X10 < X1. Így az X10 és az X1 bal oldalú szabályok jobb oldala nem kezdődik X2-nél kisebb változóval.

Térjünk át azX2 bal oldalú szabályokra. AzX2 −→X1Xj alakú szabályo-kat cseréljük ki az összes X2 −→ P Xj alakú szabályra, ahol X1 −→ P alakú szabályok az előző lépések során kapott X1 bal oldalú szabályok. Ezzel elérjük, hogy a kapott szabályok jobb oldala terminálissal vagy X2-nél nem kisebb vál-tozóval kezdődik. Ha így azt kapjuk, hogy X2 közvetlenül balrekurzív, akkor a végezzük el a szabályokban ismét a 3.16 Lemma szerinti átalakításokat. Legyen az új változó X20. Ha X10-t definiáltuk, akkor legyen X20 < X10, ha pedig nem, akkor legyen X20 < X1. Így az X20 és az X2 bal oldalú szabályok jobb oldala nem kezdődik X3-nél kisebb változóval.

Legyen 1 ≤ k ≤ n. Tegyük fel, hogy minden Xk-nál kisebb változóra már teljesül, hogy ha egy szabály bal oldala Xk-nál kisebb változó, akkor a szabály jobb oldala terminálissal vagy ennél a változónál nagyobb változóval kezdődik. AzXk −→XlXj (1≤l < k)alakú szabályokat cseréljük ki az összes Xk −→P Xj alakú szabályra, ahol Xl −→P alakú szabályok az előző lépések során kapott Xl bal oldalú szabályok. Ezzel elérjük, hogy a kapott szabályok jobb oldala terminálissal vagy Xk-nál nem kisebb változóval kezdődik.

Ha Xk közvetlenül balrekurzív, akkor a végezzük el a szabályokban ismét a 3.16 Lemma szerinti átalakításokat. Legyen az új változó Xk0 és Xk0 legyen a legkisebb a változók között. Így az Xk0 és az Xk bal oldalú szabályok jobb oldala nem kezdődik Xk+1-nél kisebb változóval.

Ha k < n, akkor ebben az esetben is folytatjuk az eljárást Xk+1-gyel. Ha k =n, akkor ebben az esetben is a kapott szabályok jobb oldala terminálissal kezdődik. Az eljárás k = n esetben befejeződik. Átalakítottuk a grammatika szabályait úgy, hogy a szabályok jobb oldala terminálissal vagy a bal oldalon lévő változónál nagyobb változóval kezdődik.

Ezután visszafelé haladunk. Jelöljük az eljárás során kapott új változók halmazát V-vel. Az Xn−1 baloldalú szabályok Xn−1 −→ xP vagy Xn−1 −→

XnQalakúak, aholx∈VT ésP, Q∈(VN∪V). AzXn−1 −→XnQszabályokat cseréljük ki az Xn−1 −→xRQ alakú szabályok összességével, aholxRQ-t egy

Xn −→xR (x∈VT, R∈(VN ∪V)) helyettesítéssel kaptuk.

Ha már mindenn−k < l(1≤k ≤n−1) esetén azXlbal oldalú szabályok Xl −→xP (x∈VT, R∈(VN ∪V))

alakúak, akkor vegyük az Xn−k bal oldalú szabályokat. Ezek Xn−k −→ yP vagy Xn−k −→ XlQ alakúak, ahol n −k < l, y ∈ VT és P, Q ∈ (VN ∪V). Az Xn−k−→XlQalakú szabályokat cseréljük ki az Xn−k −→xP Q szabályok összességére.

Legyen az így kapott szabályok halmaza H0. A G0 = (VN ∪V, VT, S, H0) grammatika Greibach normálformájú. A 3.16 Lemmát is felhasználva, nem nehéz meggyőződni arról, hogy minden lépésben ekvivalens átalakításokat haj-tottunk végre. Ez azt jelenti, hogy L(G) = L(G0). 2 A Greibach normálforma segítségével egy eljárást kapunk a balrekurzió megszüntetésére. A 3.1 Lemma bizonyításában látott módon tetszőleges kör-nyezetfüggetlen grammatikához megszerkeszthetünk egy ekvivalens e-mentes környezetfüggetlen grammatikát. A 3.12 Tétel alapján ez redukálttá tehető.

Ha a kapott grammatika tartalmazza az S−→eszabályt, akkor ezt a szabályt törölve egy szigorúan e-mentes és redukált környezetfüggetlen grammatikát ka-punk. A 3.18 Tétel bizonyításában látott módon ez Greibach normálformára hozható. Az esetleg töröltS −→eszabályt visszaírva az eredeti grammatikával ekvivalens grammatikát kapunk, amely nem tartalmaz balrekurzív változót.

3.19. Példa. Tekintsük a Chomsky normálformában megadott G= ({S, X, Y},{a, b}, S, H)

grammatikát, amelynek a szabályai:

S −→XY, X −→SY, Y −→Y Y, X −→a, Y −→b.

A 3.18 Tétel bizonyításában közölt algoritmussal megadunk egy vele ekvivalens Greibach normálformájú garmmatikát. (Nem nehéz belátni, hogyL(G) =ab+.) Vezessük be az S < X < Y rendezést. (A rendezés megadása tetszőle-ges. Más rendezés esetén általában más, de ekvivalens Greibach normálformát kapunk.) Az

S −→XY

szabály S-nél nagyobb változóval kezdődik, ezért áttérhetünk az X −→SY, X −→a

szabályokra. AzX −→SY szabály helyett tekintsük azX −→XY Y szabályt.

Az X változó balrekurzív, ezért elvégezzük a 3.16 Lemma szerinti átalakításo-kat, vagyis az X −→XY Y szabály helyett az

X0 −→Y Y X0, X0 −→Y Y, X−→aX0

szabályokat tekintjük, ahol X0 egy új változó. Tegyük fel, hogyX0 < S. Most áttérhetünk az

Y −→Y Y, Y −→b

szabályokra. Az Y változó is balrekurzív, így a 3.16 Lemma alapján a Y −→

Y Y szabály helyett tekintsük az

Y0 −→Y Y0, Y0 −→Y, Y −→bY0 szabályokat, ahol Y0 ismét egy új változó. Legyen Y0 < X0.

Az eljárás eddigi alkalmazásával a következő szabályokhoz jutottunk a vál-tozók megadott rendezésével fordított sorrendben:

Y −→bY0, Y −→b, X −→aX0, X −→a,

S −→XY,

X0 −→Y Y X0, X0 −→Y Y, Y0 −→Y Y0, Y0 −→Y.

Az eljárás szerint az Y és az X baloldalú szabályok megfelelnek a követel-ményeknek. Az S −→XY szabály helyett tekintsük az

S −→aX0Y, S −→aY

szabályokat. (Végezzük el a szabály jobb oldalán az első változóban az X bal oldalú szabályokkal a helyettesítést.) Ha azX0 ésY0 bal oldalú szabályok jobb oldalán is elvégezzük az első változóban a lehetséges helyettesítéseket, akkor a G-vel ekvivalens G0 = ({S, X, Y, X0, Y0},{a, b}, S, H0) Greibach normálformá-ban megadott grammatikához jutunk, amelynek H0-beli szabályai:

Y −→bY0, Y −→b, X −→aX0, X −→a, S −→aX0Y, S −→aY,

X0 −→bY0Y X0, X0 −→bY0Y, X0 −→bY X0, X0 −→bY, Y0 −→bY0Y0, Y0 −→bY0, Y0 −→b.

In document ALGEBRAI NYELV- ÉS KÓDELMÉLET (Pldal 51-55)