Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

LR-elemzés: LR(0) – ha az  x mondatforma nyele , akkor  bármely prefixe (az egész is) járható prefixe – ez azt jelenti, hogy ha elkezdjük olvasni.

Hasonló előadás


Az előadások a következő témára: "LR-elemzés: LR(0) – ha az  x mondatforma nyele , akkor  bármely prefixe (az egész is) járható prefixe – ez azt jelenti, hogy ha elkezdjük olvasni."— Előadás másolata:

1 LR-elemzés: LR(0) – ha az  x mondatforma nyele , akkor  bármely prefixe (az egész is) járható prefixe – ez azt jelenti, hogy ha elkezdjük olvasni a mondatformát, akkor “végig tudjuk olvasni” a járható prefixeket anélkül, hogy redukálnánk – vezessük be a pontot mint metaszimbólumot, ami azt mutatja, hogy tartunk a mondatforma olvasásában (elemzésében) – ha van A »  alakú nyelvtani szabály, akkor a grammatika egy LR(0)-eleme [A » .  ] – epszilon-szabályhoz [A ».] tartozik

2 LR-elemzés: LR(0) – az [A » .  ] LR(0)-elem érvényes a  járható prefixre, ha S »»»  Ax  »  x – ez azt jelenti, hogy ha már végigolvastuk a  szöveget, akkor felkészülünk arra, hogy a fenti szabály szerint fogunk redukálni Ax   S

3 LR-elemzés: LR(0) – J a nyelvtan LR(0)-elemeinek egy halmazát jelöli – két elemhalmaz-operátor – closure(J) : J és minden olyan [B ».  ], amelyhez closure(J)-ben található [A » .B  ] – read(J, X) : elemei minden olyan closure([A »  X.  ]) minden eleme, melyre [A » .X  ] benne van J-ben – closure: az elemzés egy pontjához tartozó összes elem – read: J-ből X-et olvasva az elemzés ide jut

4 LR-elemzés: LR(0) – az LR-elemzések kiegészített nyelvtanokkal dolgoznak (S' » S szabály) – a két operátorral elkészítjük a nyelv ún. kanonikus halmazait – I 0 := closure([S' ».S]) – a további halmazok (I 1, I 2,...) : minden már meghatározott halmazból próbálunk minden X szimbólumot olvasni – ha már van olyan halmaz, ami kijött, nem kell újat felvenni – ha üres halmaz jött ki, azt sem vesszük fel – a halmazok a read-del egy automatát adnak

5 LR-elemzés: LR(0) – elemző táblázat – sorai egy-egy kanonikus halmaznak felelnek meg – minden sorhoz tartozik egy működés, valamint a belőle való read-ek sorszámai – redukálni akkor kell, ha a megfelelő kanonikus halmaz minden elemének a végén szerepel a pont – ha a végén nem szerepel pont, léptetés – ha van pont a végén is és a közepén is, akkor nem LR(0)-elemezhető a nyelvtan

6 LR-elemzés: LR(0) – feladat: mik a kanonikus halmazok? S » T | S + T T » F | T * F F » i | – a kanonikus halmazok – I 0 : [S' ».S], [S ».T], [S ».S+T], [T ».F], [T ».T*F], [F ».i], [F ». ] – I 1 : [S' » S.], [S » S.+T] – I 2 : [S » T.], [T » T.*F] – I 3 : [T » F.] – I 4 : [F » i.]

7 LR-elemzés: LR(0) – a további kanonikus halmazok – I 5 : [F » ], [S ».T], [S ».S+T], [T ».F], [T ».T*F], [F ».i], [F ». ] – I 6 : [S » S+.T], [T ».F], [T ».T*F], [F ».i], [F ». ] – I 7 : [T » T*.F], [F ».i], [F ». ] – I 8 : [F » ], [S » S.+T] – I 9 : [S » S+T.], [T » T.*F] – I 10 : [T » T*F.] – I 11 : [F ».]

8 LR-elemzés: LR(0) – feladat: elemzendő bcabbccc# S » ABB | cS A » ab | bS B » b | c ● az elemző: kezdetben (# 0, szöveg), majd... ● ha az elemző állapotában az action accept, vége ● ha s (step, lépés), akkor kiolvassuk a szövegből a következő szimbólumot, és átlépünk az általa jelölt állapotba (ezt jelöljük alsó indexszel) ● ha r (redukálás), akkor az épített mondatforma végéről a szabály jobb oldalának jeleit kicseréljük a szabály fejével; az új állapot az ez előtti állapotból egy lépés a fejjel

