160 likes | 342 Views
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.
E N D
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. slovosled Tom 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čujesé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ány terminální symboly = prvotní symboly jazyka přepisovací pravidla = gramatická pravidla potřebná k tvorbě vět počá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í) symbol a 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,…, kzapíšeme jako1| 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)* aplatí 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í (AC2G aaAC ) B G AC G aAC G abC G ab1C G ab11C G ab111 (B6G 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 Gnazý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 pravidel • DEF: 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 AbB nebo Ab,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 2 3