- 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:
- Každý uzel má návěští, které je symbolem z
- Kořen má návětší
- Má-li vnitřní uzel návěští , pak
- Má-li uzel návěští a jeho všichni synové mají v uspořádání zleva doprava návěští , pak
- 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ř.
- nebo
- a též
- 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
- pro nějakou CFG
- (Lze vyjádřit pomocí bezkontextové gramatiky)
- pro nějaký PDA
- (Lze vyjádřit pomocí zásobníkového automatu akceptující pomocí koncového stavu)
- 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
Důkaz
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.
Důkaz
Uzavřenost na homomorfismu a inverzní homomorfismus
Třída všech bezkontextových jazyků je uzavřena vzhledem k substituci
Důkaz
Třída všech bezkontextových jazyků je uzavřena vůči homomorfismu a izomorfismu
Důkaz
Uzavřenost na reverz
Třída všech bezkontextových jazyků je uzavřena na reverz
Důkaz
- Nechť CFL generovaný gramatikou
- Sestrojíme gramatiku pro tak, že otočíme pravou stranu každého pravidla
- Např. Nechť má pravidla . Pak reverz jazyka má gramatiku
! 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
Navigace
Předchozí: Pumping lemma Následující: Zásobníkové automaty deterministické a nedeterministické Celý okruh: 1. Teoretické základy informatiky