• Podobně jako regulární jazyky mají též CFG i značný praktický význam, například při definici syntaxe programovacích jazyků, formalizaci pojmu syntaktická analýza a návrhu překladu programovacích jazyků a dalších.

Bezkontextová gramatika

Definice bezkontextové gramatiky

  • Gramatika je bezkontextová (zkratka CFG z context-free grammar), pokud jsou všechna pravidla ve tvaru , kde , tedy neterminál generuje libovolný řetězec terminálů a neterminálů

Derivační stromy

  • Derivační strom je grafická reprezentace derivace nějakého řetězce v CFG

Definice derivačního stromu

  • Nechť je CFG. Strom nazveme derivačním stromem v , právě když platí tyto podmínky:
    1. Každý uzel má návěští, které je symbolem z
    2. Kořen má návětší
    3. Má-li vnitřní uzel návěští , pak
    4. Má-li uzel návěští a jeho všichni synové mají v uspořádání zleva doprava návěští , pak
    5. Má-li uzel návěští , pak je list a je jediným synem svého otce.
  • Výsledkem derivačního stromu nazveme slovo vzniklé zřetězením návěští listů v uspořádání zleva doprava.

Příklad

  • Nechť je gramatika s pravidly

pak derivační strom reprezentuje deset vzájemně ekvivalentních derivací, např.

  1. nebo
  2. a též
  3. a další
  • Všimněme si, že je levá, kdežto je pravá derivace.
  • CFG je víceznačná/nejednoznačná, pokud existuje řetězec , který je derivací alespoň dvou různých derivačních stromů (v opačném případě je jednoznačná)
  • Bezkontextový jazyk je jednoznačný, pokud existuje jednoznačná gramatika, která jej generuje (víceznačnost je vlastnost gramatiky, nikoliv jazyka který generuje)
  • Pro některé bezkontextové jazyky neexistuje jednoznačná gramatika, takový jazyk je dědičně víceznačný

Příklad

  • Gramatika s pravidly , která je ekvivalentní s gramatikou z příkladu výše. Je víceznačná, např. protože věta má dvě různé levé derivace a jim odpovídající dva různé derivační stromy:

Chomského normální forma (CNF)

  • Řekneme, že CFG je v Chomského normální formě, právě když je bez -pravidel a každé pravidlo z má jeden z těchto tvarů:
    • … neterminál generuje dva neterminály
    • … neterminál generuje jeden terminál
    • , pokud není na pravé straně žádného pravidla
  • Převod CFG se provádí pomocí 6 kroků (lze tam převést každá)

Greibachová normální forma

  • Řekneme, že CFG je v Greibachové normální formě, právě když je bez -pravidel a každé pravidlo z je tvaru

Bezkontextové jazyky

  • Jazyk, který je definovaný nějakou bezkontextovou gramatikou

Vyjádření bezkontextových jazyků

  • Nechť máme bezkontextový jazyk
    1. pro nějakou CFG
      • (Lze vyjádřit pomocí bezkontextové gramatiky)
    2. pro nějaký PDA
      • (Lze vyjádřit pomocí zásobníkového automatu akceptující pomocí koncového stavu)
    3. pro nějaký PDA
      • (Lze vyjádřit pomocí zásobníkového automatu akceptující pomocí prázdného zásobníku)

Přehled rozhodnutelných vlastností CFL

  • Řetězec patří do bezkontextového jazyka .
    • Algoritmus CYK
  • Bezkontextový jazyk je prázdný.
    • Umíme odstranit neterminály, které negenerují žádný terminální řetězec, jestliže je počáteční symbol jeden z nich, pak je bezkontextový jazyk prázdný; jinak ne
  • Bezkontextový jazyk je nekonečný.
    • Použij konstantu z pumping lemmatu.
    • Jestliže existuje řetězec v jazyku délky mezi a , pak je jazyk nekončený; jinak je konečný.

Uzávěrové vlastnosti bezkontextových jazyků

  • V níže uvedených důkazech lze použít jak bezkontextových gramatik, tak i zásobníkových automatů.

Uzavřenost na sjednocení, konkatenaci a Kleeneho uzávěr

  • Třída všech bezkontextových jazyků je uzavřena vzhledem k operaci sjednocení, zřetězení (konkatenace), iteraci (Kleeneho uzávěr) a pozitivní iteraci

Neuzavřenost na průnik a doplněk

  • Třída všech bezkontextových jazyků není uzavřena vzhledem k operaci průnik a doplněk.

Uzavřenost na homomorfismu a inverzní homomorfismus

  • Třída všech bezkontextových jazyků je uzavřena vzhledem k substituci

  • Třída všech bezkontextových jazyků je uzavřena vůči homomorfismu a izomorfismu

Uzavřenost na reverz

  • Třída všech bezkontextových jazyků je uzavřena na reverz


! Navíc

Deterministické bezkontextové jazyky

  • V řadě (i praktických) aplikací je třeba zjistit, zda daný jazyk je (a nebo není) DCFL.

  • K důkazu, že je DCFL stačí nalézt odpovídající DPDA. Obrácená situace, kdy chceme ukázat, že není DCFL, může být složitější. Pokud by nebyl ani CFL, můžeme použít pumping lemma, ale často může být CFL, ale ne DCFL. Jelikož není známo žádné pumping lemma, které by platilo specialně do DCFL, musíme se spolehnout jen na uzávěrové vlastnosti. Naštěstí DCFL jsou uzavřeny na některé operace, například vůči doplňku, na něž CFL obecně uzavřeny nejsou.

  • Třída DCFL není uzavřena vzhledem k operaci průniku.

  • Třída deterministických bezkontextových jazyků je uzavřena vůči doplňku.

  • Třída DCFL není uzavřena vzhledem ke sjednocení.

Příklad


Předchozí: Pumping lemma Následující: Zásobníkové automaty deterministické a nedeterministické Celý okruh: 1. Teoretické základy informatiky