Jednoznačné a nejednoznačné gramatiky

Podobné dokumenty
Bezkontextové jazyky 2/3. Bezkontextové jazyky 2 p.1/27

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/39

Automaty a gramatiky(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNTAKTICKÁ ANALÝZA DOKONČENÍ, IMPLEMENTACE.

Formální jazyky a gramatiky Teorie programovacích jazyků

Vlastnosti Derivační strom Metody Metoda shora dolů Metoda zdola nahoru Pomocné množiny. Syntaktická analýza. Metody a nástroje syntaktické analýzy

Výpočetní modely pro rozpoznávání bezkontextových jazyků zásobníkové automaty LL(k) a LR(k) analyzátory

Automaty a gramatiky

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T.

Turingovy stroje. Teoretická informatika Tomáš Foltýnek

Kapitola 6. LL gramatiky. 6.1 Definice LL(k) gramatik. Definice 6.3. Necht G = (N, Σ, P, S) je CFG, k 1 je celé číslo.

Teoretická informatika - Úkol č.1

/1: Teoretická informatika(ti) přednáška 4

doplněk, zřetězení, Kleeneho operaci a reverzi. Ukážeme ještě další operace s jazyky, na které je

Automaty a gramatiky. Uzávěrové vlastnosti v kostce R J BKJ DBKJ. Roman Barták, KTIML. Kvocienty s regulárním jazykem

2 Formální jazyky a gramatiky

Bezkontextové gramatiky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května / 49

Vztah jazyků Chomskeho hierarchie a jazyků TS

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/31

Z. Sawa (VŠB-TUO) Teoretická informatika 5. listopadu / 43

Čísla značí použité pravidlo, šipka směr postupu Analýza shora. Analýza zdola A 2 B 3 B * C 2 C ( A ) 1 a A + B. A Derivace zleva:

/01: Teoretická informatika(ti) přednáška 5

Strukturální rozpoznávání

Cvičení 1. Úvod do teoretické informatiky(2014/2015) cvičení 1 1

Implementace LL(1) překladů

B A B A B A B A A B A B B

Základy teoretické informatiky Formální jazyky a automaty

Syntaxí řízený překlad

Automaty a gramatiky. Roman Barták, KTIML. Separované gramatiky. Kontextové gramatiky. Chomského hierarchie

Kombinatorika, výpočty

Teoretická informatika TIN 2013/2014

Překladač sestrojující k regulárnímu výrazu ekvivalentní konečný automat Připomeňme si jednoznačnou gramatiku G pro jazyk RV({a, b})

Operace s maticemi Sčítání matic: u matic stejného typu sečteme prvky na stejných pozicích: A+B=(a ij ) m n +(b ij ) m n =(a ij +b ij ) m n.

TOKY V SÍTÍCH II. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Základní datové struktury III: Stromy, haldy

Teoretická informatika

AUTOMATY A GRAMATIKY. Pavel Surynek. Kontextové uzávěrové vlastnosti Turingův stroj Rekurzivně spočetné jazyky Kódování, enumerace

Formální jazyky a automaty Petr Šimeček

Pumping lemma - podstata problému. Automaty a gramatiky(bi-aag) Pumping lemma - problem resolution. Pumping lemma - podstata problému

Lineární algebra : Násobení matic a inverzní matice

6. Zobrazení δ: (a) δ(q 0, x) obsahuje x i, x i Z. (b) δ(x i, y) obsahuje y j, x i y j P 7. Množina F je množinou koncových stavů.

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

Zásobníkový automat. SlovoaaaabbbbpatřídojazykaL={a i b i i 1} a a a a b b b b

Bezkontextové gramatiky nad volnými grupami

Součin matice A a čísla α definujeme jako matici αa = (d ij ) typu m n, kde d ij = αa ij pro libovolné indexy i, j.

Vysoké učení technické v Brně Fakulta informačních technologií. Gramatiky nad volnými grupami Petr Blatný

Teoretická informatika

prof. RNDr. Čestmír Burdík DrCs. prof. Ing. Edita Pelantová CSc. BI-ZMA ZS 2009/2010

Fakulta informačních technologií. Teoretická informatika

Dynamické programování

y (5) (x) y (4) (x) + 4y (3) (x) 12y (x) 45y (x) 27y(x) (horní indexy značí derivaci) pro 3. y(x) = x sin 3x 4. y(x) = x cos 3x 9.

OSTRAVSKÁ UNIVERZITA V OSTRAVĚ

l, l 2, l 3, l 4, ω 21 = konst. Proved te kinematické řešení zadaného čtyřkloubového mechanismu, tj. analyticky

Syntetická geometrie I

Návrh algoritmů pro sémantické akce při výstavbě interpretu metodou rekurzivního sestupu

Základy matematické analýzy

PŘEVOD GRAMATIK DO NORMÁLNÍCH FOREM

EKO-KOLONIE. Ústav informatiky, Filozoficko-přírodovědecká fakulta Slezské univerzity v Opavě 24.

Lineární algebra - I. část (vektory, matice a jejich využití)

REDUKCE VELIKOSTI GRAMATIKY V SILNÉ GREIBACHOVÉ NORMÁLNÍ FORMĚ

1) Sekvenční a paralelní gramatiky

