opora

frantisek.plesicek
from frantisek.plesicek More from this publisher
10.02.2019 Views

KAPITOLA 2. JAZYKY, GRAMATIKY A JEJICH KLASIFIKACE 13 6. řetězec uzavřený v úhlových závorkách 〈, 〉 reprezentuje nonterminální symbol (konvence používaná v BNF). Příklad 2.11 Slovník gramatiky pro definici jazyka identifikátorů může mít tvar: Obsahuje tedy 65 symbolů. N = {〈identifikátor〉, 〈písmeno〉, 〈číslice〉} Σ = {A, B, . . . , Z, a, b, . . . , z, 0, 1, . . . , 9} Gramatika představuje generativní systém, ve kterém lze z jistého vyznačeného nonterminálu generovat, aplikací tzv. přepisovacích pravidel, řetězce tvořené neterminálními a terminálními symboly, které nazýváme větnými formami. Větné formy, které jsou tvořeny pouze terminálními symboly, reprezentují věty gramatikou definovaného jazyka. Může se přitom samozřejmě stát, že gramatika negeneruje žádnou větu a reprezentuje pak prázdný jazyk. Jádrem gramatiky je tak konečná množina P přepisovacích pravidel (nazývaných také produkce). Každé přepisovací pravidlo má tvar uspořádané dvojice (α, β) řetězců; stanovuje možnou substitucí řetězce β namísto řetězce α, který se vyskytuje jako podřetězec generovaného řetězce. Řetězec α obsahuje alespoň jeden nonterminální symbol, řetězec β je prvek množiny (N ∪ Σ) ∗ . Formálně vyjádřeno, množina P přepisovacích pravidel je podmnožinou kartézského součinu: P ⊆ (N ∪ Σ) ∗ N(N ∪ Σ) ∗ × (N ∪ Σ) ∗ Příklad 2.12 Uvažujme, že např. dvojice (AB, CDE) je jedním z přepisovacích pravidel gramatiky a předpokládejme, že řetězec x = F GABH byl získán aplikací jiných pravidel gramatiky. Aplikujeme-li nyní na řetězec x pravidlo (AB, CDE), obdržíme řetězec y = F GCDEH (nahrazením podřetězce AB řetězce x řetězcem CDE). Říkáme, že jsme řetězec y odvodili (derivovali) z řetězce x podle přepisovacího pravidla (AB, CDE). Přistoupíme nyní k úplné definici gramatiky a formální definici pojmů, jejichž prostřednictvím lze definovat jazyk generovaný gramatikou. Definice 2.11 Gramatika G je čtveřice G = (N, Σ, P, S), kde • N je konečná množina nonterminálních symbolů • Σ je konečná množina terminálních symbolů, N ∩ Σ = ∅ • P je konečná podmnožina kartézského součinu (N ∪Σ) ∗ N(N ∪Σ) ∗ ×(N ∪Σ) ∗ , • S ∈ N je výchozí (také počáteční) symbol gramatiky Prvek (α, β) množiny P nazýváme přepisovacím pravidlem (krátce pravidlem) a budeme jej zapisovat ve tvaru α → β. Řetězec α resp. β nazýváme levou resp. pravou stranou přepisovacího pravidla. Příklad 2.13 G = ({A, S}, {0, 1}, P, S) P = {S → 0A1, 0A → 00A1, A → ɛ} Příklad 2.14 Gramatika definující jazyk identifikátorů může mít tvar:

KAPITOLA 2. JAZYKY, GRAMATIKY A JEJICH KLASIFIKACE 14 G = (N, Σ, P, S), kde N = {〈identifikátor〉, 〈písmeno〉, 〈číslice〉} Σ = {A, B, . . . , Z, a, b, . . . , z, 0, 1, . . . , 9} P = {〈identifikátor〉 → 〈písmeno〉, 〈identifikátor〉 → 〈identifikátor〉〈písmeno〉, 〈identifikátor〉 → 〈identifikátor〉〈číslice〉, 〈písmeno〉 → A, . 〈písmeno〉 → Z, 〈číslice〉 → 0, . 〈číslice〉 → 9} S = 〈identifikátor〉 Množina P obsahuje 65 přepisovacích pravidel. Konvence 2.4 Obsahuje-li množina pravidel P přepisovací pravidla tvaru α → β 1 , α → β 2 , . . . , α → β n , pak pro zkrácení lze použít zápisu α → β 1 | β 2 | . . . | β n . Definice 2.12 Nechť G = (N, Σ, P, S) je gramatika a nechť λ a µ jsou řetězce z (N ∪ Σ) ∗ . Mezi řetězci λ a µ platí binární relace ⇒ G , nazývaná přímá derivace, jestliže můžeme řetězce λ a µ vyjádřit ve tvaru λ = γαδ µ = γβδ kde γ a δ jsou libovolné řetězce z (N ∪ Σ) ∗ a α → β je nějaké přepisovací pravidlo z P . Platí-li mezi řetězci λ a µ relace přímé derivace, pak píšeme λ ⇒ G µ a říkáme, že řetězec µ lze přímo generovat z řetězce λ v gramatice G. Je-li z kontextu zřejmé, že jde o derivaci v gramatice G, pak nemusíme specifikaci gramatiky pod symbolem ⇒ uvádět. Příklad 2.15 Uvažujme gramatiku z příkladu 2.13 a řetězce λ = 000A111 a µ = 0000A1111. Položíme-li λ = }{{} 00 γ µ = 00 }{{} γ }{{} 0A α 00A1 } {{ } β }{{} 111 δ 111 }{{} δ vidíme, že platí 000A111 ⇒ 0000A1111, protože 0A → 00A1 je pravidlem v této gramatice. Příklad 2.16 Je-li α → β pravidlo v gramatice G, pak v této gramatice platí α ⇒ β, jak plyne z definice 2.12, položíme-li γ = δ = ɛ.

KAPITOLA 2. JAZYKY, GRAMATIKY A JEJICH KLASIFIKACE 14<br />

G = (N, Σ, P, S), kde<br />

N = {〈identifikátor〉, 〈písmeno〉, 〈číslice〉}<br />

Σ = {A, B, . . . , Z, a, b, . . . , z, 0, 1, . . . , 9}<br />

P = {〈identifikátor〉 → 〈písmeno〉,<br />

〈identifikátor〉 → 〈identifikátor〉〈písmeno〉,<br />

〈identifikátor〉 → 〈identifikátor〉〈číslice〉,<br />

〈písmeno〉 → A,<br />

.<br />

〈písmeno〉 → Z,<br />

〈číslice〉 → 0,<br />

.<br />

〈číslice〉 → 9}<br />

S = 〈identifikátor〉<br />

Množina P obsahuje 65 přepisovacích pravidel.<br />

Konvence 2.4 Obsahuje-li množina pravidel P přepisovací pravidla tvaru α →<br />

β 1 , α → β 2 , . . . , α → β n , pak pro zkrácení lze použít zápisu α → β 1 | β 2 | . . . | β n .<br />

Definice 2.12 Nechť G = (N, Σ, P, S) je gramatika a nechť λ a µ jsou řetězce<br />

z (N ∪ Σ) ∗ . Mezi řetězci λ a µ platí binární relace ⇒<br />

G<br />

, nazývaná přímá derivace,<br />

jestliže můžeme řetězce λ a µ vyjádřit ve tvaru<br />

λ = γαδ<br />

µ = γβδ<br />

kde γ a δ jsou libovolné řetězce z (N ∪ Σ) ∗ a α → β je nějaké přepisovací pravidlo<br />

z P .<br />

Platí-li mezi řetězci λ a µ relace přímé derivace, pak píšeme λ ⇒<br />

G<br />

µ a říkáme, že<br />

řetězec µ lze přímo generovat z řetězce λ v gramatice G. Je-li z kontextu zřejmé, že<br />

jde o derivaci v gramatice G, pak nemusíme specifikaci gramatiky pod symbolem<br />

⇒ uvádět.<br />

Příklad 2.15 Uvažujme gramatiku z příkladu 2.13 a řetězce λ = 000A111 a<br />

µ = 0000A1111. Položíme-li<br />

λ =<br />

}{{}<br />

00<br />

γ<br />

µ = 00<br />

}{{}<br />

γ<br />

}{{}<br />

0A<br />

α<br />

00A1<br />

} {{ }<br />

β<br />

}{{}<br />

111<br />

δ<br />

111<br />

}{{}<br />

δ<br />

vidíme, že platí 000A111 ⇒ 0000A1111, protože 0A → 00A1 je pravidlem v této<br />

gramatice.<br />

Příklad 2.16 Je-li α → β pravidlo v gramatice G, pak v této gramatice platí<br />

α ⇒ β, jak plyne z definice 2.12, položíme-li γ = δ = ɛ.

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

Saved successfully!

Ooh no, something went wrong!