formální jazyky a gramatiky
DESCRIPTION
Formální jazyky a gramatiky. Gramatika = generativní způsob určení jazyka Považujme nyní za základní symbol slovo , vyšší je věta . Struktura věty je definována určitými pravidly: pravidla věta. Formální jazyky a gramatiky. - PowerPoint PPT PresentationTRANSCRIPT
Formální jazyky a gramatiky
Gramatika = generativní způsob určení jazyka Považujme nyní za základní symbol slovo, vyšší je věta.Struktura věty je definována určitými pravidly:
pravidla
věta
Formální jazyky a gramatiky
Způsob zápisu gramatických pravidel:<definovaná jednotka> definice
Lomené závorky naznačují, že jednotku je nutné dále specifikovat pomocí dalších jednotek
Gramatická pravidla použitá k definici předchozí věty:<věta> <podmětná část> <přísudková část>
<podmětná část > <podstatné jméno><podstatné jméno > tom< přísudková část > <sloveso> <předmětná část>< sloveso > hraje<předmětná část> <podstatné jméno><podstatné jméno > hokej
Formální jazyky a gramatiky
Přestože se to zdá být snadné, formalizace přirozeného jazyka není vůbec jednoduchá
Tom hraje golf. – Golf hraje Tom. slovosledTom s Jirkou …. Jirka s Tomem … skloňováníTom má rád Evu. Eva má ráda Toma.
časováníI po překonání těchto obtíží budeme mít velký
problém, protože každá gramatika umožňuje generovat gramaticky správné věty (syntakticky správné, přípustné), ale nezaručuje sémantickou správnost
Hokej hraje hokej.Tom jí polévku. – Polévka jí Toma.
Gramatika
K definici gramatiky jsou potřebnéneterminální symboly = symboly, které musí být dále definoványterminální symboly = prvotní symboly jazykapřepisovací pravidla = gramatická pravidla potřebná k tvorbě větpočáteční symbol = neterminál, od něhož odvozování začíná
DEF: Gramatikou nazýváme čtveřici G=(N,T,P,S), kde N je konečná množina neterminálůT je konečná množina terminálů, přičemž NT=ØSN je počáteční (startovní, iniciační) symbola P je množina přepisovacích pravidel, která je konečnou podmnožinou množiny (NT)*N (NT)* x (NT)*
Gramatika
Poznámky k definici gramatiky: Zápis (NT)*N (NT)* x (NT)* znamená požadavek na alespoň
jeden neterminál na levé straně pravidla Konečnost množin je vyžadována proto,že nekonečné množiny
jednak nemají praktický smysl, nebo je lze zakódovat
Užitečné konvence (BNF – Backus-Naurova forma
/ALGOL/): Neterminály označujeme velkými latinskými písmeny Terminály označujeme malými latinskými písmeny Slova složená z neterminálů a terminálů označujeme malými
řeckými písmeny Přepisovací pravidla se stejnou levou stranou, tj. 1, 2, …,
k zapíšeme jako 1| 2| … | k
Příklady gramatik
Příklad 1: G = ({A}, {a, b}, P, A), přičemžP = { A aAb | e }
Příklad 2: G = ({A, B, C}, {a, b, 0, 1}, P, B), přičemžP = { B A | C A aA | bA | e C 0C | 1C | e }
Příklad 3: G = ({A, B, C}, {a, b, 0, 1}, P, B), přičemžP = { B AC A a | b | aA | bA C 0 | 1 | 0C | 1C }
Použití gramatiky
Základem generování vět jazyka jsou přepisovací pravidla
DEF: Buď G=(N, T, P, S) gramatika. Potom nad množinou (NT)* definujeme relaci derivace G následujícím způsobem: jestliže (NT)* a (NT)* , potom dané řetězce jsou v relaci G , tj. G , pokud v P existuje pravidlo .
Jestliže , (NT)* a platí G , potom říkáme, že
je možné v jednom kroku odvodit (derivovat) z (přímo odvodit).
Použití gramatiky
Příklad: G = ({A, B, C}, {a, b, 0, 1}, P, B), přičemžP = { B AC A a | b | aA | bA C 0 | 1 | 0C | 1C }
AC G aAC … přímé odvození (A aA)
AC G aAC G aaAC … postupné odvození
(AC 2G aaAC )
B G AC G aAC G abC G ab1C G ab11C G ab111
(B 6G ab111 )
G …… G ……. G ( *G )
Použití gramatiky
DEF: Nechť G=(N, T, P, S) je gramatika. Množinu řetězců (NT)* , které jsou odvoditelné z počátečního symbolu S, nazýváme množina větných forem.
Množina větných forem V je formálně definována jako V={| S *
G , (NT)* }
DEF: Nechť G=(N, T, P, S) je gramatika. Jazykem L(G) specifikovaným gramatikou G nazýváme množinu řetězců, T*, které jsou odvoditelné z počátečního symbolu S.
Formálně tedy:L(G)={| S *
G , T* }
Použití gramatiky
Poznámky k definici:Věty jazyka L(G) jsou složeny pouze z terminálů.
Pokud je z kontextu zřejmé, kterou gramatiku G při odvozování máme na mysli, stačí psát místo G
Platí vztah 1 jazyk má 1 gramatiku? Nikoliv – i různé gramatiky mohou mít stejné odvozovací možnosti.
DEF: Gramatiky G1 a G2 jsou ekvivalentní, pokud platí L(G1)=L(G2)
Příklad ekvivalentní gramatiky
Příklad: G1 = ({A, B, C}, {a, b,…,z}, P1, A),
P1 = { A B | AC
B a C a | b | …. | z }
G2 = ({D, E}, {a, b,…,z}, P2, D),
P2 = { D a | aE
E EE | a | b | …. | z }
L(G1) = ?, L(G2) = ?
L(G1) = L(G2) = {všechna slova začínající písmenem a}
Důsledky
Nezáleží tedy na druhu, tvaru či počtu přepisovacích pravidel, ale rozhodující jsou odvozovací možnosti.
Jelikož lze daný jazyk popsat vícero ekvivalentními gramatikami, je účelné gramatiky dále zkoumat nejen z hlediska toho, jaký jazyk popisují, ale i jakým způsobem ho popisují.
Vhodným omezením tvaru přepisovacích pravidel je možné gramatiky rozdělit do tříd a v návaznosti na to klasifikovat i příslušné jazyky.
Klasifikace gramatik
Noam Chomski – podle tvaru přepisovacích pravidelDEF: Nechť G=(N,T,P,S) je gramatika. Potom G je
gramatika typu O (neomezená), jestliže na přepisovací pravidla neklademe žádná omezení
gramatika typu 1 (kontextová), jestliže každé přepisovací pravidlo z P má tvar , kde (NT)* N (NT)*, (NT)+ a platí ||| |
gramatika typu 2 (bezkontextová), jestliže každé přepisovací pravidlo z P má tvar A , A N, (NT)*
gramatika typu 3 (regulární), jestliže každé přepisovací pravidlo z P má tvar A bB nebo
A b, kde AN, BN, bT
Doplnění prázdného slova
Někdy potřebujeme specifikovat jazyk obsahující prázdné slovo i pro kontextové a regulární gramatiky (výše uvedené definice by to vylučovaly)
Tradičně se reší přidáním nového počátečního symbolu S1 a dvou přepisovacích pravidel
S1 S, S1 e
V takovémto případě budeme i nadále mluvit o gramatice kontextové či regulární
Hierarchie gramatik
Z definice jednotlivých typů gramatik je automaticky zřejmé, že:
Každá regulární gramatika G je bezkontextová
Každá bezkontextová gramatika G je kontextová
Každá kontextová gramatika G je gramatikou bez omezení
Hierarchie jazyků
DEF: Jazyk nazýváme regulární, jestliže je možné jej generovat regulární gramatikou.
DEF: Jazyk nazýváme bezkontextový, jestliže je možné jej generovat bezkontextovou gramatikou.
DEF: Jazyk nazýváme kontextový, jestliže je možné jej generovat kontextovou gramatikou.
DEF: Jazyk nazýváme bez omezení, jestliže je možné jej generovat gramatikou bez omezení.
Zřetelně platí: 0 1
23