9 LR-elemzés: LR(0) – az automata 0 12 5 4 6 7 11 3 12 8 10 9 S' ».S S' » S.S » A.BB S » c.S A » b.S A » a.b a S » AB.BS » ABB. B » b. B » c. S » cS. A » ab.

10 LR-elemzés: LR(0) – az automata 0 1 2 5 4 6 7 11 3 12 8 10 9

11 LR-elemzés: LR(0) 0 2 4 a állapot b s 1 3 action B goto SAc accept s s s 5s 43512 786 43592 435102 11

12 LR-elemzés: LR(0) 6 8 10 ab r4 7 9 BSAc r5 r2 r6 s 11r3 12r1 7812

13 LR-elemzés: LR(0) – feladat: elemzendő bcabbccc# – az elemző minden pontban tárolja azt is, milyen állapotban van; a pár első fele valójában egy kétkomponensű (szimbólum + állapot) verem – (# 0, bcabbccc#)  (# 0 b 4, cabbccc#)  (# 0 b 4 c 3, abbccc#)  (# 0 b 4 c 3 a 5, bbccc#)  (# 0 b 4 c 3 a 5 b 11, bccc#)  (# 0 b 4 c 3 A 2, bccc#)  (# 0 b 4 c 3 A 2 b 7, ccc#)  (# 0 b 4 c 3 A 2 B 6, ccc#)  (# 0 b 4 c 3 A 2 B 6 c 8, cc#)  (# 0 b 4 c 3 A 2 B 6 B 12, cc#)  (# 0 b 4 c 3 S 9, cc#)  (# 0 b 4 S 10, cc#)  (# 0 A 2, cc#)......

14 LR-elemzés: SLR(1) – az LR(0)-elemzés még nem elég, pl. a fólia kezdetén levő egyszerű aritmetikai nyelvtan (amiben +, *, <> volt) is konfliktusos (I 2 állapot) – a probléma: vannak olyan állapotok, amikben a pont a szöveg közepén és végén is előfordul, azaz redukciót és léptetést is előírunk hozzá – javítás: a redukciót csak a szabály fejében szereplő nemterminális FOLLOW-jára hajtsuk végre (a léptetést pedig azokra a jelekre, amikre szükséges) – ha így konfliktusmentes az elemző, akkor SLR(1)- nek nevezzük