UČEBNÍ TEXTY VYSOKÝCH ŠKOL. Prof. RNDr. Milan Češka, CSc. Gramatiky a jazyky

Regulární výrazy. M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 14. března / 20

Syntetická geometrie I

DYNAMICKÉ PROGRAMOVÁNÍ A PROBLÉM BATOHU

Analytická geometrie lineárních útvarů

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

FIT ČVUT MI-LOM Lineární optimalizace a metody. Dualita. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Referát z předmětu Teoretická informatika

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij]

Úvod do lineární algebry

PŘEDNÁŠKA 5 Konjuktivně disjunktivní termy, konečné distributivní svazy

Lineární algebra : Násobení matic a inverzní matice

AUTOMATY A GRAMATIKY

Formální jazyky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března / 32

Učební texty k státní bakalářské zkoušce Programování Základy teoretické informatiky. študenti MFF 15. augusta 2008

Syntaxí řízený překlad

GENEROVÁNÍ KÓDU 9. SHRNUTÍ - PŘÍKLAD POSTUPU PŘEKLADU VSTUPNÍHO PROGRAMU (ZA POUŽITÍ DOSUD ZNÁMÝCH TECHNIK)

Teoretická informatika TIN

PQ-stromy a rozpoznávání intervalových grafů v lineárním čase

Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout

SYNTAKTICKÁ ANALÝZA ZALOŽENÁ NA GRAMATICKÝCH A AUTOMATOVÝCH SYSTÉMECH PARSING BASED ON GRAMMAR AND AUTOMATA SYSTEMS

Stromy, haldy, prioritní fronty

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Markov Chain Monte Carlo. Jan Kracík.

Syntetická geometrie II

Regulární výrazy. Definice Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto:

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010

Úvod do informatiky. Miroslav Kolařík

15 Maticový a vektorový počet II

Martin Plicka. October 24, 2012

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

Teorie množin. Čekají nás základní množinové operace kartézské součiny, relace zobrazení, operace. Teoretické základy informatiky.

BRNO UNIVERSITY OF TECHNOLOGY FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS MASTER S THESIS AUTHOR

Úvod do informatiky. Miroslav Kolařík

Shodná zobrazení. bodu B ležet na na zobrazené množině b. Proto otočíme kružnici b kolem

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,

Ekvivalence. Základy diskrétní matematiky, BI-ZDM ZS 2011/12, Lekce 5

Cvičení 5 - Inverzní matice

Transkript:

BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 2/36 Jednoznačné a nejednoznačné gramatiky BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 4/36 Automaty a gramatiky(bi-aag) 11. Bezkontextové gramatiky Jan Holub Bezkontextová gramatika G = (N, T, P, S) je nejednoznačná (víceznačná), jestliže existuje věta w L(G) taková, že je výsledkem nejméně dvou různých derivačních stromů. V opačném případě je gramatika jednoznačná. Katedra teoretické informatiky Fakulta informačních technologií ČVUT v Praze c Jan Holub, 2011 Evropský sociální fond. Praha & EU: Investujeme do vaší budoucnosti BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 1/36 Bezkontextové gramatiky Bezkontextové gramatiky Dokáží popsat převážnou většinu syntaktických struktur programovacích jazyků. Jsou známy algoritmy pro efektivní analýzu věty bezkontextových jazyků. Syntaktická analýza: Je daný řetězec w generován danou gramatikou G? Jaká je struktura tohoto řetězce? BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 3/36 Jednoznačné a nejednoznačné gramatiky G = ({S},{a,b,if,then,else},P,S), kde P : S if b then S else S S if b then S S a Gramatika je nejednoznačná: if b then if b then a else a if b S then S S if b then S else S if b then S else S if b then S a a a a

