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

LL(1)-elemzés ● az LL(1)-elemzők már jobbak az előzőeknél, bár nem fedik le a programozási nyelvek szükségleteit ● alapötlet: a levezetés következő lépéséhez.

Hasonló előadás


Az előadások a következő témára: "LL(1)-elemzés ● az LL(1)-elemzők már jobbak az előzőeknél, bár nem fedik le a programozási nyelvek szükségleteit ● alapötlet: a levezetés következő lépéséhez."— Előadás másolata:

1 LL(1)-elemzés ● az LL(1)-elemzők már jobbak az előzőeknél, bár nem fedik le a programozási nyelvek szükségleteit ● alapötlet: a levezetés következő lépéséhez használjuk fel a szöveg következő terminálisát

2 LL(1)-elemzés ● kiindulásként az ún. egyszerű LL(1) nyelvtanokat vizsgáljuk ● epszilonmentesek ● a szabályok jobb oldalai terminálissal kezdődnek ● az azonos bal oldalú szabályok jobb oldalának kezdeti terminálisai különbözőek B » a 1 α 1 | a 2 α 2 |...

3 Egyszerű LL(1)-elemzés S a # ab (aSA, 1) pop accept error A(a, 2) bpoperror # (bA, 3) error ● példa elemző táblázatra: error a terminálisokhoz tartozó rész mindig átlós: ha karakter jön, csak a megfelelőt fogadjuk el 1: S » aSA 2: A » a 3: S » bA az olvasott terminális a verem teteje

4 Egyszerű LL(1)-elemzés ● elemezzük a következő szöveget: aabab# ● az elemzés menetének komponensei: (szöveg, mondatforma, alkalmazott szabályok) ● az elemzés menete: a táblázat szerint léptetünk vagy fejtjük ki a szabályt; kiindulás: (szöveg, S#,  ) ● (aabab#, S#,  )  (aabab#, aSA#, 1)  abab#, SA#, 1)  (abab#, aSA#, 11)  (bab#, SA#, 11)  (bab#, bAA#, 113)  (ab#, AA#, 113)  (ab#, aA#, 1132)  (b#, A#, 1132)  error S ab (aSA, 1) A(a, 2) # error (bA, 3) error

5 Egyszerű LL(1)-elemzés ● feladat – adott a következő nyelvtan ● S » aS | bA A » d | ccA – hogy néz ki az elemző táblázat? – le lehet-e vezetni: abc# ● feladat – adj meg olyan nyelvtant, amiben n db nemterminális és m db terminális szerepel, és az elemző táblázatnak a lehető legtöbb mezője ki van töltve!

6 Epszilonmentes LL(1)-elemzés ● ez már majdnem a teljes LL(1) ● az az ötlet, hogy a szövegekben megjelenő kezdeti terminálisokat vizsgáljuk, és ezek szerint választjuk ki, melyik szabályt kell alkalmazni ● FIRST 1 (a): az a mondatformából levezethető mondatok első terminálisainak halmaza – van algoritmus rá, hogyan lehet ezeket kinyerni a nyelvtan ismeretében – a mi egyszerű nyelvtanainkból ránézésre is látszanak – előfordulhat, hogy # is eleme – ha epszilon-szabályok is megengedettek, lehet üres is

7 Epszilonmentes LL(1)-elemzés FIRST 1 (A) egy eleme A a... FIRST 1 (a) a a...

8 Epszilonmentes LL(1)-elemzés ● feladat: határozzuk meg minden nyelvtani jel FIRST-jét az alábbi nyelvtanokban ● S » Bc | SA A » aAA | a B » Bb | b ● S » A | B | C | D A » aB | Ab B » bC | Bc C » cD | Cd D » dE | De E » e

9 Epszilonmentes LL(1)-elemzés ● az epszilonmentes nyelvtanok tulajdonságai – epszilonmentesek :) – A »  |  esetén FIRST 1 (  ) és FIRST 1 (  ) diszjunktak ● az elemző táblázat pontosan olyan, mint az egyszerű LL(1) esetén – ha egy szabály nemterminálissal kezdődik, akkor minden olyan terminális oszlopába be kell írni, ami szerepel a FIRST-jében – mivel a FIRST-ök különbözőek, garantált, hogy egy mezőt nem próbálunk meg kétszer is kitölteni

