Formální jazyky II

Editovat
Note

Bezkontextové jazyky a jejich reprezentace. Varianty zásobníkových automatů (metody akceptování, determinismus a nedeterminismus, rozšířené zásobníkové automaty). Nedeterministická syntaktická analýza. Uzávěrové vlastnosti bezkontextových jazyků.

IB102/IB005

Bezkontextové jazyky

Bezkontextové jazyky jsou generovány bezkontextovými gramatikami.

Bezkontextová gramatika (CFG)

Gramatika s pravidly tvaru , kde je neterminál a je řetězec terminálů a neterminálů nenulové délky. Výjimkou je , pokud se počáteční neterminál nevyskytuje na pravé straně žádného pravidla.

Nenormovaný neterminál

Nelze se z nich dostat na řetěz terminálů. Neexistuje derivace , pro nějaké .

Nedosažitelné symbol

Nelze se do něj dostat z . Neexistuje derivace pro nějaká .

Nepoužitelný symbol

Neexistuje derivace pro nějaká .

Redukovaná CFG

Neobsahuje nenormované neterminály ani nedosažitelné symboly.

CFG -pravidel

Neobsahuje žádné -pravidlo, nebo obsahuje právě pravidlo a se nevyskytuje na pravé straně žádného pravidla.

Jednoduché pravidlo

, kde .

Necyklická gramatika

Neexistuje neterminál , který by se po nenulovém počtu kroků přepsal sám na sebe .

Vlastní CFG

Je necyklická CFG bez nepoužitelných symbolů a bez -pravidel. Ke každému CFL existuje vlastní CFG.

Chomského normální forma

CFG je v Chomského normální formě, právě když je bez -pravidel a každé pravidlo je v jednom z tvarů:

  • , kde

  • , kde

Levorekurzivní neterminál

Neterminál je levorekurzivní, pokud existuje derivace .

Greibachové normální forma

CFG je v Greibachové normální formě, právě když je bez -pravidel a každé pravidlo je v jednom z tvarů:

  • , kde

Zásobníkový automat (PDA)

Šestice , kde

  • je neprázdná konečná množina stavů,

  • je konečná vstupní abeceda,

  • je konečná zásobníková abeceda,

  • je parciální přechodová funkce,

  • je počáteční stav,

  • je počáteční symbol na zásobníku,

  • je množina akceptujících stavů.

Note
značí množinu všech konečných podmnožin .
Konfigurace

Stav PDA. .

Krok výpočtu

je tranzitivní uzávěr nad .

Jazyk akceptovaný konvovým stavem

Jazyk akceptovaný prázdným zásobníkem

Deterministický zásobníkový automat (DPDA)

Zásobnikový automat je deterministický, pokud platí:

  • Pro všechna a platí, že kdykoliv , pak pro všechna .

    • (Když má stav přechod pod , pak tam není žádný jiný.)

  • Pro každé obsahuje nejvýše jeden prvek.

    • (Vždycky je maximálně jedna cesta, kam se dá při daném stavu a písmenech jít.)

Jazyk je deterministický bezkontextový, pokud existuje DPDA, který ho akceptuje koncovým stavem. Deterministické bezkontextové jazyky jsou podmnožinou bezkontextových jazyků.

Rozšířený zásobníkový automat

Šestice lišící se od PDA jen v typu :

  • je parciální přechodová funkce.

Note
Činí rozhodnutí ne na základě vrcholu zásobníku, ale na základě libovolné konečné horní části zásobníku.

Ke každému rozšířenému PDA existuje ekvivalentní PDA.

Krok výpočtu

Uzávěrové vlastnosti CFL

Operace Formulka Uzavřenost

Sjednocení

Průnik s regulárním jazykem

Zřetězení

Iterace (i pozitivní)

(i )

Průnik

Doplněk

Uzávěrové vlastnosti DCFL

Operace Formulka Uzavřenost

Doplňek

Průnik s regulárním jazykem

Průnik

Sjednocení

Pumping lemma pro bezkontextové jazyky

Nechť je bezkontextový jazyk. Pak existují (závisející na ) taková, že každé slovo lze psát ve tvaru , kde

  • (alespoň jedno ze slov je neprázdné),

  • a

  • pro všechna .

Nedeterministická syntaktická analýza

Generuje bezkontextová gramatika dané slovo?

Cílem syntaktické analýzy je vybudovat strom derivací (aplikací pravidel gramatiky), které se musely stát, aby analyzované slovo v gramatice vzniklo.

Shora dolů

Od počátečního neterminálu dolů přes levé derivace (rozvíjíme vždy nejlevější neterminál).

  1. Mějme dvojici , kde je analyzované slovo.

  2. Pokud prvky dvojice začínají stejným terminálem, odstraníme ho u obou

  3. Pokud druhý prvek začíná neterminálem, zkus ho rozvinout podle nějakého jeho pravidla.

  4. Pokud prvky dvojice začínájí různými neterminály, tak tudy cesta nevede.

  5. Pokud dvojice je , tak je slovo generováno danou gramatikou.

Zdola nahoru

Od analyzovaného slova až k počátečnímu neterminálu pomocí rozšířeného PDA.

  1. Mějme trojici , kde a je nově přidaný počáteční symbol na zásobníku.

  2. Postupně načítám písmena zleva a přidávám je zprava do zásobníku (za , protože tady píšeme vrchol vlevo).

  3. Když můžu, přepíšu symboly vpravo od na nějaký neterminál (v takovém případě čtu ).

  4. Snažím se vyprázdnit zásobník (dostat se do akceptujícího stavu a načíst celé slovo).

Algoritmus CYK (Cock-Younger-Kasami)

Deterministický algoritmus založený na analýze zdola nahoru, který má složitost .