Emlékeztető Emlékeztető: LR(0) elemzés A lexikális által előállított szimbólumsorozatot balról jobbra olvassuk, a szimbólumokat az vermébe tesszük. LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Emlékeztető Emlékeztető: LR(0) elemzés Emlékeztető Emlékeztető: LR(0) elemzés A lexikális által előállított szimbólumsorozatot balról jobbra olvassuk, a szimbólumokat az vermébe tesszük. Léptetés: egy új szimbólumot teszünk a bemenetről a verem tetejére. Redukálás: a verem tetején lévő szabály-jobboldalt helyettesítjük a szabály bal oldalán álló nemterminálissal. A lexikális által előállított szimbólumsorozatot balról jobbra olvassuk, a szimbólumokat az vermébe tesszük. Léptetés: egy új szimbólumot teszünk a bemenetről a verem tetejére. Redukálás: a verem tetején lévő szabály-jobboldalt helyettesítjük a szabály bal oldalán álló nemterminálissal. LR(0): az alkalmazandó műveletről előreolvasás nélkül döntünk. A háttérben egy véges determinisztikus automata működik: az automata átmeneteit a verem tetejére kerülő szimbólumok határozzák meg ha az automata végállapotba jut, redukálni kell egyéb állapotban pedig léptetni Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Emlékeztető Emlékeztető: LR(0) elemzés Emlékeztető Emlékeztető: LR(0) elemzés Az automata állapotai a kanonikus halmazok. Melyik szabály építésében hol tartunk éppen? elemei az LR(0)-elemek Kanonikus halmaz és jelentése A {[S a.ad], [A.bA], [A.c]} kanonikus halmaz jelentése: Lezárás Lezárás (closure) művelet: segítségével adhatók meg az egy kanonikus halmazba tartozó LR(0)-elemek. closure([s a.ad]) = {[S a.ad], [A.bA], [A.c]} Az adott állapotban az S aad, A ba és A c szabályok jobboldalait építhetjük. A S aad szabályból az a szimbólumot már elemeztük, az Ad rész még hátra van. A másik két szabály építése most kezdődhet. Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
Emlékeztető Emlékeztető: LR(0) elemzés Emlékeztető Emlékeztető: LR(0) elemzés Lezárás Lezárás (closure) művelet: segítségével adhatók meg az egy kanonikus halmazba tartozó LR(0)-elemek. closure([s a.ad]) = {[S a.ad], [A.bA], [A.c]} S A a b 0 b d A c S aad c A c A ba Olvasás Olvasás (read) művelet: megadja, hogy egy kanonikus halmazból egy adott szimbólum olvasásával melyik kanonikus halmazba jutunk. Ezek lesznek az automata átmenetei. read({[s a.ad], [A.bA], [A.c]}, b) = = closure([a b.a]) = = {[A b.a], [A.bA], [A.c]}... I = {[S a.ad], [A.bA], [A.c]}... I = read(i, b) = {[A b.a], [A.bA], [A.c]} I = read(i, c) = read(i, c) = {[A c.]} Elfogadó állapot: a hozzá tartozó elemeknek a végén van a pont Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Emlékeztető Emlékeztető: LR(0) elemzés Konfliktusok S A a b 0 b d A c S aad c A c A ba Az LR(0) tulajdonság biztosította, hogy a táblázat egy cellájába sem kerül két különböző műveletet, azaz a táblázat konfliktusmentes. Mi történik, ha nem LR(0) a grammatika? állapot akció S A a b c d 0 léptetés léptetés léptetés léptetés redukálás (A c) redukálás (S aad) redukálás (A ba) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Konfliktusok Az LR(0) tulajdonság biztosította, hogy a táblázat egy cellájába sem kerül két különböző műveletet, azaz a táblázat konfliktusmentes. Mi történik, ha nem LR(0) a grammatika? A helyes zárójelezés (S)S Konfliktusok Az LR(0) tulajdonság biztosította, hogy a táblázat egy cellájába sem kerül két különböző műveletet, azaz a táblázat konfliktusmentes. Mi történik, ha nem LR(0) a grammatika? A helyes zárójelezés (S)S S S (S)S (S) () S S (S)S (S) ((S)S) ((S)) (()) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
Konfliktusok : helyes zárójelezés Az LR(0) tulajdonság biztosította, hogy a táblázat egy cellájába sem kerül két különböző műveletet, azaz a táblázat konfliktusmentes. Mi történik, ha nem LR(0) a grammatika? A helyes zárójelezés (S)S S S (S)S (S) () S S (S)S (S) ((S)S) ((S)) (()) Az piros részek elolvasása után: az első esetben szerinti redukciót kell végrahajtani, a második esetben léptetni kell. Előreolvasás nélkül nem tudunk dönteni, nem LR(0) grammatika. grammatika S 0 S (S)S I 0 = closure([s.s]) = {[S.S], [S.], [S.(S)S]} Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) : helyes zárójelezés : helyes zárójelezés grammatika (S)S 0 S I 0 = closure([s.s]) = {[S.S], [S.], [S.(S)S]} I = read(i 0, S) = {[.]} grammatika (S)S 0 S ( I 0 = closure([s.s]) = {[S.S], [S.], [S.(S)S]} I = read(i 0, S) = {[.]} I = read(i 0, () = {[S (.S)S], [S.], [S.(S)S]} 9 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) : helyes zárójelezés : helyes zárójelezés grammatika (S)S 0 S ( S I 0 = closure([s.s]) = {[S.S], [S.], [S.(S)S]} I = read(i 0, S) = {[.]} I = read(i 0, () = {[S (.S)S], [S.], [S.(S)S]} I = read(i, S) = {[S (S.)S]} grammatika (S)S 0 S ( S ( I 0 = closure([s.s]) = {[S.S], [S.], [S.(S)S]} I = read(i 0, S) = {[.]} I = read(i 0, () = {[S (.S)S], [S.], [S.(S)S]} I = read(i, S) = {[S (S.)S]} read(i, () = {[S (.S)S], [S.], [S.(S)S]} = I Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
: helyes zárójelezés grammatika (S)S 0 S ( S ) ( I 0 = closure([s.s]) = {[S.S], [S.], [S.(S)S]} I = read(i 0, S) = {[.]} I = read(i 0, () = {[S (.S)S], [S.], [S.(S)S]} I = read(i, S) = {[S (S.)S]} read(i, () = {[S (.S)S], [S.], [S.(S)S]} = I I = read(i, )) = {[S (S).S], [S.], [S.(S)S]} : helyes zárójelezés grammatika (S)S 0 S ( S ) S ( I 0 = closure([s.s]) = {[S.S], [S.], [S.(S)S]} I = read(i 0, S) = {[.]} I = read(i 0, () = {[S (.S)S], [S.], [S.(S)S]} I = read(i, S) = {[S (S.)S]} read(i, () = {[S (.S)S], [S.], [S.(S)S]} = I I = read(i, )) = {[S (S).S], [S.], [S.(S)S]} I = read(i, S) = {[S (S)S.]} S (S)S Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) : helyes zárójelezés grammatika (S)S 0 S ( S ) S ( ( I 0 = closure([s.s]) = {[S.S], [S.], [S.(S)S]} I = read(i 0, S) = {[.]} I = read(i 0, () = {[S (.S)S], [S.], [S.(S)S]} I = read(i, S) = {[S (S.)S]} read(i, () = {[S (.S)S], [S.], [S.(S)S]} = I I = read(i, )) = {[S (S).S], [S.], [S.(S)S]} I = read(i, S) = {[S (S)S.]} read(i, () = {[S (.S)S], [S.], [S.(S)S]} = I Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) S (S)S Konfliktusok az LR(0) táblázatban 0 S ( S ) S ( ( S (S)S akció S ( ) 0 léptetés / redukálás () léptetés / redukálás () léptetés léptetés / redukálás () ( redukálás (S (S)S) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) alapötlete Olvassunk előre egy szimbólumot! léptessünk, ha az automata tud lépni az előreolvasott szimbólummal redukáljunk, ha az előreolvasott szimbólum benne van a szabályhoz tartozó nemterminális FOLLOW halmazában alapötlete Olvassunk előre egy szimbólumot! léptessünk, ha az automata tud lépni az előreolvasott szimbólummal redukáljunk, ha az előreolvasott szimbólum benne van a szabályhoz tartozó nemterminális FOLLOW halmazában A helyes zárójelezés S S (S)S (S) () S S (S)S (S) ((S)S) ((S)) (()) I = {[S (.S)S], [S.], [S.(S)S]} Az piros részek elolvasása után I állapotban van az automata: az első esetben szerinti redukciót kell végrahajtani, mert ) FOLLOW (S). a második esetben léptetni kell, mert [S.(S)S] I. Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
szabályai Ha az aktuális állapot i, és az előreolvasás eredménye az a szimbólum: ha [A α.aβ] I i és read(i i, a) = I j, akkor léptetni kell, és átlépni a j állapotba, ha [A α.] I i (A S ) és a FOLLOW (A), akkor redukálni kell A α szabály szerint, ha [] I i és a = #, akkor el kell fogadni a szöveget, minden más esetben hibát kell jelezni. Ha az i állapotban A kerül a verem tetejére: ha read(i i, A) = I j, akkor át kell lépni a j állapotba, egyébként hibát kell jelezni. A helyes zárójelezés SLR() táblázata 0 S ( S ) S ( ( S (S)S FOLLOW (S) = { ), # } 0 léptetés, redukálás () redukálás () léptetés, redukálás () redukálás () léptetés, léptetés, redukálás () redukálás () redukálás (S (S)S) redukálás (S (S)S) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 9 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 0 léptetés, redukálás () redukálás () léptetés, redukálás () redukálás () léptetés, léptetés, redukálás () redukálás () redukálás (S (S)S) redukálás (S (S)S) 0 léptetés, redukálás () redukálás () léptetés, redukálás () redukálás () léptetés, léptetés, redukálás () redukálás () redukálás (S (S)S) redukálás (S (S)S) 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 0 léptetés, redukálás () redukálás () léptetés, redukálás () redukálás () léptetés, léptetés, redukálás () redukálás () redukálás (S (S)S) redukálás (S (S)S) 0 léptetés, redukálás () redukálás () léptetés, redukálás () redukálás () léptetés, léptetés, redukálás () redukálás () redukálás (S (S)S) redukálás (S (S)S) S Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
0 léptetés, redukálás () redukálás () léptetés, redukálás () redukálás () léptetés, léptetés, redukálás () redukálás () redukálás (S (S)S) redukálás (S (S)S) 0 léptetés, redukálás () redukálás () léptetés, redukálás () redukálás () léptetés, léptetés, redukálás () redukálás () redukálás (S (S)S) redukálás (S (S)S) S ) S ) S S ) S Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 0 léptetés, redukálás () redukálás () léptetés, redukálás () redukálás () léptetés, léptetés, redukálás () redukálás () redukálás (S (S)S) redukálás (S (S)S) 0 léptetés, redukálás () redukálás () léptetés, redukálás () redukálás () léptetés, léptetés, redukálás () redukálás () redukálás (S (S)S) redukálás (S (S)S) S ) S S S ) S Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 0 léptetés, redukálás () redukálás () léptetés, redukálás () redukálás () léptetés, léptetés, redukálás () redukálás () redukálás (S (S)S) redukálás (S (S)S) 0 léptetés, redukálás () redukálás () léptetés, redukálás () redukálás () léptetés, léptetés, redukálás () redukálás () redukálás (S (S)S) redukálás (S (S)S) ) S S ) S S ) S S Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 9 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
SLR() grammatika 0 léptetés, redukálás () redukálás () léptetés, redukálás () redukálás () léptetés, léptetés, redukálás () redukálás () redukálás (S (S)S) redukálás (S (S)S) S OK Definíció: SLR() grammatika Egy kiegészített grammatika SLR() grammatika, ha az SLR() táblázata konfliktusmentes. elnevezés: Simple LR jobb, mint az LR(0) a valódi programnyelvek nyelvtanai általában nem SLR() nyelvtanok 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Probléma az SLR() elemzéssel Probléma az SLR() elemzéssel Probléma az SLR() elemzéssel Probléma az SLR() elemzéssel grammatika grammatika S U E U a E V = V V a Egy program az egy utasítás vagy egy értékadás. Egy utasítás az egy azonosító szimbólum. Egy értékadás változó legyen egyenlő változó alakú. Egy változó az egy azonosító szimbólum. S U E U a E V = V V a Egy program az egy utasítás vagy egy értékadás. Egy utasítás az egy azonosító szimbólum. Egy értékadás változó legyen egyenlő változó alakú. Egy változó az egy azonosító szimbólum. I 0 = {[S.S], [S.U], [S.E], [U.a], [E.V = V ], [V.a]}... I = read(i 0, a) = {[U a.], [V a.]} Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Probléma az SLR() elemzéssel Probléma az SLR() elemzéssel Probléma az SLR() elemzéssel Probléma az SLR() elemzéssel grammatika S U E U a E V = V V a Egy program az egy utasítás vagy egy értékadás. Egy utasítás az egy azonosító szimbólum. Egy értékadás változó legyen egyenlő változó alakú. Egy változó az egy azonosító szimbólum. I = read(i 0, a) = {[U a.], [V a.]} FOLLOW (U) = {#} és FOLLOW (V ) = {=,#} Redukálás / redukálás konfliktus! I 0 = {[S.S], [S.U], [S.E], [U.a], [E.V = V ], [V.a]}... I = read(i 0, a) = {[U a.], [V a.]} FOLLOW (U) = {#} és FOLLOW (V ) = {=,#} Redukálás / redukálás konfliktus! Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
Probléma az SLR() elemzéssel Probléma az SLR() elemzéssel Probléma az SLR() elemzéssel Probléma az SLR() elemzéssel I = read(i 0, a) = {[U a.], [V a.]} FOLLOW (U) = {#} és FOLLOW (V ) = {=,#} Redukálás / redukálás konfliktus! Az a# szövegből az a elolvasása után az SLR() nem tud dönteni a U a és V a szerinti redukciók között, mert a következő szimbólum (#) benne van az U és a V FOLLOW halmazában is. I = read(i 0, a) = {[U a.], [V a.]} FOLLOW (U) = {#} és FOLLOW (V ) = {=,#} Redukálás / redukálás konfliktus! Az a# szövegből az a elolvasása után az SLR() nem tud dönteni a U a és V a szerinti redukciók között, mert a következő szimbólum (#) benne van az U és a V FOLLOW halmazában is. Pedig a szöveg elején a V -t csak az = szimbólum követheti... Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) alapötlete alapötlete a FOLLOW halmaz globális az egész grammatikára előfordulhat, hogy egy adott állapotban a FOLLOW halmaznak nem minden eleme követheti a szabályt a FOLLOW halmaz globális az egész grammatikára előfordulhat, hogy egy adott állapotban a FOLLOW halmaznak nem minden eleme követheti a szabályt Vegyük hozzá az LR(0) elemekhez azokat a szimbólumokat, amik követhetik a szabályt az adott állapotban! Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) LR() elemek Az létrehozása LR() elemek Az létrehozása Definíció: LR() elem Ha A α a grammatika egy helyettesítési szabálya, akkor az α = α α tetszőleges felbontás és a terminális szimbólum (vagy a = #) esetén [A α.α, a] a grammatika egy LR()-eleme. A α.α az LR() elem magja, a pedig az előreolvasási szimbóluma. Definíció: LR() elem Ha A α a grammatika egy helyettesítési szabálya, akkor az α = α α tetszőleges felbontás és a terminális szimbólum (vagy a = #) esetén [A α.α, a] a grammatika egy LR()-eleme. A α.α az LR() elem magja, a pedig az előreolvasási szimbóluma. [V a., =] jelentése: a V a szabály építését befejeztük és a szabályt az = szimbólum követheti. Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
A lezárás művelet Az létrehozása A lezárás művelet Az létrehozása Ha [V.V = V, #] állapotban vagyunk, akkor a V a szabályt kezdhetjük építeni, amit az = szimbólum követhet. Tehát az adott kanonikus halmazhoz [V.a, =] is hozzátartozik. Ha [V.V = V, #] állapotban vagyunk, akkor a V a szabályt kezdhetjük építeni, amit az = szimbólum követhet. Tehát az adott kanonikus halmazhoz [V.a, =] is hozzátartozik. Definíció: lezárás (closure) Ha I a grammatika egy LR() elemhalmaza, akkor closure(i) a legszűkebb olyan halmaz, amely az alábbi tulajdonságokkal rendelkezik: I closure(i) ha [A α.bγ,a] closure(i), és B β a grammatika egy szabálya, akkor b FIRST (γa) esetén [B.β,b] closure(i) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Az olvasás művelet Az létrehozása Az olvasás művelet Az létrehozása Ha [V.V = V, #] állapotban vagyunk, és V kerül a verem tetejére, akkor [V V. = V, #] állapotba jutunk. Ha [V.V = V, #] állapotban vagyunk, és V kerül a verem tetejére, akkor [V V. = V, #] állapotba jutunk. Definíció: olvasás (read) Ha I a grammatika egy LR() elemhalmaza, X pedig terminális vagy nemterminális szimbóluma, akkor read(i, X ) a legszűkebb olyan halmaz, amely az alábbi tulajdonsággal rendelkezik: ha [A α.x β,a] I, akkor closure([a αx.β,a]) read(i, X ). Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) LR() kanonikus halmazok Az létrehozása szabályai Az létrehozása Definíció: LR() kanonikus halmazok closure([s.s, #]) a grammatika egy kanonikus halmaza. Ha I a grammatika egy kanonikus elemhalmaza, X egy terminális vagy nemterminális szimbóluma, és read(i, X ) nem üres, akkor read(i, X ) is a grammatika egy kanonikus halmaza. Az első két szabállyal az összes kanonikus halmaz előáll. Ha az aktuális állapot i, és az előreolvasás eredménye az a szimbólum: ha [A α.aβ, b] I i és read(i i, a) = I j, akkor léptetni kell, és átlépni a j állapotba, ha [A α., a] I i (A S ), akkor redukálni kell A α szabály szerint, ha [., #] I i és a = #, akkor el kell fogadni a szöveget, minden más esetben hibát kell jelezni. Ha az i állapotban A kerül a verem tetejére: ha read(i i, A) = I j, akkor át kell lépni a j állapotba, egyébként hibát kell jelezni. Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 9 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
grammatika S U E U a E V = V V a grammatika S U E U a E V = V V a 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) grammatika S U E U a E V = V V a I = read(i 0, S) = {[., #]} grammatika S U E U a E V = V V a I = read(i 0, S) = {[., #]} I = read(i 0, U) = {[S U., #]} 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) grammatika S U E U a E V = V V a I = read(i 0, S) = {[., #]} I = read(i 0, U) = {[S U., #]} I = read(i 0, E) = {[S E., #]} grammatika S U E U a E V = V V a I = read(i 0, S) = {[., #]} I = read(i 0, U) = {[S U., #]} I = read(i 0, E) = {[S E., #]} I = read(i 0, a) = {[U a., #], [V a., =]} Nincs konfliktus! 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
grammatika S U E U a E V = V V a I = read(i 0, S) = {[., #]} I = read(i 0, U) = {[S U., #]} I = read(i 0, E) = {[S E., #]} I = read(i 0, a) = {[U a., #], [V a., =]} Nincs konfliktus! I = read(i 0, V ) = {[E V. = V, #]} grammatika S U E U a E V = V V a I = read(i 0, S) = {[., #]} I = read(i 0, U) = {[S U., #]} I = read(i 0, E) = {[S E., #]} I = read(i 0, a) = {[U a., #], [V a., =]} Nincs konfliktus! I = read(i 0, V ) = {[E V. = V, #]} I = read(i, =) = {[E V =.V, #], [V.a, #]} 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) grammatika S U E U a E V = V V a I = read(i 0, S) = {[., #]} I = read(i 0, U) = {[S U., #]} I = read(i 0, E) = {[S E., #]} I = read(i 0, a) = {[U a., #], [V a., =]} Nincs konfliktus! I = read(i 0, V ) = {[E V. = V, #]} I = read(i, =) = {[E V =.V, #], [V.a, #]} I = read(i, V ) = {[E V = V., #]} grammatika S U E U a E V = V V a I = read(i 0, S) = {[., #]} I = read(i 0, U) = {[S U., #]} I = read(i 0, E) = {[S E., #]} I = read(i 0, a) = {[U a., #], [V a., =]} Nincs konfliktus! I = read(i 0, V ) = {[E V. = V, #]} I = read(i, =) = {[E V =.V, #], [V.a, #]} I = read(i, V ) = {[E V = V., #]} I = read(i, a) = {[V a., #]} 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Az táblázat kitöltése Az táblázat kitöltése I 0 read(i 0, S) = I x = # S U E V 0 I 0 = {[S.S, #],[S.U, #], [S.E, #], [U.a, #], read(i 0, U) = I x = # S U E V 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
Az táblázat kitöltése Az táblázat kitöltése I 0 = {[S.S, #], [S.U, #],[S.E, #], [U.a, #], read(i 0, E) = I x = # S U E V 0 I 0 = {[S.S, #], [S.U, #], [S.E, #],[U.a, #], [E.V = V, #],[V.a, =]} read(i 0, a) = I 0 léptetés, Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Az táblázat kitöltése Az táblázat kitöltése I 0 read(i 0, V ) = I I = {[., #]} Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Az táblázat kitöltése Az táblázat kitöltése I = {[S U., #]} I = {[S E., #]} redukálás, S E Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
Az táblázat kitöltése Az táblázat kitöltése I = {[U a., #], [V a., =]} I = {[U a., #],[V a., =]} redukálás, S E redukálás, U a redukálás, S E redukálás, V a redukálás, U a 9 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Az táblázat kitöltése Az táblázat kitöltése I = {[E V. = V, #]} read(i, =) = I I = {[E V =.V, #], [V.a, #]} read(i, V ) = I redukálás, S E redukálás, V a redukálás, U a léptetés, redukálás, S E redukálás, V a redukálás, U a léptetés, Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Az táblázat kitöltése Az táblázat kitöltése I = {[E V =.V, #],[V.a, #]} read(i, a) = I I = {[E V = V., #]} redukálás, S E redukálás, V a redukálás, U a léptetés, léptetés, redukálás, S E redukálás, V a redukálás, U a léptetés, léptetés, redukálás, E V = V Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
Az táblázat kitöltése Az a# szöveg elemzése I = {[V a., #]} redukálás, S E redukálás, V a redukálás, U a léptetés, léptetés, redukálás, E V = V redukálás, V a Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) redukálás, S E redukálás, V a redukálás, U a léptetés, léptetés, redukálás, E V = V redukálás, V a a# Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Az a# szöveg elemzése Az a# szöveg elemzése redukálás, S E redukálás, V a redukálás, U a léptetés, léptetés, redukálás, E V = V redukálás, V a redukálás, S E redukálás, V a redukálás, U a léptetés, léptetés, redukálás, E V = V redukálás, V a a# a# a# a# a a U Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Az a# szöveg elemzése Az a# szöveg elemzése redukálás, S E redukálás, V a redukálás, U a léptetés, léptetés, redukálás, E V = V redukálás, V a redukálás, S E redukálás, V a redukálás, U a léptetés, léptetés, redukálás, E V = V redukálás, V a a# a# a# U S S OK 9 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) 0 Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
Az elemzés helyessége Az LR() táblázat konfliktusmentessége Az LR() létrehozása véges Az elemzés helyessége Tétel Egy grammatika pontosan akkor LR() grammatika, ha az LR() táblázatai konfliktusmentesek. az LR()-elemek száma véges a closure és read függvények kiszámítása véges a kanonikus halmazok száma véges a kanonikus halmazok kiszámítása véges Az LR() a megadott módon véges sok lépésben és teljesen automatikusan létrehozható. Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Járható prefix, érvényes LR-elem Az elemzés helyessége járható prefix: a mondatformának olyan prefixei, amelyek legfeljebb a nyél végéig tartanak ezeket járja be az automata a maximális járható prefixnek a végén ott a teljes nyél Járható prefix, érvényes LR-elem Az elemzés helyessége járható prefix: a mondatformának olyan prefixei, amelyek legfeljebb a nyél végéig tartanak ezeket járja be az automata a maximális járható prefixnek a végén ott a teljes nyél járható prefixre érvényes LR-elemek: a járható prefix lehetséges folytatásai melyik szabályok építésében hol tarthatunk egy adott járható prefix elemzése után? Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Járható prefix, érvényes LR-elem Az elemzés helyessége helyessége Az elemzés helyessége járható prefix: a mondatformának olyan prefixei, amelyek legfeljebb a nyél végéig tartanak ezeket járja be az automata a maximális járható prefixnek a végén ott a teljes nyél járható prefixre érvényes LR-elemek: a járható prefix lehetséges folytatásai melyik szabályok építésében hol tarthatunk egy adott járható prefix elemzése után? Az LR()-elemzés nagy tétele Egy γ járható prefix hatására az automatája a kezdőállapotból olyan állapotba kerül, amelyhez tartozó kanonikus halmaz éppen a γ járható prefixre érvényes LR() elemeket tartalmazza. Definíció: Járható prefixre érvényes LR()-elem A grammatika egy [A α.β, a] LR()-eleme érvényes a γα járható prefixre nézve, ha S γax γαβx, és x ǫ esetén a az x első szimbóluma, x = ǫ esetén pedig a = #. Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések) Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)
helyessége Az elemzés helyessége Az LR()-elemzés nagy tétele Egy γ járható prefix hatására az automatája a kezdőállapotból olyan állapotba kerül, amelyhez tartozó kanonikus halmaz éppen a γ járható prefixre érvényes LR() elemeket tartalmazza. Összefoglalva: az LR() automatikusan és véges lépésben generálható a nyelvtan szabályaiból minden LR() grammatika elemezéséhez használható az mindig a helyes lépést írja elő a fenti tétel miatt Probléma: túl sok állapota van... Fordítóprogramok előadás (A,C,T szakirány) LR elemzések (SLR() és LR() elemzések)