Bezkontextová gramatika: Porovnání verzí

Smazaný obsah Přidaný obsah
ArthurBot (diskuse | příspěvky)
m Robot: opravy kategorií
DaBlerBot (diskuse | příspěvky)
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ů, <br />
* Σ je konečná množina terminálů, kde průnik množin Π∩Σ = ø <br />
* S je počáteční proměnná, která patří do množiny Π neterminálů, <br />
* P je konečná množina přepisovacích pravidel typu A &rarr; β, kde <br />
** A je neterminál, A ∈ Π <br />
** β je řetězec složený z terminálů a neterminálů, β ∈ (Π ∪ Σ)*.
 
Řádek 31:
Jednoduchá bezkontextová gramatika je dána přepisovacím pravidlem:
 
: S &rarr; 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 &rarr; aSb<br />
: S &rarr; 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 &rarr; 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 &rarr; U | V <br />
: U &rarr; TaU | TaT <br />
: V &rarr; TbV | TbT <br />
: T &rarr; aTbT | bTaT | ε <br />
 
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 &rarr; bSbb | A <br />
: A &rarr; aA | ε <br />
 
=== 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 &rarr; S + S (1)
: &nbsp;&nbsp; &rarr; S + S + S (1)
: &nbsp;&nbsp; &rarr; 1 + S + S (2)
: &nbsp;&nbsp; &rarr; 1 + 1 + S (2)
: &nbsp;&nbsp; &rarr; 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 &rarr; S + S (1)
: &nbsp;&nbsp; &rarr; 1 + S (2)
: &nbsp;&nbsp; &rarr; 1 + S + S (1)
: &nbsp;&nbsp; &rarr; 1 + 1 + S (2)
: &nbsp;&nbsp; &rarr; 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.]