Formální gramatika
V informatice formální gramatika je způsob, jak popisovat formální jazyk, tj., soubor konečný-délka řetězce přes jistý konečný abeceda. Oni jsou jmenoval formální gramatiky analogií s představou o gramatice pro lidské jazyky.
Základní myšlenka za těmito gramatikami je že my tvoříme řetězce začátkem se zvláštním začátkovým symbolem a pak platíme pravidla, která ukážou jak jisté kombinace symbolů mohou být nahrazená ostatními kombinacemi symbolů. Například, převzít abecedu sestává z ' ' a ' b ', symbol začátku je ' S ' a my máme chápání pravidel:
- 1. S - > aSb
- 2. S - > ba
| Tabulka s obsahem |
| 1 formální definice 2 třídy gramatik 3 terminologie |
Formální gramatika G sestává z následujících komponent:
- Konečná množina N nonterminal symbolů.
- Konečná množina a Sigma; symbolů terminálu to je disjoint od N.
- Konečná množina P pravidel výroby kde pravidlo je formy
(kde * je Kleene hvězda a U je soubor odbor) s omezením to left-hand strana pravidla (tj., část nalevo - >) muset obsahovat přinejmenším jeden nonterminal symbol.
- Symbol S v N to je ukázáno jako symbol začátku.
jazyk formální gramatiky G = (N, a Sigma;, P, S), označil jak L(G), je definován jako všechny ty řetězce přes a Sigma; to může být tvořeno tím, že začíná symbolem začátku S a pak aplikovat výrobní pravidla v P až do už žádného nonterminal symboly jsou přítomné.
Zvážit to, například, gramatika G s N = {S, B}, a Sigma; = {, b, c}, P sestávat z následujících výrobních pravidel
- 1. S - > aBSc
- 2. S - > abc
- 3. Ba - > aB
- 4. Bb - > bb
- ' S ' \ - > (2) abc
- S - > (1) aBSc - > (2)Babcc - > (3) aaBbcc - > (4) aabbcc
- S - > (1) aBSc - > (1) aBaBScc - > (2) aBaBabccc - > (3) aaBBabccc - > (3) aaBaBbccc - > (3) aaaBBbccc - > (4) aaaBbbccc - > (4) aaabbbccc
To je jasné, že tato gramatika definuje jazyk {nbncn | n > 0} kden naznačuje řetězec n .
Formální gramatiky jsou totožné s Lindenmayer systémy (L-systémy), kromě toho L-systémy nejsou postižené rozdílem mezi terminály a nonterminals, L-systémy mají omezení objednávky ve kterém pravidla jsou aplikována, a L-systémy mohou běžet navždy, tvořit nekonečný sled řetězců. Typicky, každý řetězec je spojován se souborem bodů ve vesmíru a “výstupem” L-systém je definován být limit těch souborů.
Někteří omezili třídy gramatik a jazyky, které mohou jsou odvozeny s nimi, mít zvláštní jména a být studoval odděleně. Jeden obyčejný klasifikační systém pro gramatiky je Chomsky hierarchie, soubor čtyř druhů gramatik se vyvíjel Noam Chomsky v padesátých létech. Rozdíl mezi těmito typy je že oni mají zvýšeně přísnější výrobní pravidla a mohou vyjadřovat méně formálních jazyků. Dva důležité typy jsou kontext-uvolnit gramatiky a pravidelné gramatiky. Jazyky, které mohou být popisovány s takový gramatika být volán kontext-uvolnit jazyky a pravidelné jazyky, příslušně. Ačkoli hodně méně silný než neomezené gramatiky, který může ve skutečnosti vyjadřovat jakýkoli jazyk to může být přijato Turing strojem, tyto dva druhy gramatik jsou nejvíce často použité protože analyzátory pro je mohou být efektivně splnil. Například, pro kontext-volné gramatiky tam jsou známé algoritmy tvořit účinné LL analyzátory a LR analyzátory.
V kontext-uvolnit gramatiky, strana levé ruky pravidla výroby může jen být vytvořena jediným non-symbol terminálu. Jazyk vymezil nahoře je ne kontext-uvolnit jazyk, ale například jazyk {nbn | n > 0} je, jak to může být definováno gramatikou G2 s N= {S}, a Sigma; = {, b}, S odstartovat symbol a následující výrobní pravidla:
- 1. S - > aSb
- 2. S - > ab
Pravidelné gramatiky
V pravidelných gramatikách, strana levé ruky je znovu jen jediný non-symbol terminálu, ale nyní pravá strana je také omezená: To může být nic, nebo jediný terminálový symbol nebo jediný terminálový symbol následovali non-symbol terminálu, ale nic jinde (někdy širší definice je používána, jeden může dovolit delší řetězy terminálů nebo jediné non-terminály bez něčeho jiného zatímco ještě definuje stejnou třídu jazyků).
Jazyk vymezil nahoře je ne pravidelný, ale jazyk {nbm | m,n > 0} je, jak to může být definováno gramatikou G3 s N= {S,, B}, a Sigma; = {, b}, S odstartovat symbol a následující výrobní pravidla:
- 1. S - > aA
- 2. - > AA
- 3. - > BB
- 4. B - > bB
- 5. B - > a epsilon;
Terminologie
Přesto psát
- betonovat strom syntaxe, oddělit strom syntaxe
- levý původ, pravý původ
- dvojznačná gramatika