10 Epszilonmentes LL(1)-elemzés ● feladat – adott a következő nyelvtan ● S » dSdS | A | eB ● A » a | BA ● B » b | c – adjuk meg az elemző táblázatot – adjunk olyan szöveget, amely elemzése során minden szabályt pontosan egyszer használunk! – elemezzük is a szöveget!

11 Epszilonmentes LL(1)-elemzés ● FOLLOW 1 (A): azok a terminálisok, amelyekhez van a nyelvnek olyan mondata, hogy a szintaxisfában közvetlenül A után szerepelnek – másképpen: a szövegben, miután kiolvastuk A-t, rögtön ez a terminális következik – ezek kinyerésére is van algoritmus – míg a FIRST meghatározásánál abból a szabályból indul ki az ember, aminek a bal oldalán áll a nemterminális, itt azokból, amelyek a jobb oldalon tartalmazzák; az utána jövő jel FIRST-je adja meg – előfordulhat itt is, hogy a # is eleme

12 LL(1)-elemzés S a... A S a A X X FOLLOW 1 (A)

13 Epszilonmentes LL(1)-elemzés ● feladat: határozzuk meg minden nyelvtani jel FOLLOW-ját az alábbi nyelvtanban – S » ABCBA – A » aB | a – B » bA | b – C » cAcB ● kérdés: előfordulhat-e, hogy FOLLOW 1 (A) = FIRST 1 (A) – amennyiben igen, adj példát is rá!

14 LL(1)-elemzés ● az LL(1)-nyelvtanok tulajdonságai – A »  |  esetén FIRST 1 (  FOLLOW 1 (  ) ) és FIRST 1 (  FOLLOW 1 (  ) ) diszjunktak – a feltétel még mindig arról szól, hogy egyértelműnek kell lennie a terminálisból, melyik szabály következik a szintaxisfában ● az elemző táblázat még tovább bővül az epszilonmentes LL(1)-hez képest – az epszilon-szabályok a FIRST 1 (FOLLOW 1 (  ) ) oszlopaiba kerülnek

15 LL(1)-elemzés ● feladat: – S » Bd | dd A » a | cA B » ABC | bc C » AB |  elemzendő: abcd ● feladat: adj meg olyan nyelvtant, amely elemző táblázatában a lehető legtöbb  -szabály van! ● feladat: – S » CADB | D A » ab B » Da |  C » BbA elemzendő: aba

16 S ab A # B C cd (Bd, 1) (a, 3) (dd, 2)(Bd, 1) (cA, 4) (Bd, 1) (ABC, 5) (AB, 7) (bc, 6) (AB, 7) ( , 8)

17 S ab A # B C cd D (CADB, 1) ( , 2) (ab, 3) (Da, 4) (BbA, 6) (D, 2) ( , 5) (CADB, 1) ( , 7)

18 LL(k) ● feladat: adjunk olyan nyelvtant, ami nem LL(1)-es típusú, de pár elem előreolvasásával meg lehet mondani, melyik szabályt kell választani! ● az LL(k) elemzések pont erről szólnak – a definíciójában FIRST(k) és FOLLOW(k) szerepel, ahol ezek az első legfeljebb k levezethető terminális – LEFT(k, A,  ) := {FIRST(k, x) | S »» wA  » w  »» wx} – egy eldöntési kritérium: egy nyelvtan LL(k), ha minden A  »  szabályra LEFT(k, A,  ) és LEFT(k, A,  ) diszjunktak ● ezek sem elég jók: adjunk meg olyan nyelvtant, ami semmilyen k-ra nem LL(k)!

19 LL(k) ● feladat: milyen k-ra LL(k)? Át lehet-e alakítani úgy, hogy kisebb k-ra LL(k) legyen? ● S » A A » Bc | Bd B » a | bB ● S » BabB A » a |  B » a | b ● S » Ab | Bc A » aAb | d B » aBc | d


Letölteni ppt "LL(1)-elemzés ● az LL(1)-elemzők már jobbak az előzőeknél, bár nem fedik le a programozási nyelvek szükségleteit ● alapötlet: a levezetés következő lépéséhez."

Hasonló előadás


Google Hirdetések