Kontext-uvolnit gramatiku
V informatice, kontext-uvolnit gramatiku (CFG) je formální gramatika ve kterém každé pravidlo výroby je formy
- V -> w
Kontext-volné gramatiky jsou důležité, protože oni jsou silní dost popisovat syntax programovacích jazyků; ve skutečnosti, téměř všechny programovací jazyky jsou definovány přes kontext-uvolnit gramatiky. Na druhé straně, kontext-volné gramatiky jsou jednoduché dost dovolit stavbu účinný rozebrat algoritmy, které pro daný řetězec stanoví zda a jak to může být produkováno z gramatiky. Viďte LR analyzátor a LL analyzátor pro příklady.
BNF (Backus-Naur se tvoří) je často zvyklý na výslovný kontext-uvolnit gramatiky.
| Tabulka s obsahem |
| 1 příklady 2 původy a stromy syntaxe 3 normální formy 4 vlastnosti kontextu-uvolnit jazyky |
Jednoduchý kontext-volná gramatika je
- S -> aSb | a epsilon;
který není pravidelný.
Tady je kontext-uvolnit gramatiku pro syntactically správné infixové algebraické výrazy v proměnných x, y a z:
- S -> T + S | T - S | T
- T -> U * T | U / T
- U -> (S) | x | y | z
Kontext-uvolnit gramatiku pro jazyk sestávat ze všech řetězců přes {, b} který obsahovat různé číslo než b je
- S -> U | V
- U -> TaU | tretka
- V -> TbV | TbT
- T -> aTbT | bTaT | a epsilon;
Tam jsou v podstatě dva způsoby, jak popsat jak v jisté gramatice řetězec může být odvozen ze symbolu začátku. Nejjednodušší cesta má vypsat nepřetržité řetězy symbolů, začátku se symbolem začátku a konce s řetězcem a pravidla, která byla platila. Jestliže my představíme strategii takový jak “vždy nahradit odešel-nejvíce nonterminal nejprve” pak pro kontext-uvolnit gramatiky seznam aplikovaných mluvnických pravidel je sám dostatečný. Toto je nazýváno leftmost původem řetězce. Například, jestliže my vezmeme následující gramatiku:
- (1) S -> S + S
- (2) S -> 1
Rozlišení mezi leftmost původem a rightmost původem je důležité, protože ve většině analyzátorech transformace vstupu je definována tím, že dává kus kódu každého mluvnického pravidla to je vykonáno vždy, když pravidlo je aplikováno. Proto to je důležité vědět to zda analyzátor určuje leftmost nebo původ rightmost, protože toto stanoví pořadí ve kterém kusy kódu budou provedené. Vidět pro příklad LL analyzátory a LR analyzátory.
Původ také uloží v nějakém smyslu hierarchická struktura na řetězci, který je pocházela. Například struktura řetězce “1 + 1 + 1” odkázaný, shodovat se k původu leftmost, být:
- S->S+S (1)
- S->S+S+S (1)
- S->1+S+S (2)
- S->1+1+S (2)
- S->1+1+1 (2)
- { { { 1 }S + { 1 }S }S + { 1 }S }S
S
/|\\
/ | \\
/ | \\
S '+' S
/|\\ |
/ | \\ |
S '+' S '1'
| |
'1' '1'Tento strom je nazýván betonovým syntaktickým stromem (vidět také oddělit strom syntaxe) řetězce. V tomto případě představované leftmost a původ rightmost definují stejný syntaktický strom, nicméně je další (leftmost) původ stejného řetězce možný- S-> S + S (1)
- S-> 1 + S (2)
- S-> 1 + S + S (1)
- S-> 1 + 1 + S (2)
- S-> 1 + 1 + 1 (2)
S
/|\\
/ | \\
/ | \\
S '+' S
| /|\\
| / | \\
'1' S '+' S
| |
'1' '1'Jestliže pro jisté řetězce v jazyce gramatiky tam být více než jeden rozebrat strom pak gramatika je řekl, aby byl dvojznačná gramatika. Takové gramatiky jdou obvykle nesnadno rozebrat, protože analyzátor nemůže vždy rozhodnout které mluvnické pravidlo to musí platit.Každý kontext-volná gramatika, která netvoří prázdný řetězec může být transformována do ekvivalentu jednoho z Chomsky normální formy nebo Greibach normální formy. “ekvivalent” tady znamená, že dvě gramatiky tvoří stejný jazyk.
Protože obzvláště jednoduché formy pravidel výroby v Chomsky gramatiky normální formy, tato normální forma má oba teoretické a praktické důsledky. Například, daný kontext-uvolnit gramatiku, jeden může používat Chomsky normální formu budovat polynomial-algoritmus času, který se rozhodne zda daný řetězec je v jazyce reprezentovaném tou gramatikou nebo ne ( CYK algoritmus).
Vlastnosti kontextu-uvolnit jazyky
- Alternativní a rovnocenná definice kontextu-uvolnit jazyky zaměstná non-deterministický tlak-dole automaty: jazyk je kontext-volný jestliže a jediný jestliže to může být přijímané takový automat.
- Odbor a zřetězení dva kontext-uvolnit jazyky je kontext-volný; křižovatka nemusí být.
- Zpáteční rychlost kontextu-volný jazyk je kontext-volný, ale doplněk nemusí být.
- Každý pravidelný jazyk je kontext-volný protože to může být popsané pravidelnou gramatikou.
- Křižovatka kontextu-uvolnit jazyk a pravidelný jazyk je vždy kontext-volný.
- Tam existovat kontextové jazyky, které nejsou kontext-volný.
- Dokázat, že daný jazyk není kontext-volný, jeden zaměstná lemma čerpání pro kontext-uvolnit jazyky.