Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
KAPITOLA 2. JAZYKY, GRAMATIKY A JEJICH KLASIFIKACE 10<br />
Definice 2.7 Nechť Σ je abeceda. Označme symbolem Σ ∗ množinu všech řetězců<br />
nad abecedou Σ včetně řetězce prázdného, symbolem Σ + množinu všech řetězců<br />
nad Σ vyjma řetězce prázdného, tj. Σ ∗ = Σ + ∪ {ɛ}. Množinu L, pro níž platí<br />
L ⊆ Σ ∗ (případně L ⊆ Σ + , pokud ɛ /∈ L), nazýváme jazykem L nad abecedou<br />
Σ. Jazykem tedy může být libovolná podmnožina řetězců nad danou abecedou.<br />
Řetězec x, x ∈ L, nazýváme větou (také někdy slovem) jazyka L.<br />
Příklad 2.6 Nechť Σ je abeceda. Potenční množina 2 Σ∗ reprezentuje všechny<br />
možné jazyky nad abecedou Σ.<br />
Nechť jazyky L 1 a L 2 jsou definovány nad binární abecedou, tj. L 1 , L 2 ⊆<br />
{0, 1} ∗ , takto:<br />
L 1 = {0 n 1 n | n ≥ 0} tj.<br />
L 1 = {ɛ, 01, 0011, 000111, . . . }<br />
{<br />
L 2 = xx R | x ∈ {0, 1} +} tj.<br />
L 2 = {00, 11, 0000, 0110, 1001, 1111, . . . }<br />
Příklad 2.7 Uvažujeme abecedu programovacího jazyka Pascal. Jazyk Pascal<br />
je nekonečná množina řetězců (programů) nad jeho abecedou, které lze odvodit<br />
z grafů syntaxe jazyka Pascal (viz. [6]). Např. řetězec<br />
program P; begin end.<br />
je větou jazyka Pascal (přestože nepopisuje žádnou akci), kdežto řetězec<br />
procedure S; begin a := a mod b end<br />
nepatří do jazyka Pascal, protože reprezentuje pouze úsek možného programu<br />
(podřetězec nějaké věty).<br />
Povšimněme si nyní operací, které lze definovat nad jazyky. Tyto operace lze<br />
rozdělit do dvou skupin. Jednu skupinu představují obvyklé množinové operace<br />
plynoucí ze skutečnosti, že jazyk je množina. Má tedy smysl mluvit o sjednocení,<br />
průniku, rozdílu a komplementu jazyků. Je-li např. L 1 jazyk nad abecedou Σ, pak<br />
jeho komplement (doplněk) L 2 je jazyk, jenž je dán rozdílem L 2 = Σ ∗ \ L 1 .<br />
Druhá skupina operací respektuje specifikum množin tvořících jazyky, tj. skutečnost,<br />
že jejich prvky jsou řetězce. Z této skupiny definujeme operaci součinu a iterace<br />
jazyků.<br />
Definice 2.8 Nechť L 1 je jazyk nad abecedou Σ 1 , L 2 jazyk nad abecedou Σ 2 .<br />
Součinem (konkatenací) jazyků L 1 a L 2 je jazyk L 1 · L 2 nad abecedou Σ 1 ∪ Σ 2 ,<br />
jenž je definován takto:<br />
L 1 · L 2 = {xy | x ∈ L 1 , y ∈ L 2 }<br />
Operace součin jazyků je definována prostřednictvím konkatenace řetězců a<br />
má stejné vlastnosti jako konkatenace řetězců – je asociativní a nekomutativní.<br />
Příklad 2.8 Nechť:<br />
P = {A, B, . . . , Z, a, b, . . . , z},<br />
C = {0, 1, . . . , 9} jsou abecedy<br />
L 1 = P,<br />
L 2 = (P ∪ C) ∗ jsou jazyky