01 Gramatika
# Gramatika
- Čtveřice $G = (N, \Sigma, P, S)$, kde:
- $N$ - konečná množina neterminálů ^a5e0fd
- $\Sigma$ též $T$ - konečná množina terminálů ^7dbe37
- $P$ - množina přepisovacích pravidel
- $S$ - počáteční symbol (neterminál) gramatiky (též větný/startovací symbol)
- Je to formalismus pro generování jazyka
Pozor! $G$ je uspořádaná čtveřice $(\space)$, není to množina ${\space}$ !
Cílem gramatiky je, aby generovala nějaký jazyk
Lze zapsat také:
- Výčtem: $L_1 = {ab, ac, cb}$
- Matematicky: $L_2 = {a^n b^n : n \ge 0} = {ab, aabb, aaabbb, aaaabbbb, \dots}$
Jedné gramatice je vždy přiřazen pouze jeden jazyk, ale jeden jazyk může mít nekonečně mnoho (ekvivalentních) gramatik.
# Příklad gramatiky
Gramatika $G_{1}= ({A,S}, {0,1}, P, S)$ kde $P:$
- $S \rightarrow 0A$
- $A \rightarrow 1A$
- $A \rightarrow 0$
# Definice pojmů
# Derivace
Postup, při kterém se na řetězec uplatní konečný počet (žádné, jedno nebo více) přepsání
Posloupnost “přepisů” (větných forem) dle pravidel
$\alpha \Rightarrow^{k} \beta\enspace$ = Derivace řetězce $\beta$ z řetězce $\alpha$, která má délku $k$ v gramatice (tj. existuje posloupnost řetězců) $\Rightarrow^{+}\enspace$ = Tranzitivní uzávěr (derivuje po nenulovém počtu kroků) $\Rightarrow^{*}\enspace$ = Tranzitivní a reflexivní uzávěr (derivuje po libovolném počtu kroků)
Přímá derivace - pouze 1 krok derivace
Může být levá či pravá či jiná derivace
# Větná forma
- Řetězec nazveme větnou formou v gramatice $G$, jestliže $S\Rightarrow^{}\alpha, \alpha \in (N \cup \Sigma)^$ (tedy ze startovního symbolu $S$ se lze přepsat do takového řetězce $\alpha$, který je tvořen libovolným počtem symbolů terminálů i neterminálů)
- Větná forma v $G$, která neobsahuje žádné $N$ symboly se nazývá věta generovaná gramatikou $G$ ^veta
# Jazyk generovaný gramatikou
- $L(G)$ = jazyk generovaný gramatikou $G$
- Je to množina všech vět generovaných gramatikou $G$
Poznámka I prázdný řetězec $\varepsilon$ je věta generovaná gramatikou $G$, pokud $\varepsilon \in L(G)$
# Ekvivalence gramatik
- Gramatiky $G_1$ a $G_2$ jsou ekvivalentní, když generují stejný jazyk
- tedy $L(G_{1)}= L(G_2)$