(definice, převod bezkontextové gramatiky na zásobníkový automat)
(syntaktická analýza shora dolů a zdola nahoru, průběh analýzy daného slova)
Zásobníkový automat = PushDown Automaton = PDA
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 1)
… 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
Definice 3.37. Konfigurace, krok výpočtu 2)
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í 3)
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ě“.
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'
Pro každý jazyk L platí:
Věta 3.39, 4)
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.
Definice 3.44., Rozšířený PDA 7)
Pojmy konfigurace a akceptovaný jazyk (koncovým stavem, prázdným zásobníkem) zůstávají beze změny. Krok výpočtu definujeme takto:
pro
Lemma 3.45. 8)
(Důkaz: skripta Formální jazyky a automaty I, str. 82)
Problém syntaktické analýzy pro bezkontextové gramatiky: pro danou bezkontextovou gramatiku G a slovo w rozhodnout, zda .
Věta 3.51 9)
Věta 3.47 10)
Důsledek 3.52 11)
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 12)
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 13)
Lemma 3.55 14)
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 15)
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í.
Nederministický PDA ⇒ nedeterministický algoritmus ⇒ exponenciální deterministický algoritmus
Řešení:
• deterministický algoritmus složitosti , kde n = |w| (algoritmus Cocke – Kasami – Younger)
• deterministické zásobníkové automaty a deterministické bezkontextové jazyky
• lineární algoritmy pro speciální třídy deterministických bezkontextových jazyků
Problém: Lze v dané gramatice v CNF vygenerovat dané slovo w?
Řešení: Pro každé podslovo u slova w spočítáme množinu všech neterminálů, z kterých lze odvodit u.
* u = a
* u = ab
* u = abc
Algoritmus C - Y - K
od od od od
Je dána bezkontextová gramatika G = ({S,A,B,C}, {a, b, c, d}, P, S) v CNF, kde
P = { S → AA | BC | a | b,
A → BA | BB | a | c,
B → AB | CA | b,
C → BC | CC | SC | d }
Syntaktická analýza slova pomocí C-K-Y algoritmu:
Vidíme, že , tedy .
Pro žluté políčko vezmeme jednu z dvojic políček - např. tu orámovanou zeleně. Vzniklé dvojice neterminálů jsou SB a AB. SB není generována žádným neterminálem, tedy do žlutého políčka nepřipisuju nic. AB je generovaná B, proto B zapíšu do žlutého políčka. Stejně postupuju i u ostatních dvojic políček.
Skripta Formální jazyky a automaty I
Slajdy k přednáškám IB102 na stránkách Jana Strejčka
Didl - Dita Dlabolová
Stav: 100%, z mé strany hotovo a zkontrolováno.
Je potřeba ještě zapracovat poznámky od Jitky Pospíšilové.