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ů.
Jazyk je bezkontextový, pokud existuje bezkontextová gramatika taková, že .1)
Definice
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 ).
Bezkontextové jazyky lze reprezentovat:
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ů.
Definice 3.37. Konfigurace, krok výpočtu 3)
Reflexivní a tranzitivní uzávěr relace značíme .
Je-li M zřejmý z kontextu, píšeme pouze resp. .
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ě“.
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
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 .
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.
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'
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.
Definice 3.33
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.
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.
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).
, kde je definována:
korektnost + důkaz viz skripta 12)
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:
Nechť .
Položme , kde je nově přidaný symbol a kde je definována takto:
korektnost viz slajdy 14)
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í:
(q, , S) = {(q, ), (q, abSA)}
(q, , A) = {(q, AaB), (q, aB), (q, a)}
(q, , B) = { (q, aSS), (q, bA), (q, )}
(q, a, a) = {(q, )}
(q, b, b) = {(q, )}
(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í:
(q, a, ) = {(q, a)}
(q, b, ) = {(q, b)}
(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)}
(q, , S) = {(r, )}
(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í.
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ů:
Třída bezkontextových jazyků je uzavřena vzhledem k operacím:
Třída bezkontextových jazyků není uzavřena vzhledem k operacím:
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 .
Definujme , kde je nový symbol a
Jazyk je generován gramatikou .
Definujme , kde je nový symbol a
Jazyk je generován gramatikou .
Definujme , kde je nový symbol a
Jazyk je generován gramatikou .
Definujme , kde je nový symbol a
Jazyk je generován gramatikou .
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:
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ů.