(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é.
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,
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 je zobrazení z definičního oboru do .
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 :/ ???