Obsah
AP11, IN11 Zásobníkové automaty, Syntaktická analýza
Zadání
(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)
Vypracování
Intuice zásobníkového automatu
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).
Formální definice
Definice 3.36. - PDA 1)
• Q je konečná množina, jejíž prvky nazýváme stavy,
•
•
•
•
•
•
… 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
Výpočet zásobníkového automatu
Definice 3.37. Konfigurace, krok výpočtu 2)
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í 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ě“.
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'
Ekvivalence dvou způsobů akceptování
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
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.
Rozšířený zásobníkový automat
Definice 3.44., Rozšířený PDA 7)
• všechny symboly až na
•
z konečné podmnožiny množiny
do konečných podmnožin množiny
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
Ekvivalence rozšířených PDA a PDA
Lemma 3.45. 8)
(Důkaz: skripta Formální jazyky a automaty I, str. 82)
Zásobníkové automaty a bezkontextové jazyky

Problém syntaktické analýzy pro bezkontextové gramatiky: pro danou bezkontextovou gramatiku G a slovo w rozhodnout, zda .
Ekvivalence bezkontextových gramatik a zásobníkových automatů
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.
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 12)
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 13)
Nedeterministická syntaktická analýza zdola nahoru
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:
- 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 15)
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í.
Efektivnost syntaktické analýzy
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ů
C - Y - K algoritmus (Cocke - Younger - Kasami)
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
- Kubická složitost vzhledem k délce vstupního slova (velikost tabulky:
, na vyplnění políčka je zapotřebí až n kroků.
- Pracuje pouze s gramatikou v CNF (Chomského normální formě)
Algoritmus:
Algoritmus C - Y - K
Poznámka:
for i:=1 to n do
for každé pravidlo
if
od od
for j:=2 to n do
for i:=1 to n-j+1 do
for k:=1 to j-1 do
for každé pravidlo
if
od od od od
Příklad
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
.
Intuitivní návod na vyplňování tabulky:
- na nultý řádek napíšeme slovo, které chceme testovat (co sloupeček, to 1 terminál)
- obsah každého políčka v 1. řádku tvoří množina neterminálů, ze kterých se vygenerují terminály v příslušném sloupečku nultého řádku
- další řádky se vyplňují stylem, který je naznačený u žlutého políčka: do množiny v políčku se zapíší všechny neterminály, které generují všechny dvojice neterminálů z příslušných dvojic políček - každá používaná dvojice políček je orámovaná stejnou barvou.
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.
- Možnost, jak vybírat správné dvojice políček: začínám políčkem, které je nejníž v příslušném sloupečku a políčkem, který je nejblíž v úhlopříčce směrem doprava (pro žluté políčko to jsou zelené rámečky) a dál postupuju (podle krásně jednoduchého návodu Vaška Brožka:), tak že lezu nahoru po žebříku (ve sloupečku) a sestupuju po schodech (v úhlopříčce).
Předměty
Literatura
Skripta Formální jazyky a automaty I
Slajdy k přednáškám IB102 na stránkách Jana Strejčka
Vypracoval
Didl - Dita Dlabolová
Stav: 100%, z mé strany hotovo a zkontrolováno.
Je potřeba ještě zapracovat poznámky od Jitky Pospíšilové.


Diskuze
Ahoj, problémy s hvězdičkou a symbolem pro krok výpočtu se dají vyřešit :) Jen musíš matematické vzorce uzavírat do tagů <math></math> a ne <m></m> jak to máš ty. Uvnitř tagů <math> ale musíš používat normální LaTeXovou syntax - koukal jsem, že tam máš poněkud odlišnou. Takže například symbol
nebude prosté Gamma ale \Gamma atd. Takže
napíšeš jako <math>\Gamma^{\ast}</math> a symbol pro krok výpočtu jako <math>\vdash</math>. Aspoň mě to fungovalo když jsem si to zkoušel na zdejším playgroundu. Myslím, že bude lepší, když si to upravíš sama - chvíli jsem to zkoušel, ale byla to pro mě dost chaotická práce, asi se v tom sama lépe vyznáš ;)
Díky moc:) já jsem to dělala podle toho, co je tady na playgroundu, protože latex je pro mě španělská vesnice :))
Každopádně jsem to teď zkoušela opravit a chová se to nějak divně… prostě se to odmítá zobrazovat, ale jen někde… bohužel se mi nepodařilo vysledovat proč… na playgroundu to funguje všechno :)
Ahoj, co jsem si zkousela ja, tak nejde kombinovat oba pluginy <m> a <math>, musis si vzbrat jen jeden…
Ahoj, prijde mi, ze v te syntakticke analyze zdola nahoru mas v teorii zasobnik PDA vpravo a v prikladu zase vlevo.
Já to mam akorát zmateně napsaný, protože nejdřív v teorii říkám, že vrchol je vpravo a pak, že dno je vlevo, takže je to obojí stejně, akorát prostě blbě řečený :) Všechno to předělám, aby to bylo stejně… Díky za připomínku
→ Jitka: díky, to mi nedošlo
Zatím to nechám, jak to je, snad časem.. :)
Ahoj,
chcem sa len opytat, myslite, ze je nutne poznat algoritmus C-Y-K? My na teoretickej informatike sme sa ho vobec neucili, nestacilo by len vediet analyzovat dane slovo pomocou zasobnikoveho automatu? (podla mna ano)
Já se jej asi taky učit nebudu, taky jsem ho na teoretické zahlédl jen ve skriptech. Podle mě stačí (aspoň pro teoretický) umět syntaktickou analýzu odzvrchu dolu a odspodu nahoru :)
Ahoj,
je zobrazení z definičního oboru do
.
.
nevíte někdo jaký je rozdíl mezi oborem hodnot u přechodové funkce a u rozšířené přechodové funkce?
U přechodové funkce se píše, že
U rozšířené funkce se píše, že je to zobrazení z definičního oboru do konečných podmnožin množiny
Jsou ty obory hodnot stejné nebo se liší? Nějak to v tom nevidím. Dík
Cau,
rodil mezi tim neni zadny.
„P fin“ se slovne vyjadruje jako „mnozina vsech konecnych podmnozin“
Takze u prvniho pripadu to mas vyjadreno SYMBOLEM a u druheho pripadu to je SLOVNE.
→ Dušan: v zadání se na to neptají, takže to asi nebude požadovaný. Imho určitě neuškodí, když zmíníš, že nějaký deterministický algoritmus existuje. Ale nejspíš stejně čas na jeho předvádění nebo popis nezbyde .-)
→ Tomáš: je to to samé. Opsala jsem to, jak je to ve skriptech, žádné záměrné matení z mé strany
uff… tak jsem se pustila do prepisu tech matematickych symbolu do druheho pluginu… nekolikrat jsem kontrolovala s puvodni verzi, takze by se tam (snad) nemela vloudit zadna chybicka. Taky jsem si dovolila uz oddelat tu uvodni poznamku k wiki syntaxi.
→ Klobouk dolů, že ses do toho pustila :) Jasně, ta poznámka by tam teď byla už zbytečná…
Nahrál jsem obrázky sem na server, aby to bylo nezávislé na vnějším světě.
Nemela by byt soucasti odpovedi na otazku i Deterministicka analyza shorad dolu?
Vzdyt tam je…
Vyjadril jsem se trochu nepresne. Jiste ze algoritmus C-Y-K je deterministicky. Ve slajdech k predmetu Automaty a gramatiky je zminea Deterministicka syntakticka analyza shora dolu. Obsahuje pojmy jako FIRST, FOLLOW. Ta zde neni uvedena. Proc?
Tak jsem se tomu snažil podívat trochu na zub. Možná to někoho bude zajímat:
PDA je deterministický (DPDA) jestliže platí:
Řekneme, že jazyk L je nedeterministický bezkont. jazyk (DFCL), právě když existuje DPDA M, takový, že L = L(M).
!! Existují bezkontextové jazyky, které nejsou deterministickými bezkontextovými jazyky.
Řekl bych, že tedy není nutné znát Deterministickou syn. analýzu shora dolů. V zadání se totiž zmiňují bezkontextové jazyky a NE nedeterministické bezkontextové jazyky.
Ja mam jen takovou malou poznamku, pokud ji uznate za nepodstatnou tak ji kdyztak smazte.
Grafické znázornění obou automatů, žlutě vybarvené stavy jsou akceptující stavy automatu A, tlustě orámovaný stav je akceptující stav automatu A'
Tady bych spise napsal konfigurace misto slova stavy, jen kvuli zdrurazneni, ze nejde o zobrazeni stavu ze stavove jednotky a kvuli tomu, ze akceptujici stav u PDA akceptujiciho prazdnym zasobnikem nedava smysl.
Ja mam jen takovou malou poznamku, pokud ji uznate za nepodstatnou tak ji kdyztak smazte.
Grafické znázornění obou automatů, žlutě vybarvené stavy jsou akceptující stavy automatu A, tlustě orámovaný stav je akceptující stav automatu A'
Tady bych spise napsal konfigurace misto slova stavy, jen kvuli zdrurazneni, ze nejde o zobrazeni stavu ze stavove jednotky a kvuli tomu, ze akceptujici stav u PDA akceptujiciho prazdnym zasobnikem nedava smysl.
→Adam: Jasně, máš pravdu, jsou to konfigurace, né stavy, upsala jsem se…
Díky za připomínku…
→ Erik: Snad by tam být deterministická analýza neměla, v první verzi otázek byla (otázka zněla: „Syntaktická analýza (syntaktická analýza shora dolů a zdola nahoru, syntaktická analýza deterministických bezkontextových jazyků metodou shora dolů, konstrukce LL(1) analyzátoru, průběh analýzy daného slova)“), ale na informační schůzce jsme si stěžovali, že se letos se na IB102 neprobírala, proto byla tahle otázka sloučená s otázkou na zás. automaty, kde už se o deterministický analýze nemluví, takže pevně věřím, že ji nikdo po nás chtít nebude (den před začátkem státnic mi nic jinýho než víra nezbývá
)
detail na časť „Grafická reprezentace konfigurací“: ten hrubo orámovaný stav „r,eps.“ v ňom by mali akceptovať oba automaty A' aj A, alebo sa mýlim? ak neakceptuje poprosím aj vysvetlenie
Ja som sa tiez pri tom pozastavil a myslim, ze je to tak, ako pises ty. Nevidim dovod preco nie, kedze su pravidla rovnake pre obe „varianty“ PDA. Ale ze by si taku chybicku za 3 roky nikto nevsimol :/ ???