Obsah
N-AP14
Zadání
Bezkontextové jazyky. Bezkontextové gramatiky. Zásobníkové automaty. Normální formy bezkontextových gramatik. Převod bezkontextové gramatiky na zásobníkové automaty. Použití pumping lemmatu a uzávěrových vlastností bezkontextových jazyků.
Bezkontextové jazyky
Jazyk je bezkontextový, pokud existuje bezkontextová gramatika
taková, že
.1)
Definice
je neprázdná konečná množina neterminálních symbolů
je konečná množina terminálních symbolů taková, že
je konečná množina pravidel (
)
je počáteční neterminál
Současně třída jazyků rozpoznávaných zásobníkovými automaty je právě třída bezkontextových jazyků. Tj. jazyk je bezkontextový, pokud je akceptován nějakým zásobníkovým automatem (existuje zásobníkový automat
, takový, že
).
Způsoby reprezentace bezkontextových jazyků
Bezkontextové jazyky lze reprezentovat:
- bezkontextovou gramatikou
- zásobníkovým automatem
- rozšířeným zásobníkovým automatem
Zásobníkový automat
Na vstupní pásce je napsáno slovo (nad jistou vstupní abecedou) – lze z ní pouze číst, čtecí hlava se pohybuje pouze vpravo. Automat může na vrchol zásobníku ukládat symboly (z jisté abecedy) a ty následně číst – čte vždy jen vrchol zásobníku, přečtený symbol je odstraněn = systém LIFO (Last In First Out).
Definice 3.36. - PDA 2)
•
•
•
•
•
•
•
… dno zásobníku, A … vrchol zásobníku, přidal se v tomto kroku
… obsah zásobníku se nezměnil, pouze se přešlo do stavu q1
… stav se nezměnil, ze zásobníku se přečetlo A – bylo odebráno
vrchol zásobníku běžného PDA se píše vlevo
Neformálně řečeno, rozšířený zásobníkový automat „vidí“ hlouběji do zásobníku – tj. čte 0–n vrchních symbolů.
Výpočet zásobníkového automatu
Definice 3.37. Konfigurace, krok výpočtu 3)
Konfigurací nazveme libovolný prvek
Na množině všech konfigurací automatu M definujeme binární relaci krok výpočtu
Reflexivní a tranzitivní uzávěr relace značíme
.
Je-li M zřejmý z kontextu, píšeme pouze resp.
.
Akceptující výpočet PDA
Definice 3.37. (pokračování) - akceptování 4)
a jazyk akceptovaný PDA M prázdným zásobníkem definujeme
, kde
.
Takto definovaný PDA je nedeterministický – akceptuje slovo, jestliže existuje alespoň jeden výpočet, který vede z počáteční konfigurace do akceptující. V případě možnosti automat „hádá správně“.
Ekvivalence dvou způsobů akceptování
Pro každý jazyk L platí:
Věta 3.39, 5)
PDA N akceptuje koncovým stavem, PDA M prázdným zásobníkem
koncový stav => prázdná paměť
Intuice:
K danému N zkonstruujeme M simulující jeho činnost.
Vejde-li N do koncového stavu, M se nedeterministicky rozhodne
• pokračovat v simulaci automatu N nebo
• přejít do nově přidaného stavu , v němž vyprázdní zásobník.
Komplikace:
Automat N by vyprázdnil zásobník, aniž by došel do koncového stavu – akceptoval by i nežádoucí vstup.
Řešení:
Před zahájením simulace bude u M na dně zásovníku nový symbol, který nedovolíme odstranit jinde, než ve stavu .
prázdná paměť => koncový stav
K danému M zkonstruujeme N simulující jeho činnost.
• N si před simulací přidá na dno zásobníku nový symbol.
• Je-li N schopen číst tento symbol (tj. zásobník automatu M je prázdný), potom N přejde do nově přidaného stavu , který je koncovým stavem.
Grafická reprezentace konfigurací
- Zpravidla nekonečné
- Vnitřní konfigurace (= částečná konfigurace) = aktuální stav a celý obsah zásobníku (vrchol se píše vlevo)
Příklad:
PDA - akceptuje koncovým stavem
PDA - akceptuje prázdným zásobníkem
Přechodovou funkci mají oba automaty stejnou:
Grafické znázornění obou automatů, žlutě vybarvené jsou konfigurace, ve kterých akceptuje automat A, v tlustě orámované konfiguraci akceptuje automat A'
Normální formy bezkontextových gramatik
Chomského normální forma
Definice 3.19
Každý bezkontextový jazyk lze generovat bezkontextovou gramatikou v Chomského normální formě. Algoritmus transformace do CNF lze nalézt ve skriptech Automaty a gramatiky, strana 67. Ve zkratce algoritmus funguje tak, že pravé strany délky větší než 2 nahradí novými neterminály, a tak se tato pravá strana zkrátí. Například pravidlo X → ABC se změní na pravidla X → A<BC>, <BC> → BC (<BC> je nový neterminál). Pro pravé strany délky 2, které se skládají z terminálu a neterminálu nahradí terminál novým neterminálem. Např. X → aC se změní na X → <a>C, <a> → a.
Greibachové normální forma
Definice 3.33
je bez
-pravidel (dle def. 3.13)
- každé pravidlo z
je tvaru
, kde
a
Každý bezkontextový jazyk lze generovat bezkontextovou gramatikou v Greibachové normální formě. Velmi zhruba naznačený postup je následující: Pokud je prázdný, pak jej definujeme jako jediné pravidlo (
). Pokud je
neprázdný, odstraníme levou rekurzi a převedeme do GNF. Algoritmus transformace do GNF lze nalézt ve skriptech Automaty a gramatiky, strana 73,74.
Převod bezkontextové gramatiky na zásobníkové automaty
Věta 3.51 8)
Jednoduchý algoritmus na prvnim slidu http://www.nvc.cs.vt.edu/~jzhang/cs5104/Note-8.pdf
priklad si bud vygooglovat nebo strana 89 ve skriptech FJA
Věta 3.47 9)
Strana 25, 26 http://www.eecs.wsu.edu/~ananth/CptS317/Lectures/PDA.pdf
Důsledek 3.52 10)
Konstrukce PDA řeší problém syntaktické analýzy. (platí pro dané G a w: )
v G existuje derivační strom s výsledkem w.
Nedeterministická syntaktická analýza shora dolů
Budování derivačního stromu simuluje levé derivace, tj. vždy rozvíjíme nejlevější neterminál.
Důsledek 3.47 11)
Důkaz. K dané gramatice G konstruujeme PDA M, který simuluje levé derivace v G (rozvíjíme nejlevější neterminál).
- V levé derivaci je v jednom kroku odvození nahrazen (nejlevější) neterminál A pravou stranou
nějakého A-pravidla.
- V M této situaci odpovídá náhrada A na vrcholu zásobníku řetězem
.
, kde
je definována:
obsahuje
právě když
pro všechna
korektnost + důkaz viz skripta 12)
Nedeterministická syntaktická analýza zdola nahoru
Lemma 3.55 13)
Důkaz.
Vrchol zásobníku píšeme vpravo.
Konstruujeme rozšířený PDA R, který simuluje pravou derivaci v G v obráceném pořadí.
PDA R má kroky dvojího typu:
- může kdykoli číst do zásobníku vstupní symbol,
- (redukce) je-li na vrcholu zásobníku řetěz tvořící pravou stranu nějakého pravidla v G, může ho nahradit odpovídajícím levostranným neterminálem (a ze vstupu nic nečte).
Nechť .
Položme , kde
je nově přidaný symbol a kde
je definována takto:
pro všechna
…načítání vstupu na zásobník,
- je-li
, pak
obsahuje (q, A) …redukce,
…akceptování.
korektnost viz slajdy 14)
Příklad:
Zadání:
G = ({S, A, B}, {a, b}, P, S)
P =
{S → | abSA
A → AaB | aB | a,
B → aSS | bA | }
Derivační strom pro slovo w = abababaa

