Bezkontextová gramatika: Porovnání verzí
Smazaný obsah Přidaný obsah
m Robot: opravy kategorií |
m WP:WCW: opravy odrážek,… |
||
Řádek 1:
V [[lingvistika|lingvistice]] a [[informatika|informatice]] označuje pojem '''bezkontextová gramatika''' ('''CFG''') [[formální gramatika|formální gramatiku]], ve které mají všechna přepisovací pravidla tvar
: A → β
kde A je neterminál a β je řetězec terminálů a/nebo neterminálů. Název „bezkontextová“ vychází ze skutečnosti, že neterminál se může přepsat na β bez ohledu na okolní [[kontext]]. Jazyky generované bezkontextovými gramatikami se nazývají [[bezkontextový jazyk|bezkontextové]]. Bezkontextová gramatika je speciálním případem [[kontextová gramatika|gramatiky kontextové]] (kontext je prázdný).
Řádek 10:
Bezkontextová gramatika G, může být chápána jako čtveřice <math>G = (\Pi\,, \Sigma\,, P\,, S\,)</math>, kde
* Π je konečná množina neterminálů,
* Σ je konečná množina terminálů, kde průnik množin Π∩Σ = ø
* S je počáteční proměnná, která patří do množiny Π neterminálů,
* P je konečná množina přepisovacích pravidel typu A → β, kde
** A je neterminál, A ∈ Π
** β je řetězec složený z terminálů a neterminálů, β ∈ (Π ∪ Σ)*.
Řádek 31:
Jednoduchá bezkontextová gramatika je dána přepisovacím pravidlem:
: S → aSb | ab (stejně jako A → β)
kde znak | separuje více možností řetězců (w) z terminálů a neterminálů, které znamenají to samé jako zápis:
: S → aSb
: S → ab
kde a, b označuje terminály, S je startovní symbol (neterminál). Tato gramatika generuje jazyk a^n b^n, kde n>=1. Tento jazyk není regulární. Speciální symbol ε označuje prázdný řetězec. Pokud změníme pravidlo na S → aSb | ε získáme gramatiku, která generuje jazyk a^n b^n, kde n>=0. Tato přepisovací pravidlo obsahuje i přepis na prázdný řetězec, který původní gramatika neobsahuje.
Řádek 43:
Tato bezkontextová gramatika generuje aritmetické výrazy s proměnnými ''x'', ''y'', ''z'':
: S → x | y | z | S + S | S - S | S * S | S/S | (S)
S touto gramatikou dokážeme například generovat řetězec "( x + y ) * x - z * y / ( x + x )". Tento řetězec získáme následujícím postupem. Startovací symbol S přepíšeme podle páté transformace [S → S - S]. Následně se S na pravé straně přepíší podle šesté a sedmé transformace na řetězec "S * S - S / S", pak použijeme poslední transformaci s uzávorkováním, tak získáme "( S ) * S - S / ( S )". Poté uzávorkovaná S přepíšeme podle transformace [S → S + S]. Takto dostanem řetězec neterminálů "( S + S ) * S - S * S / ( S + S )", z kterého výsledný řetězec "( x + y ) * x - z * y / ( x + x )" získáme převedením neterminálů S na terminály x, y, z.
Řádek 50:
Bezkontextová gramatika, která se skládá ze slov obsahující znaky a, b v různém počtu a pořadí.
: S → U | V
: U → TaU | TaT
: V → TbV | TbT
: T → aTbT | bTaT | ε
Neterminál T dovoluje generovat všechny řetězce se stejným počtem áček a béček. Neterminál U generuje řetězec s větším počtem áček než béček. Poslední neterminál V generuje řetězec s větším počtem béček než áček.
Řádek 61:
Dalším příkladem je bezkontextová gramatika, která generuje jazyk {b^n, a^n, 2*b^n, kde a>=0, b>=0}. Toto není regulární jazyk, ale je bezkontextový a může být generován bezkontextovou gramatikou:
: S → bSbb | A
: A → aA | ε
=== Derivace a syntaktický strom ===<!-- This section is linked from [[LR parser]] -->
Řádek 78:
Pomocí derivace uložíme hierarchickou strukturu v řetězci, který je derivován. Jako příklad poslouží řetězec "1 + 1 + a", který je derivován podle levé derivace:
: S → S + S (1)
: → S + S + S (1)
: → 1 + S + S (2)
: → 1 + 1 + S (2)
: → 1 + 1 + a (3)
řetězcová struktura může vypadat následovně:
Řádek 102:
Tento strom se nazývá ''konkrétní syntaktický strom'' (nebo také [[abstraktní syntaktický strom]]) řetězce. V tomto případě levá a pravá derivace definuje stejný syntaktický strom. U tohoto řetězce můžeme pomocí levé derivace získat jinou stromovou strukturu a to záměnou prováděných přepisovacích pravidel:
: S → S + S (1)
: → 1 + S (2)
: → 1 + S + S (1)
: → 1 + 1 + S (2)
: → 1 + 1 + a (3)
ta definuje následný syntaktický strom:
Řádek 133:
== Externí odkazy ==
* [http://www.kubaz.cz/mathpedie/informatika/ Teoretická informatika]
* [http://www1.osu.cz/home/habibal/publ/rabj2.pdf Regulární a bezkontextové jazyky II.]
|