1 / 78

Bezkontextové gramatiky a jazyky

Bezkontextové gramatiky a jazyky. Bezkontextové gramatiky. BKG sú gramatiky s pravidlami A  α Kde A  N α  (N  T) * Pripúšťame teda e-pravidlá ( e na pravej strane), ale vieme, že tento problém možno ošetriť rozšírenou gramatikou. BKG, BKJ a Programovacie jazyky.

alain
Télécharger la présentation

Bezkontextové gramatiky a jazyky

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Bezkontextové gramatiky a jazyky

  2. Bezkontextové gramatiky BKG sú gramatiky s pravidlami A α Kde A N α(N  T)* Pripúšťame teda e-pravidlá ( e na pravej strane), ale vieme, že tento problém možno ošetriť rozšírenou gramatikou

  3. BKG, BKJ a Programovacie jazyky • BGK sú základným špecifikačným prostriedkom programovacích jazykov • Nie sú celkom dostatočné, niekedy sa „vyžaduje“ kontext • Problém „nedostatočnosti“ sa rieši dohodou na úrovni jazyka • Neopúšťa sa úroveň bezkontextovosti – je to podstatne jednoduchšie a účinnejšie

  4. Derivácia a jej reprezentácia • Pri analýze nás zaujíma nielen „výsledok“ (generované slovo), ale aj proces, ako sme sa k danému slovu dostali – proces derivácie • Umožňuje nám zistiť vlastnosti gramatiky • Existuje viacero spôsobov reprezentácie derivácie • Najčastejšie sa používa: • Klasická postupnosť vetných foriem • Postupnosť čísiel pravidiel použitých v derivácii – rozbor • Derivačný strom

  5. Derivačný strom Derivačný strom je orientovaný, vrcholovo ohodnotený strom s usporiadanými nasledovníkmi každého vrcholu (ak vrchol má nasledovníkov). Nech G = (N, T, P, S) je BKG. Potom orientovaný, vrcholovo ohodnotený a usporiadaný strom D je derivačným stromom pre G, ak má nasledujúce vlastnosti:

  6. Derivačný strom df • Každý vrchol je ohodnotený symbolom z N  T { e } • Ohodnotenie koreňa stromu je S • Ak vrchol má aspoň jedného nasledovníka, potom je ohodnotený symbolom z N • Ak u1 , u2, …. , uk sú priami nasledovníci vrchola u, ktorý je ohodnotený symbolom A N a jeho nasledovníci sú ohodnotený zľava doprava symbolmi A1, A2, ... , Ak , potom musí v P existovať pravidlo A  A1A2 ... Ak

  7. Príklad Majme gramatiku G = ({A, B, C, D, E, F, G}, { +, -, ., 0, 1, …, 9, z}, P, A) P: A  B | BzD B  CE C  + | - | e D  CF E  F. | F.F | .F F  G | FG G  0 | 1 | … | 9

  8. Reprezentácia derivácie Najprv zistime, či reťazec 34.25z-13 je z jazyka L(G). Pokúsime sa ho získať deriváciou z A (začiatočného symbolu gramatiky G) A  môžeme vybrať jednu z alternatív pravidla A B | BzD. Vyberieme druhú. Dostaneme: A  BzD na ďalšiu deriváciu môžeme vybrať neterminál B alebo D. Budeme postupovať „systémovo“ a vyberať vždy neterminál „prvý zľava“. Dostaneme:

  9. A  BzD A  B | BzD B  CE C  + | - | e D  CF E  F. | F.F | .F F  G | FG G  0 | 1 | … | 9 A  BzD  CEzD použijeme pravidlo C  e a dostaneme A  BzD  EzD použijeme pravidlo E  F.F a dostaneme A  BzD  EzD  F.FzD postupujeme analogicky ďalej a postupne dostaneme

  10. A  BzD  EzD  F.FzD A  B | BzD B  CE C  + | - | e D  CF E  F. | F.F | .F F  G | FG G  0 | 1 | … | 9 A  BzD  EzD  F.FzD  FG.FzD  GG.FzD  3G.FzD  34.FzD  34.FGzD  34.GGzD  34.2GzD  34.25zD  34.25zCF  34.25z-F

  11. A  B | BzD B  CE C  + | - | e D  CF E  F. | F.F | .F F  G | FG G  0 | 1 | … | 9 A * 34.25z-F  34.25z-FG  34.25z-GG  34.25z-1G  34.25z-13 Reťazec34.25z-13 je z jazyka L(G), pretože existuje derivácia A * 34.25z-13.

  12. Zodpovedajúci derivačný strom A D B z C C F E . F F F G - e F G F G G 3 G G 4 5 1 3 2

  13. Niektoré vlastnosti DS Neukazuje postup, ako bol vytvorený Má štruktúru Zo štruktúry sa dajú zistiť vlastnosti derivácie i samotnej gramatiky

  14. Rez DS Rezom DS D nazývame množinu vrcholov C s vlastnosťami • Žiadne dva vrcholy z C neležia na jednej ceste z koreňa DS • K C nemožno pridať žiadny vrchol aby sa neporušila prvá vlastnosť

  15. Rez DS a Vetná forma Zreťazením vrcholov rezu DS v usporiadaní zľava doprava dostaneme VF Príklady rezov DS z nášho príkladu C1 = {B, z, D} VF: BzD; A *BzD C2 = { C, E, z, -, F, G} C3 = {C, 3, 4, ., 2, 5, z, -, 1, 3}

  16. Ľavá a pravá derivácia Reprezentácia derivácie klasickou postupnosťou VF v derivácii sa robí systematickou deriváciou neterminálu v každom kroku derivácie Deriváciou neterminálu prvého zľava dostávame – ľavú deriváciu Deriváciou neterminálu prvého sprava dostávame – pravú deriváciu Vetné formy v ľavej / pravej derivácii nazývame ľavé / pravé vetné formy

  17. Viacznačné gramatiky Majme gramatiku G1 = ({ S }, {a, b, if, then, else}, P, S) P: S  if b then S else S S  if b then S S  a Do jazyka L(G1) patrí aj veta if b then if b then a else a Pretože existuje derivácia S  if b then S if b then if b then S else S if b then if b then a else S if b then if b then a else a

  18. Jedinečnosť a nejedinečnosť derivácie Otázky: • existuje k uvedenej vete jazyka L(G1) viac derivácií ? Aj viac ľavých alebo pravých derivácií? • Môže to mať nejaké dôsledky?

  19. Príklad Majme gramatiku pre zjednodušený AV G2 = (N, T, P, S) P: E  E + T | T T  T * F | F F  ( E ) | a | b | c Zistime, či reťazec – výraz (a + b) * c patrí do jazyka L(G2)

  20. (a + b) * c E  E + T | T T  T * F | F F  ( E ) | a | b | c Ľavá derivácia D1: E  T  T * F  F * F  ( E ) * F  (E + T) * F  (T + T) * F  (F + T) * F  (a + T) * F  (a + F) * F  (a + b) * F  (a + b) * c Daný reťazac patrí do jazyka L(G2). Pravá derivácia D2: E  T  T * F T * c  F* c  ( E )* c  ( E + T )* c  ( E + F )* c  ( E + b )* c  ( T + b )* c  ( F + b )* c  ( a + b )* c Aj táto derivácia ukazuje že daný reťazec je „výrazom“ a patrí do L(G2)

  21. Reprezentácia derivačným stromom E T T F * F E c ( ) T E + T F F b a

  22. Derivačný strom pre D2 • Derivácii D2 zodpovedá rovnaký derivačný strom – strom s rovankou štruktúrou • Derivačný strom jasne ukazuje aj „viazanie“ operandov operátormi + a *. • Pozrime sa na deriváciu výrazu a + b * c • Otázka? Ako sú teraz viazané operandy a operátory

  23. a + b * c Derivácia E  E + T  T + T  F + T  a + T  a + T * F  a + F * F  a + b * F  a + b * c

  24. a + b * c Derivačný strom E T E + T F T * F F c b a

  25. a + b * c Derivačný strom • Z DS vidieť„správne“ viazanie operátorov a operandov • Otázka. Je jediný? Skúste pravú deriváciu

  26. Iná G pre jednoduchý AV Majme gramatiku G = ({E}, {+, *, (, ), a, b, c }, P, E) P: E  E + E | E * E | (E) | a | b | c Zistime znova, či reťazec a + b * c patrí do jazyka L(G)

  27. Derivácie a + b * c D1: E  E + E  a + E  a + E * E  a + b * E  a + b * c - je to ľavá derivácia D2: E  E * E  E + E * E  a + E * E  a + b * E  a + b * c - je to tiež ľavá derivácia Obe derivácie ukazujú že reťazec a + b * c patrí do jazyka L(G) Otvorená je otázka viazanosti operátorov a operandov. Lepšie to bude vidieť z derivačného stromu.

  28. Derivačný strom a + b * c D1: E E D2 E E E + E * E E E E * + a c a b b c

  29. Závery z reprezentácie derivácie • Derivačné stromy D1 a D2 k tomu istému výrazu – slovu jazyka majú rôznu štruktúru • D1 a D2 ukazujú rôznu viazanosť operátorov a operandov, čo má za následok rôzne významy daných výrazov

  30. Viacznačná gramatika df BKG gramatika G = (N, T, P, S) je nejednoznačná – viacznačná, ak existuje aspoň jedno slovo w  L(G) pre ktoré existuje viac derivačných stromov s odlišnou štruktúrou. Ekvivalentne platí, že gramatika G je viacznačná ak existuje aspoň jedno slovo w  L(G) pre ktoré existuje viac ľavých (pravých) derivácií.

  31. Príklad s príkazom if Majme gramatiku G1 = ({ S }, {a, b, if, then, else}, P, S) P:S  if b then S else S S  if b then S S  a Do jazyka L(G1) patrí aj veta if b then if b then a else a K tejto vete však existujú nasledujúce dve ľavé derivácie a teda je viacznačná: D1: S  if b then S  if b then if b then S else S  if b then if b then a else S  if b then if b then a else a D2: S  if b then S else S  if b then if b then S else S  if b then if b then a else S  if b then if b then a else a

  32. Nejednoznačnosť gramatík a jazyky • Nejednoznačnosť gramatiky sa nemusí týkať jazyka • Gramatiku možno často transformovať na jednoznačnú • Jazyky pre ktoré nemožno gramatiku transformovať na jednoznačnú nazývame inherentne nejednoznačné

  33. Transformácia gramatík • Existencia ekvivalentných gramatík, t.j. gramatík špecifikujúcich ten istý jazyk, vedie na myšlienku „prechodu“ alebo transformáciu jednej gramatiky na druhú – ekvivalentnú gramatiku. • Rozoberieme si niektoré algoritmy zisťujúce vlastnosti gramatík a jazykov i transformáciu pri zachovaní ekvivalentnosti.

  34. Je L(G) neprázdny ? • Vstup: BKG • Výstup: Áno – ako L(G) , inak Nie Postup: Algoritmus A1 • N0 := ; i := 1; • Ni := { A /A α P, α(Ni-1 T)*}  Ni-1 • Ak Ni Ni-1 tak i := i + 1 a prejdi na krok 1 inak Ne := Ni • Ak S Ne tak Áno inak Nie

  35. Príklad Daná je gramatika G = ({A, B, C, D, E, F, G}, { +, -, ., 0, 1, …, 9, z}, P, A) P: A  B | BzD B  CE C  + | - | e D  CF E  F. | F.F | .F F  G | FG G  0 | 1 | … | 9 Treba zistiť, či L(G) je neprázdny.

  36. P: A  B | BzD B  CE C  + | - | e D  CF E  F. | F.F | .F F  G | FG G  0 | 1 | … | 9 Postup • N0 =  • N1 = {C, G} • N2 = {C, G, F} • N3 = {C, G, F, D, E} • N4 = {C, G, F, D, E, B} • N5 = {C, G, F, D, E, B, A} • N6 = {C, G, F, D, E, B, A} • N5 = N6 algoritmus končí a keďže A N6 jazyk L(G) je neprázdny.

  37. Príklad Majme „modifikovanú“ gramatiku z predchádzajúceho príkladu (nemáme čísla so znamienkom, tak „vypustíme“ toto pravidlo) G = ({A, B, C, D, E, F, G}, { +, -, ., 0, 1, …, 9, z}, P, A) P: A  B | BzD B  CE D  CF E  F. | F.F | .F F  G | FG G  0 | 1 | … | 9

  38. P: A  B | BzD B  CE D  CF E  F. | F.F | .F F  G | FG G  0 | 1 | … | 9 Postup • N0 =  • N1 = {G} • N2 = {G, F} • N3 = {G, F, E} • N4 = {G, F, E} • N3 = N4 algoritmus končí a keďže A N4 jazyk L(G) je prázdny.

  39. Nedostupné a nadbytočné symboly Definícia gramatiky ako štvorice (N, T, P, S) evokuje (právom) otázku, či sa všetky symboly „využijú“ Druhým dôvodom je, že gramatika vymedzuje gramatické pravidlá jazyka, ktorý špecifikuje a tie vedú priamo na jej množinu pravidiel. Preto sa často hovorí, že • neterminály sú tie symboly, ktoré sa objavia aspoň raz na ľavej strane niektorého pravidla, ostatné sa implicitne považujú za terminály

  40. Nedostupné symboly Nech G = (N, T, P, S) je BKG. Potom symbol X  N  T nazývame nedostupným, ak sa neobjaví v žiadnej VF gramatiky G. Teda neexistuje také αXβ, že platí A +αXβ, pre nejaké α, β z (N  T)*. Takýto symbol možno z G vylúčiť.

  41. Vylúčenie nedostupných symbolov – Algoritmus A2 Vstup: BKG G = (N, T, P, S) Výstup: G’ = (N’, T’, P’, S), pre ktorú platí: • L(G’) = L(G) • pre všetky X  N’  T’existuje také α, β z (N’  T’)*, že:S G’*αXβ

  42. Postup • V0 := { S } ; i := 1; • Vi := { X / A αXβ P, A Vi-1 } Vi-1 • Ak Vi Vi-1 , potom i := i + 1 a pokračuj krokom 2. Inak N’ := Vi N T’ := Vi T P’ := {A α / A Vi , αVi* , A α P } G’ = (N’, T’, P’, S)

  43. Nadbytočné symboly Nech G = (N, T, P, S) je BKG. Potom symbol X  N  T nazývame nadbytočným, ak neexistuje derivácia S * wXy *wxy, pre w, x, y T*

  44. Vylúčenie nadbytočných symbolov – algoritmus A3 Vstup: BKG G = (N, T, P, S), taká, že L(G)   Výstup: G’ = (N’, T’, P’, S), pre ktorú platí: • L(G’) = L(G) • žiadny symbol z N’  T’ nie je nadbytočný

  45. Postup 1. Použitím algortimu A1 získame množinu neterminálov Ne, z ktorých možno generovať terminálne reťazce. Vytvoríme gramatiku G1 = (Ne , T, P1, S ), kde P1 = {A α / A  Ne , α(Ne T) *, A α P} Vylúčime tým tie neterminály, z ktorých nemožno generovať terminálne reťazce 2. Použitím algoritmu A2 na G1vylúčime symboly, ku ktorým sa nemôžeme dostať a dostaneme gramatiku G’ = (N’, T’, P’, S)

  46. Príklad Majme gramatiku G = ( {S, A, B}, { a, b}, P, S) P: S  a | A A  AB B  b Aplikáciou algoritmu A3 vylúčime nadbytočné symboly.

  47. Postup Krok 1. Aplikácia A3 – vytvoríme množinu neterminálov, Ne, z ktorých možno generovať terminálne reťazce. N0 =  N1 = {B, S} N2 = {B, S} N1 = N2 = > Ne = {B, S} G1 = ( {S, B}, { a, b}, P1, S) P1 : S  a B  b

  48. Postup Krok 2 Krok2. Aplikácia A2 – vylúčime nedostupné symboly V0 = { S } V1 = { S, a } V2 = { S, a } Výslednou gramatikou bude gramatika G’ = ({ S }, { a }, { S  a }, S )

  49. Gramatika bez e – pravidla BKG G = (N, T, P, S) budeme nazývať gramatikou bez e pravidla , ak P neobsahuje pravidlo A e, okrem prípadného pravidla S  e Niekedy je výhodné gramatiku transformovať tak, aby sme dostali ekvivalentnú gramatiku, ale bez e pravidla. Umožňuje nám to algoritmus A4.

  50. Vylúčenie e pravidiel Vstup : BKG G = (N, T, P, S) Výstup: ekvivalentná gramatika G’ = (N’, T, P’, S) bez e pravidiel

More Related