15 LR-elemzés: SLR(1) – kibővül az action szerepe: most már minden terminálisnál lehet redukálni és léptetni is – ha [A » .a  ] a H i kanonikus halmaz eleme, akkor a hozzá tartozó i-edik állapotban a-ra léptetést írunk elő: sj, ahol H j = read(H i, a) – ha [A » .] a H i kanonikus halmaz eleme, akkor az i-edik állapotban FOLLOW 1 (A) minden elemére redukálást írunk elő: rk, ahol A »  a nyelvtan k- adik szabálya – [S' » S.] esetén (ált. H 1 -ben van) #-ra accept – feladat: elemezzük az aritmetikai nyelvtant

16 LR-elemzés: SLR(1) 0 2 4 < állapot F 1 3 action * goto i+ acc s4 5 231 2 >ET# s6 s7 r5 s4 r1 r5 83 r1 r3 s5

17 LR-elemzés: SLR(1) 6 8 10 < állapot F 7 9 action * goto i+ s4 11 93 >ET# s6 r2 s11 r2 r4 s410 r6 s7 s5

18 LR-elemzés: SLR(1) feladat: elemzendő i+ *i# (# 0, i+ *i#)  (# 0 i 4, + *i#)  (# 0 F 3, + *i#)  (# 0 T 2, + *i#)  (# 0 E 1, + *i#)  (# 0 E 4 + 6, *i#)  (# 0 E 4 + 6 *i#)  (# 0 E 4 + 6 *i#) ......

19 LR-elemzés: LR(1) – az SLR(1)-elemzés sem képes minden szöveget elemezni, pl. S » aEa | bEb | aFb | bFa E » e F » e – a probléma: a szöveg egy adott pontján egy jelet nem biztos, hogy FOLLOW-jának tetszőleges eleme követheti – javítás: számon tartjuk, hogy az adott ponton mi követheti a jeleket – ha így konfliktusmentes az elemző, akkor LR(1)- nek nevezzük

20 LR-elemzés: LR(1) – ha van A »  alakú nyelvtani szabály és X tetszőleges terminális vagy #, akkor a grammatika egy LR(1)-eleme [A » . , X] – epszilon-szabályhoz [A »., X] tartozik – az elem első komponensét az elem magjának nevezzük – X-et előreolvasási szimbólumnak nevezzük Aa  xAa   S x #  A   S

21 LR-elemzés: LR(1) az LR(0)-beli fogalmak LR(1)-es társai – closure(J) : J és minden olyan [B ». , b], amelyhez closure(J)-ben található [A » .B , a], melyre b  FIRST 1 (  a) – read(J, X) : closure([A »  X. , a]) elemei minden J-ből származó [A » .X , a]-ra – kanonikus halmazok: H 0 =closure([S' » S, #]), a továbbiak read-ekkel, mint LR(0)-ban

22 LR-elemzés: LR(1) – feladat: írjuk fel az elemző táblázatot S » Aa | bAc | Bc | bBa A » d B » d – miért nem SLR(1)? – elemzendő: bdc – mj: a nyelvtan nem is LALR(1). Miért?

23 LR-elemzés: LALR(1) – az LR(1)-elemző “mindent tud”, viszont nagyon sok állapota van (teljes programnyelvekre tízezres nagyságrendű), míg az SLR(1)-elemzőnek jóval kevesebb (max. ezres nagyságrend) – észrevétel: sok LR(1)-es kanonikus halmaz csak az előreolvasási szimbólumokban tér el, a magjuk pedig azonos; ezeket próbáljuk meg egyesíteni

24 LR-elemzés: LALR(1) – vonjuk össze az azonos magú kanonikus halmazokat – a read függvényt terjesszük ki: ha H i -t a K i halmazba, H j -t a K j halmazba vontuk össze, és read(H i, X) = H j, akkor read(K i, X) = K j – konfliktusok az összevont elemzőben: a két halmaz eltérő cselekvéseket ír elő – léptetés-léptetés: nem konfliktus, léptetünk – léptetés-redukálás: ekkor az eredeti elemzőben is konfliktus lett volna – redukálás-redukálás: előfordulhat; akkor LALR(1)-es a nyelvtan, ha nincs

25 LR-elemzés: LALR(1) – az előbbi módszerrel el kell készíteni az LR(1)- elemzőt is az LALR(1)-elemzőhöz, ezt pedig szeretnénk megspórolni – nevezzük egy kanonikus halmaz törzsének azokat az elemeket, amelyek magjában a pont nem az elején áll (kivétel: H 0, aminek a törzse [S' ».S, #]) – a törzsből lezárással visszaállítható a halmaz

26 LR-elemzés: LALR(1) 1. meghatározzuk az LR(0)-halmazok törzseit 2. kiegészítjük ezeket a megfelelő előreolvasási szimbólumokkal – először az ún. spontán generálhatóakkal – utána pedig, amíg új jeleket ad, örökléssel meghatározzuk, mikor kell léptetni illetve redukálni – az első lépés egyszerű, a másik kettő a következő oldalakon

27 LR-elemzés: LALR(1) spontán generálás a closure-rel – ha [C » .B , c]  i, B »»» A  » X , és , akkor minden a  FIRST 1 (  )-ra [A » X. , a]  read(  i,X) spontán generálható öröklődés a closure-rel – ha [C » .B, c]  i, B »»» A  » X , akkor c öröklődik [A » X. , c]  read(  i,X)-be

28 LR-elemzés: LALR(1) C  B  A X ... C  B A X  a öröklődik spontán generálódik a

29 LR-elemzés: LALR(1) – vegyük a K i alapjaként szolgáló J i LR(0)-halmazt és egy @ új metaszimbólumot spontán generálás a read-del – ha [A »  X  a]  closure([B » .  @]) valamely [B » .  ]  J i -re, és a  @, akkor [A »  X.  a]  read(K i  X) öröklődés a read-del – ha [A »  X  @]  closure([B » .  @]), akkor [A »  X.  a]  read(K i  X) minden a-ra, amelyre [A »  X  a]  K i

30 LR-elemzés: LALR(1)  B  A X spontán generálódik @  -ból jön, nem @-ból  B  A X öröklődés @ a@

31 LR-elemzés: LALR(1) redukálás – ha nem epszilon-szabályról van szó, akkor a kanonikus halmaz törzsében jelen van az ezt szükségessé tevő elem (ponttal a végén) – A »  redukciót olyan elemekre kell végrehajtani, melyekre [C » .B , c]  i, B »»» A  és az előreolvasási szimbólumok: a  FIRST 1 (  c) léptetés – a-ra léptetünk, ha a törzsben szerepel [B » .A , b], és A »»» ax úgy, hogy az utolsó alkalmazott helyettesítési szabály epszilon-mentes


Letölteni ppt "LR-elemzés: LR(0) – ha az  x mondatforma nyele , akkor  bármely prefixe (az egész is) járható prefixe – ez azt jelenti, hogy ha elkezdjük olvasni."

Hasonló előadás


Google Hirdetések