Emlékeztető: LR(0) elemzés. LR elemzések (SLR(1) és LR(1) elemzések)

Hasonló dokumentumok
Az LR elemző felépítése. Léptetés. Redukálás. Kiegészített grammatika. Mit kell redukálni? Kiegészített grammatika. elemző. elemző.

A szemantikus elemzés elmélete. Szemantikus elemzés (attribútum fordítási grammatikák) A szemantikus elemzés elmélete. A szemantikus elemzés elmélete

Automaták és formális nyelvek

Miről mire fordít a fordítóprogram? Miről mire fordít az assembler? Mi a különbség a fordítóprogram és az interpreter között? Mi a virtuális gép?

Fordítóprogramok szerkesztése Flex és Bison segítségével

\ _/ / / _ \ ' / _` / ' / _ \ / _` (_) (_ (_) (_ \_ \ / _ \,_\ \ / \, / / 2.1. Alapfogalmak. 1. Mirol mire fordít a fordítóprogram?

Fordítóprogramok. Ajánlott irodalom. Jelölések 2. Jelölések 1. Fordítóprogramok szerkezete. Elıadó: Pozsgai Tamás. Aho-Sethi-Ullmann: Compilers

A számítógépes nyelvészet elmélete és gyakorlata. Automaták

Fordítóprogramok (A,C,T szakirány) Feladatgy jtemény

Automaták mint elfogadók (akceptorok)

MintaFeladatok 2.ZH Megoldások

Házi feladatok megoldása. Nyelvtani transzformációk. Házi feladatok megoldása. Házi feladatok megoldása. Formális nyelvek, 6. gyakorlat.

Chomsky-féle hierarchia

6. előadás A reguláris nyelvek jellemzése 2.

Formális nyelvek és automaták

MintaFeladatok 2.ZH Megoldások

Atomataelmélet: A Rabin Scott-automata

A digitális számítás elmélete

Fordítóprogramok beugrókérdések

5. előadás Reguláris kifejezések, a reguláris nyelvek jellemzése 1.

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

Tárgymutató. Typotex Kiadó. Csörnyei Zoltán. akonyv 2007/3/9 6:29 page 315 # , >, 205 <, 96, 108, 115 >, 96, 108, 115 =, 96, 108

Chomsky-féle hierarchia

Informatika szigorlat. A lexikális elemző feladatai közé tartozik a whitespace karakterek (a

6. előadás A reguláris nyelvek jellemzése 2.

Teljes visszalépéses elemzés

Formális nyelvek - 9.

Formális nyelvek és gépek (definíciós és tétel lista - 09/10/2)

Formális nyelvek és automaták vizsgához statisztikailag igazolt várható vizsgakérdések

Feladatok. 6. A CYK algoritmus segítségével döntsük el, hogy aabbcc eleme-e a G = {a, b, c}, {S, A, B, C}, P, S nyelvtan által generált nyelvnek!

Kiterjesztések sek szemantikája

Formális nyelvek - 5.

ZH feladatok megoldásai

6. előadás Környezetfüggetlen nyelvtanok/1.

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

FORMÁLIS NYELVEK ÉS FORDÍTÓPROGRAMOK. LABORGYAKORLATOK

Logika és számításelmélet. 10. előadás

Formális Nyelvek - 1. Előadás

Formális nyelvek előadások tavaszi félév

Formális nyelvek és automaták

FORDÍTÓPROGRAMOK. I. Előadás. Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék 2002.

A Turing-gép. Formális nyelvek III.

Készítette: Nagy Tibor István

Feladatok: 1. Add meg a következ balreguláris nyelvtannak megfelel jobbreguláris nyelvtant!

Formális módszerek GM_IN003_1 Program verifikálás, formalizmusok

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

Rekurzió. Dr. Iványi Péter

Csempe átíró nyelvtanok

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Véges automaták, reguláris nyelvek





Hardver és szoftver rendszerek verifikációja Röviden megválaszolható kérdések

NP-teljesség röviden

A továbbiakban Y = {0, 1}, azaz minden szóhoz egy bináris sorozatot rendelünk

Alapszintű formalizmusok

Függvények határértéke és folytonossága

MintaFeladatok 1.ZH Megoldások

MintaFeladatok 1.ZH Megoldások

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha

2. Ítéletkalkulus szintaxisa

A számítógépes nyelvészet elmélete és gyakorlata. Formális nyelvek elmélete

Számításelmélet. Második előadás

3. Fuzzy aritmetika. Gépi intelligencia I. Fodor János NIMGI1MIEM BMF NIK IMRI

Bisonc++ tutorial. Dévai Gergely. A szabály bal- és jobboldalát : választja el egymástól. A szabályalternatívák sorozatát ; zárja le.

Logikai függvények osztályai. A függvényosztály a függvények egy halmaza.

Formális nyelvek és automaták előadások

BASH script programozás II. Vezérlési szerkezetek

1. Részcsoportok (1) C + R + Q + Z +. (2) C R Q. (3) Q nem részcsoportja C + -nak, mert más a művelet!

Kriptográfia 0. A biztonság alapja. Számítás-komplexitási kérdések

Programozási nyelvek (ADA)

Fogalomtár a Formális nyelvek és

1. előadás: Halmazelmélet, számfogalom, teljes

Alap fatranszformátorok II

Szemantikai elemzés. konzisztenciájának vizsgálata a szemantikai elemzés feladata lesz.

2014. november 5-7. Dr. Vincze Szilvia

A SZÁMÍTÁSTUDOMÁNY ALAPJAI

9. előadás Veremautomaták 1.

Logika es sz am ıt aselm elet I. r esz Logika 1/36

Nyelv hatványa: Legyen L egy nyelv, nemnegatív egész hatványai,,. (rek. definició) Nyelv lezártja (iteráltja): Legyen L egy nyelv. L nyelv lezártja.

Halmazelmélet. 1. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Halmazelmélet p. 1/1

Relációs adatbázisok tervezése ---2

Turing-gép május 31. Turing-gép 1. 1

Bevezetés az informatikába

Házi feladatok megoldása. Harmadik típusú nyelvek és véges automaták. Házi feladatok megoldása. VDA-hoz 3NF nyelvtan készítése

Formális nyelvek és automaták

Absztrakt adatstruktúrák A bináris fák

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Halmaz: alapfogalom, bizonyos elemek (matematikai objektumok) Egy halmaz akkor adott, ha minden objektumról eldönthető, hogy

Formális szemantika. Kifejezések szemantikája. Horpácsi Dániel ELTE Informatikai Kar

Java II. I A Java programozási nyelv alapelemei

Diszkrét matematika 1. estis képzés

A valós számok halmaza

akonyv 2006/12/18 11:53 page i #1 Formális nyelvek és fordítóprogramok

Temporális logikák és modell ellenırzés

Átírá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. 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)