10.02.2019 Views

opora

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!