Jednoznačné a nejednoznačné gramatiky BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 6/36 BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 8/36 BG obsahuje pravidlo A AA a proto je nejednoznačná. Pro větnou formu AAA existují dva derivační stromy. Lze odstranit nahrazením pravidla A AA pravidly A AB A B. Existuje algoritmus, který určí, zda jazyk generovaný danou bezkontextovou gramatikou je prázdný. Algoritmus Je L(G) neprázdný? Vstup: Bezkontektová gramatika G = (N, T, P, S). Výstup: Ano, jestliže L(G), ne jinak. Metoda: Konstruujeme množiny N 0, N 1,... takto: 1. N 0 =, i := 1 2. N i = {A : A α P, α (N i 1 T ) } N i 1 3. Jestliže N i N i 1, pak i := i + 1 a proved (2), jinak N t = N i. 4. Jestliže S N t, pak ano, jinak ne. BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 5/36 Jednoznačné a nejednoznačné gramatiky BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 7/36 Nejednoznačnost se týká jen gramatiky. Inherentně (podstatně) nejednoznačné jazyky: Nelze je generovat jednoznačnou gramatikou. Pro bezkontextové gramatiky nelze sestrojit algoritmus, který by rozhodl, zda daná gramatika je nejednoznačná, a vhodnou modifikací této gramatiky získat gramatiku jednoznačnou. G = ({S, A, B}, {a, b}, {S a, S A, A AB, B b}, S). N 0 = N 1 = {S, B} N 2 = {S, B} N 1 = N 2 = N t S N t gramatika G generuje neprázdný jazyk. G = ({S 1, S 2 }, {a, b, if, then, else}, P, S 1 ), kde P : S 1 if b then S 1 if b then S 2 else S 1 a S 2 if b then S 2 else S 2 a Symbol else se vztahuje vždy k nejbližšímu předchozímu then.

BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 10/36 BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 12/36 Symbol X N T je nedostupný v bezkontextové gramatice G = (N, T, P, S), jestliže X se neobjeví v žádné větné formě, tj. neexistuje derivace tvaru S + αxβ, α, β (N T ). G = ({S, A, B}, {a, b}, {S a, S A, A AB, B b}, S) V 0 = {S} V 1 = {S} {a, A} V 2 = {S, A, a} {B} V 3 = {S, A, B, a, } {b} V 4 = {S, A, B, a, b} BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 9/36 BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 11/36 Algoritmus Vyloučení nedostupných symbolů. Vstup: Bezkontextová gramatika G = (N, T, P, S). Výstup: G = (N, T, P, S) taková, že a) L(G ) = L(G), b) pro všechna X N T existují α, β (N T ) taková, že S αxβ. Metoda: Symbol X N T je zbytečný G = (N, T, P, S), jestliže neexistuje S wxy wxy, kde w, x, y T. 1. V 0 = {S} a i := 1. 2. V i = {X : A αxβ P, A V i 1 } V i 1. 3. Jestliže V i V i 1 pak i := i + 1 a proved krok 2, jinak N = V i N, T = V i T, P = {A α : A N, α V i, A α P }, G = (N, T, P, S)

BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 14/36 BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 16/36 Algoritmus Vyloučení zbytečných symbolů. Vstup: BG G = (N, T, P, S), L(G). Výstup: BG G = (N, T, P, S), a) L(G ) = L(G) a b) X N T S αxβ. Metoda: 1. Pomocí algoritmu 3.6 (Je L(G) prázdný?) získáme N t. G 1 = (N t, T, P 1, S), P 1 = {A α : A N t, α (N t T ), A α P }. 2. Algoritmus 3.9 (Vyloučení nedostupných symbolů) vyloučí všechny neterminální symboly z G takové, ze kterých není možno generovat terminální řetězce a poté všechny nedostupné symboly. Získáme G = (N, T, P, S). ( o vyloučení pravidla, věta o dosazování). G = (N, T, P, S) je bezkontextová gramatika a A αbβ P, B N, A B a α, β (N T ). Necht B γ 1 γ 2... γ k jsou všechna pravidla se symbolem B na levé straně v P. Necht G = (N, T, P, S), kde P = P {A αγ 1 β αγ 2 β... αγ k β} \ {A αbβ}. Pak L(G) = L(G ). BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 13/36 BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 15/36 G = ({S, A, B}, {a, b}, {S a, S A, A AB, B b}, S) Bezkontextová gramatika G = (N, T, P, S) je bez cyklů, jestliže v ní není možná derivace: A + A pro nějaké A N. Krok 1.: N t = {S, B} G 1 = ({S, B}, {a, b}, {S a, B b}, S) Krok 2.: V 0 = {S} V 1 = {S, a} V 2 = {S, a} G = ({S}, {a}, {S a}, S) Bezkontextová gramatika G = (N, T, P, S) je vlastní, jestliže je bez cyklů, bez ε-pravidel a nemá zbytečné symboly. Jestliže je bezkontextová gramatika G = (N, T, P, S) bez ε-pravidel a bez jednoduchých pravidel, pak je bez cyklů. Jestliže L je bezkontextový jazyk, potom může být generován nějakou vlastní gramatikou G.

BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 18/36 BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 20/36 Bezkontextová gramatika G = (N, T, P, S) je redukovaná, jestliže neobsahuje zbytečné symboly. Algoritmus Převod gram. do Chomského normálního tvaru Vstup: Vlastní bezkontextová gramatika G = (N, T, P, S). Výstup: BG G = (N, T, P, S) v Chomského normálním tvaru, L(G) = L(G ) Metoda: 1. P =. 2. Přidej všechna pravidla tvaru A a z P do P. 3. Přidej všechna pravidla tvaru A BC z P do P. 4. Jestliže S ε je v P, přidej S ε do P. BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 17/36 BG G = (N, T, P, S) je v normálním tvaru podle Chomského, jestliže každé pravidlo v P má jeden z následujících tvarů: 1. A BC pro A, B, C N. 2. A a pro a T, A N. 3. Jestliže ε L(G), pak S ε je pravidlo v P a S se nevyskytuje na pravé straně žádného pravidla. BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 19/36 Algoritmus (pokračování): 5. Pro každé pravidlo tvaru A X 1 X 2... X k P, kde k > 2, přidej do P následující pravidla (když X i N, X i = X i, když X i T, X i je nový neterminální symbol): A X 1 X 2... X k X 2... X k X 2 X 3... X k. X k 2... X k X k 1 X k 1X k X k 1 X k X k 1 X k, kde každý symbol X i... X k je nový neterminální symbol v P.

BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 22/36 BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 24/36 Algoritmus (pokračování): 6. Pro každé pravidlo tvaru A X 1 X 2, kde X 1 nebo X 2 nebo X 1 i X 2 jsou v T, přidej do P pravidla A X 1 X 2. 7. Pro každý neterminální symbol a vzniklý v krocích 5. a 6. přidej do P pravidlo a a. Konečně N je sjednocení N se všemi nově vzniklými neterminálními symboly. Gramatika G = (N, T, P, S). BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 21/36 Necht L je bezkontextový jazyk. Pak L je jazyk generovaný nějakou gramatikou v Chomského normálním tvaru. Vlastní BG G = ({S, A, B}, {a, b}, P, S), P : S aab BA A BBB a B AS b krok 1: krok 2: krok 3: krok 4: A a B b přidáme do P. S BA B A S přidáme do P. Neprovedeme nic. S aab P S a AB AB AB přidáme do P. A BBB P A B BB BB BB přidáme do P. BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 23/36 (pokračování) krok 5: Neprovedeme nic. krok 6: a a přidáme do P. P : S a AB BA A B BB a B AS b AB AB BB BB a a N = N { AB, BB, a }

BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 26/36 BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 28/36 Algoritmus Cocke-Younger-Kasami (CYK) algorithm Vstup: Bezkontextová gramatika G = (N, T, P, S) v Chomského normálním tvaru, X T Výstup: Odpověd, zda X L(G) Metoda: X = {x 1, x 2,..., x n } 1. Inicializuj pole P [n, n] na. 2. Pro každé i = 1..n a pro každé pravidlo A t i nastav P [i, 1] := P [i, 1] {A} 3. Pro každé i = 2..n udělej (délka řetězce) Pro každé j = 1..n i + 1 udělej (pozice v textu) Pro každé k = 1..i 1 udělej (délka gen. řetězce) Jestliže B P [j, k], C P [j + k, i k] a A BC pak P [j, i] := P [j, i] {A} 4. Jestliže S P [1, n], pak X L(G), jinak, X L(G). Je-li G = (N, T, P, S) bezkontextová gramatika a X T řetězec délky n, pak lze zjistit zda X L(G) v čase O(n 3 ). BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 25/36 Text aaba a BG G = ({S, A, B, C}, {a, b}, P, S), P : S AB BC A BA a B CC b C AB a 4 3 2 1 a a b a BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 27/36 Neterminální symbol A v BG G = (N, T, P, S) nazveme rekurzivní, jestliže existuje derivace A + αa β pro nějaké α a β (N T ). Jestliže α = ε, pak A nazveme symbol rekurzivní zleva, podobně jestliže β = ε, pak A nazveme symbol rekurzivní zprava. Gramatiku s alespoň jedním neterminálním symbolem rekurzivním zleva (zprava) nazveme rekurzivní zleva (zprava). Gramatiku, ve které je alespoň jeden neterminální symbol rekurzivní, nazveme rekurzivní.

BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 30/36 BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 32/36 (O vyloučení rekurzivity zleva z jednotlivých pravidel). Necht G = (N, T, P, S) je bezkontextová gramatika, ve které A A α 1 A α 2... A α m β 1 β 2... β n jsou všechna pravidla v P s neterminálním symbolem A na levé straně a žádné β i, i = 1, 2,..., n, nezačíná symbolem A. Necht G = (N {A }, T, P, S) je bezkontextová gramatika, kde P je množina P, ve které pravidla uvedená výše jsou nahrazena pravidly: A β 1 β 2... β n β 1 A β 2 A... β n A A α 1 α 2... α m α 1 A α 2 A... α m A, kde A je nový neterminální symbol, který není v N. Pak L(G ) = L(G). Bezkontextová gramatika G je v normálním tvaru podle Greibachové, jestliže G je bez ε-pravidel a každé pravidlo, které neobsahuje prázdný řetězec na pravé straně, má tvar A aα, kde a T, α N. BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 29/36 G = ({E, T, F }, {+,, (, ), a}, P, E), P : E E + T T T T F F F (E) a. Odstraníme levou rekurzi: E T T E E +T +T E T F F T T F F T F (E) a G = ({E, E, T, T, F }, {+,, (, ), a}, P, E), P je množina pravidel uvedených výše. BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 31/36 Algoritmus Vyloučení rekurzivity zleva. Vstup: Vlastní bezkontextová gramatika G = (N, T, P, S). Výstup: BG G bez rekurzivity zleva, L(G) = L(G ). Metoda: 1. Zvolíme uspořádání N = {A 1,..., A r }: A i α, α začíná bud terminálním symbolem nebo neterminálním symbolem A j pro j i. Položme i := 1.

BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 34/36 BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 36/36 Algoritmus (pokračování): 2. Všechna pravidla A i A i α 1... A i α m β 1... β n z P s neterminálním symbolem A i na levé straně, kde žádné β j nezačíná neterminálním symbolem A k pro k i, nahradíme tato pravidla pravidly: A i β 1... β n β 1 A i... β na i, A i α 1... α m α 1 A i... α ma i, kde A i je nový neterminální symbol. 3. Jestliže i = r, máme výslednou gramatiku G a končíme, jinak i := i + 1 a j := 1. 4. Jestliže pro neterminální symbol A j existují pravidla A j β 1... β m, pak nahradíme všechna pravidla tvaru A i A j α pravidly A i β 1 α... β m α. 5. Jestliže j = i 1, jdi na krok 2., jinak polož j := j + 1 a jdi na krok 4. BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 33/36 G = ({A, B, C}, {a, b}, P, A), P : A BC a B CA Ab C AB CC a. Aplikujme algoritmus 3.28 na tuto gramatiku. Položme A 1 = A, A 2 = B, A 3 = C. Krok 2: (i = 1) beze změn. Krok 4: (i = 2, j = 1) Po dosazení za A dostaneme pro B pravidla: B CA BCb ab. Krok 2: Odstraníme rekurzivitu zleva u symbolu B : B CA ab CA B abb B CbB Cb Krok 4: (i = 3, j = 1) C BCB ab CC a BI-AAG (2011/2012) J. Holub: 11. Bezkontextové gramatiky p. 35/36 Každý bezkontextový jazyk může být generován gramatikou, která neobsahuje rekurzivitu zleva. (pokračování) Krok 4: (i = 3, j = 2) C CACB abcb CAB CB abb CB ab CC a Krok 2: (i = 3) C abcb abb CB ab a abcbc abb CBC abc ac C A CBC AB CBC CC A CB A B CB C Výsledná gramatika je G = ({A, B, C, B, C }, {a, b}, P, A), kde P obsahuje pravidla: A BC a B CA ab CA B abb B CbB Cb C abcb abb CB ab a abcbc abb CBC abc ac C ACBC AB CBC CC ACB AB CB C