Vztah bezkontextových jazyků a ZA
description
Transcript of Vztah bezkontextových jazyků a ZA
Vztah bezkontextových jazyků a ZA
Věta: Nechť G=(N,T,P,S) je bezkontextová gramatika. Potom můžeme zkonstruovat zásobníkový automat M takový, že L(M)=L(G).
Důkaz: konstrukcí nedeterministického zásobníkového automatuZ gramatiky G sestrojíme automat M=({q},,,,q0,Z0,Ø)
tak, že =T, =NT, q0=q, Z0=S,
a přechodové zobrazení je definováno následovně:1) Je-li A pravidlo z P, potom (q,e,A) obsahuje (q, )2) (q,a,a) = {(q, e)} pro všechna aT
Vztah bezkontextových jazyků a ZA
Příklad: Nechť G=({E,T,F},{+,*,(,),a},P,E), kdeP = { E E+T | T
T T*F | F F (E) | a }
Odpovídající zásobníkový automat M takový, že L(M)=L(G):
M=({q},{+,*,(,),a}, {+,*,(,),a,E,T,F},,q,E,Ø), přičemž(q,e,E) = {(q, E+T), (q,T)}(q,e,T) = {(q, T*F), (q,F)}(q,e,F) = {(q, (E)), (q,a)}(q,x,x) = {(q, e)} pro všechna x{+,*,(,),a}
Vztah bezkontextových jazyků a ZA
Pro vstupní řetězec a+a*a může automat M vykonat následující posloupnost přechodů:(q, a+a*a ,E) (q, a+a*a ,E+T)
(q, a+a*a ,T+T) (q, a+a*a ,F+T) (q, a+a*a ,a+T) (q, +a*a ,+T) (q, a*a ,T) (q, a*a ,T*F) (q, a*a ,F*F) (q, a*a ,a*F) (q, *a ,*F) (q, a, F) (q, a , a) (q, e, e)
Jde o analogii odvození: E E+T T+T F+T a+T a+T*F ….. a+a*a
Vztah bezkontextových jazyků a ZA
Z ilustrativního příkladu je zřejmá činnost automatu
Nejprve se na zásobníku vytváří generuje příslušná větná forma a následně při kontrole se vstupním slovem dochází k mazání shodných terminálů ze zásobníku
Jedná se o takzvanou syntaktickou analýzu metodou shora-dolů, protože od startovacího symbolu gramatiky vytváříme postupně levou derivaci příslušného řetězce
Lze vytvořit i automat pracující metodou zdola-nahoru,kdy se z řetězce postupnými redukcemi dostáváme zpět k startovnímu symbolu
Vztah bezkontextových jazyků a ZA
Příklad: Vytvořte zásobníkový automat M ke gramatice
G=({S1, S2},{a, b, if, then, else}, P, S1)
P={S1 if b then S1 | if b then S2 else S1 | a
S2 if b then S2 else S2 | a }
takový, že L(M)= L(G).
Vztah bezkontextových jazyků a ZA
Věta: Nechť M=(Q,,,,q0,Z0,F) je zásobníkový automat. Potom existuje bezkontextová gramatika G=(N,T,P,S) taková, že L(M)=L(G).
Důkaz: konstrukcí bezkontextové gramatikyZ automatu sestrojujeme gramatiku tak, že množina
neterminálů využívá symbolů [qZp], kde q, pQ a Z a nový symbol S.Tím se částečně zakódují jednotlivé konfigurace (aktuální stav, stav zásobníku, nový stav) a podle tvaru přechodového
zobrazení a vstupního symbolu se vytvoří pravidla (viz např. Češka
2002)
Vztah bezkontextových jazyků a ZA
Shrnutí:
Tvrzení
L je jazyk generovaný bezkontextovou gramatikouL je jazyk přijímaný zásobníkovým automatem
(koncovým stavem)L je jazyk přijímaný zásobníkovým automatem
prostřednictvím vyprázdnění zásobníku
jsou vzájemně ekvivalentní.
Vlastnosti bezkontextových jazyků
Pumping lemma pro bezkontextové jazyky
Věta: Pro každý bezkontextový jazyk L existují takové konstanty p,qN, že libovolné slovo wL, pro které platí |w|>p, je možné vyjádřit ve tvaru
w=x1y1v y2x2 ,
kde1. |y1v y2|q
2. y1y2e
3. x1y1iv y2
ix2 L pro každé i0.
Vlastnosti bezkontextových jazyků
Nástin důkazu:Pokud je v odpovídající gramatice G n neterminálů, zvolíme konstanty p=2n a q=2n+1
Potom nejdelší cesta v příslušném derivačním stromu obsahuje alespoň n+2 vrcholů.Jelikož poslední symbol je terminál, bude tam alespoň n+1 neterminálů => nejméně jeden se zde vyskytuje 2xVyjádřeno pomocí odvození:
S * x1Ax2 + x1y1A y2x2 + x1y1v y2x2
to ale znamená, že v gramatice G lze provést i derivace S * x1y1
iv y2ix2 pro každé i0
Vlastnosti bezkontextových jazyků
Grafické znázornění důkazu:
x1 y1 v y2 x2
A
A
A
S
Vlastnosti bezkontextových jazyků
Grafické znázornění důkazu:
x1 y1 y2 x2
y1 v y2
A
A
A
S
A
Pumping lemma - využití
Jde o analogickou větu k pumping lemmatu pro regulární jazyky
Analogické je i využití – k důkazu, že určitý jazyk není bezkontextový.
Tvrzení: Jazyk L = {aibici |i1} není bezkontextový.
Důkaz:Pro důkaz sporem předpokládejme,že zadaný jazyk je bezkontextový.
Pumping lemma - využití
Potom dle pumping lemmatu musí existovat přirozená čísla p, q taková, že pro každé slovo w jazyka L, pro které platí |w|>p, je možné toto slovo vyjádřit ve tvaru
w=x1y1v y2x2 , kde
1. |y1v y2|q
2. y1y2e
3. x1y1iv y2
ix2 L pro každé i0.
Zvolíme-li k>p/3, potom slovo akbkck má dostatečnou délku a lze jej napsat ve výše uvedeném tvaru. Jelikož y1y2e, alespoň jedno yi je neprázdné a obsahuje nejméně jedno písmenko.
Pumping lemma - využití
Pokud neprázdné yi obsahuje různá písmenka, bude při iteraci docházet k porušování pořadí písmen ve slově x1y1
ivy2ix2 a výsledné slovo nebude patřit do L.
Odtud je zřejmé, že neprázdné yi může obsahovat tedy pouze jediné písmenko či více písmen stejného typu.
Potom ovšem při iteraci bude růst počet těchto písmen ve slově x1y1
ivy2ix2 (respektive může růst i počet dvou
různých písmen za předpokladu,že obě slova yi jsou neprázdná) a výsledné slovo opět nebude patřit do L.
Tím dostáváme spor s předpokladem, že L je bezkontextový.
Vlastnosti bezkontextových jazyků
Věta: Nechť L1 a L2 jsou bezkontextové jazyky. Potom
L1 L2 je také bezkontextový jazyk.
Důkaz:Nechť G1 = (N1,T,P1,S1) a nechť G2 = (N2,T,P2,S2).
Lze předpokládat (nebo přejmenováním zajistit) N1 N2=Ø
Potom lze velmi jednoduše sestrojit gramatiku G=(N,T,P,S) takovou,že N = N1 N2 {S}, kde S je nový symbol (SN1 a SN2)
a P = P1 P2 {SS1, SS2}
Vlastnosti bezkontextových jazyků
Věta: Třída bezkontextových jazyků není uzavřena vůči operaci průnik.
Důkaz:Pro důkaz sporem předpokládejme uzavřenost na průnik. Nechť L1 = {aibjck |i,j,k0, i=j}
a nechť L2 = {aibjck |i,j,k0, j=k}.
Potom L1 L2 = {aibici |i0}
by byl také bezkontextový jazyk, čímž se dostáváme do sporu, protože tento jazyk bezkontextový není.
Deterministické bezkontextové jazyky
V předcházející části jsme ukázali, že ke každé bezkontextové gramatice lze sestrojit zásobníkový automat, který daný jazyk přijímá.
Takový automat lze považovat za syntaktický analyzátor příslušného jazyka.
Problémem je, že takto zkonstruovaný analyzátor je obecně nedeterministický a jeho praktické využití je tedy omezené.
Z hlediska praxe jsou důležité tzv. deterministické bezkontextové jazyky, které lze analyzovat deterministickými syntaktickými analyzátory.
Deterministický zásobníkový automat
DEF: Deterministický zásobníkový automat M je sedmice M=(Q,,,,q0,Z0,F), kde
Q je konečná množina vnitřních stavů automatu je konečná množina vstupních symbolů je konečná množina zásobníkových symbolů je přechodová funkce : Qx({e})x Qx* taková, že buď pro každé a obsahuje (q,a,Z) nejvýše jeden prvek a (q,e,Z)=Ø,
nebo (q,a,Z)=Ø pro všechna a a (q,e,Z) obsahuje nejvýše jeden prvek
q0 je počáteční stav automatu (q0Q)
Z0 je počáteční zásobníkový symbol (Z0)
F je množina koncových stavů (FQ)
Deterministický zásobníkový automat
Poznámka: Pokud uvažujeme deterministický zásobníkový automat, můžeme namísto (q,a,Z)={(p,W)} psát pouze (q,a,Z)=(p,W)
Poznámka: Na rozdíl od konečných automatů, kde lze dokázat,že nedeterminismus nerozšiřuje schopnosti automatu rozpoznávat širší třídu jazyků, v případě zásobníkových automatů platí, že ne každý jazyk přijímaný zásobníkovým automatem může být přijímán deterministickým zásobníkovým automatem.
Obecný algoritmus převodu nedeterministického zásobníkového automatu na deterministický neexistuje!!
Deterministické bezkontextové jazyky
DEF: Jazyk L se nazývá deterministický bezkontextový jazyk, jestliže existuje deterministický zásobníkový automat, který jazyk L přijímá.
Tvrzení: Třída deterministických bezkontextových jazyků (DBJ) je vlastní podtřídou jazyků bezkontextových.
0 1 2 DBJ3
Deterministické bezkontextové jazyky
Příklad: Navrhněte deterministický zásobníkový automat přijímající jazyk L={wcwR| w{a,b}+}.
Řešení: ukládej postupně symboly na zásobník a po přečtení středového symbolu c porovnávej vstupní symboly se symboly postupně umazávanými ze zásobníku
M=({q0,q1,q2}, {a,b,c}, {Z,a,b}, , q0, Z, {q2})
(q0,X,Y)= (qo,XZ)pro všechna X{a,b} a Y{Z,a,b}
(q0,c,Y)= (q1,Y) pro všechna Y{a,b}
(q1,X,X)= (q1,e) pro všechna X{a,b}
(q1,e,Z)= (q2,e)
Deterministické bezkontextové jazyky
Shrnutí: Deterministické bezkontextové jazyky tvoří sice vlastní podmnožinu všech bezkontextových jazyků, ale na straně druhé je jejich menší obecnost výhodou z hlediska implementace procesu syntaktické analýzy.
1.Odpovídající syntaktický analyzátor je efektivní (pracuje v čase omezeném lineárně a lineárně omezenou pamětí)
2.Syntaktická analýza je realizována jednoduchým algoritmem pracujícím nad určitými tabulkami, které se vytvoří na základě znalosti gramatiky
3.Jelikož pracuje bez návratů, usnadňuje se lokalizace syntaktických chyb
Závěrečné opakování
Příklad 1: Navrhněte automat sledující vstupy a výstupy z budovy, který kontroluje, zda v budově nikdo nezůstal.
Příklad 2: Napište gramatiku generující příslušný jazyk.
Příklad 3: Sestrojte k této gramatice ekvivalentní automat (syntaktický analyzátor) a porovnejte s výsledkem získaným v příkladu výše.
Příklad 4: Navrhněte automat přijímající jazyk L={w| w{0,1}+, w obsahuje právě o dvě 0 více než 1}
Lze výše uvedené automaty navrhnout jako deterministické zásobníkové automaty?