Automat, který provádí syntaktickou analýzu shora dolů:
A = ({q}, {a,b}, {S, A, B, a, b}, , q, S,
)
2 typy přechodových fcí:
- levou stranu pravidel z gram. dáváme na zásobník levé strany přechodové fce PDA, pravou stranu pravidel z gram. na zásobník pravé strany
(q,
, S) = {(q,
), (q, abSA)}
(q,
, A) = {(q, AaB), (q, aB), (q, a)}
(q,
, B) = { (q, aSS), (q, bA), (q,
)}
- „mazací“ přechodové fce
(q, a, a) = {(q,
)}
(q, b, b) = {(q,
)}
- Akceptující výpočet nad slovem abababaa:
(intuice: postupuju podle derivačního stromu, sleduju jeho rozvíjení odshora a čtu ho zleva)
vrchol zásobníku je vlevo
… celé slovo se přečetlo a zásobník se vyprázdnil automat slovo akceptuje
Automat pro syntaktickou analýzu zdola nahoru:
3 typy přechodových funkcí:
- terminály z gramatiky se předávají na zásobník
(q, a,
) = {(q, a)}
(q, b,
) = {(q, b)}
- pravou stranu pravidel z gram. dáváme na zásobník levé strany přechodové fce PDA, levou stranu pravidel z gram. na zásobník pravé strany
(q,
, abSA) = {(q, S)}
(q,
,
) = {(q, S), (q, B)} ! ! ! Nesmí být rozděleno na:
(q,
,
) = {(q, S)} a
(q,
,
) = {(q, B)}, nebyla by to pak funkce.
(q,
, AaB) =
(q,
, aB) =
(q,
, a) = {(q, A)}
(q,
, aSS) =
(q,
, bA) = {(q, B)}
- přechod do koncového stavu
(q,
,
S) = {(r,
)}
- Akceptující výpočet nad slovem abababaa:
(Intuice: čtu derivační strom zleva – jako když teče voda (= používám první skupinu pravidel), pokud by voda musela téct do kopce, použiju pravidlo z druhé skupiny)
vrchol zásobníku je vpravo
… automat přečetl celé slovo a přešel do koncového stavu r, slovo akceptuje.
U nedeterministické analýzy automat slovo neakceptuje, pokud žádný z možných výpočtů není akceptující.
Použití pumping lemmatu a uzávěrových vlastností bezkontextových jazyků
Použití lemmatu o vkládání pro bezkontextové jazyky
Věta 3.24
Explicitněji lze lemma přepsat takto:
Za předpokladu, že , pak
Lemma o vkládání je ve tvaru implikace P ⇒ Q, kde P je výrok, že L je CFL a Q jsou uvedené vlastnosti. Této implikace (resp. její kontrapositivní formu) lze použít k důkazu, že nějaký jazyk není CFL. Stačí ukázat platnost následujícího tvrzení:
Pro libovolnou konstantu existuje slovo
,
takové, že pro všechna slova
,
,
,
,
splňující:
,
a
existuje takové
, že
.
Příklad
Pro libovolnou konstantu existuje slovo
: Zvolíme slovo
jako libovolné, pro důkaz vhodné, slovo
z jazyka
-
. Dále pro každé libovolné rozdělení slova
splňující následující podmínky:
musí existovat
takové, že
.
Nyní musíme takové nalézt. Položme tedy
a ověříme, že
rozebráním jednotlivých případů:
není podslovo
. Potom ale
nebo
, kde
. Z toho plyne, že
.
je podslovo
. Tuto situaci rozdělíme ještě na další dva případy:
je podslovo
: Pak ale
, z čehož plyne, že
je podslovo
:
. Současně
a tudíž
a tedy
.
Uzávěrové vlastnosti bezkontextových jazyků
Třída bezkontextových jazyků je uzavřena vzhledem k operacím:
- sjednocení
- zřetězení
- iterace
- pozitivní iterace
- průnik s regulárním jazykem
Třída bezkontextových jazyků není uzavřena vzhledem k operacím:
- průnik
- doplněk
Pro následující případy uvažujme:
je generován CFG
,
je generován CFG
a bez újmy na obecnosti budeme předpokládat
.
Sjednocení
Definujme , kde
je nový symbol a
Jazyk je generován gramatikou
.
Zřetězení
Definujme , kde
je nový symbol a
Jazyk je generován gramatikou
.
Iterace a pozitivní iterace
Definujme , kde
je nový symbol a
Jazyk je generován gramatikou
.
Definujme , kde
je nový symbol a
Jazyk je generován gramatikou
.
Průnik a doplněk
Kdyby byla třída bezkontextových jazyků uzavřena vzhledem k operaci průnik, pak i by musel být bezkontextový, což však není.
Neuzavřenost vůči doplňku plyne z uzavřenosti třídy bezkontextových jazyků vzhledem k operaci sjednocení, neuzavřenosti na průnik a De Morganových pravidel:
Předměty
Vypracoval
Marek Menšík UČO 255679
Nevím přesně, kdo otázky zpracoval přede mnou, pouze jsem je sem umístil, doplnil chybějící věci a opravil nepřesnosti. Připomínám, že věci zde uvedené nemusí být korektní a zatím neprošly kontrolou žádného z profesorů.
