REDUKCE VELIKOSTI GRAMATIKY V SILNÉ GREIBACHOVÉ NORMÁLNÍ FORMĚ Jaroslav SUCHÁNEK, Mgr. (5) Dept. of Information Systems, FIT, BUT E-mail: xsucha07@stud.fit.vutbr.cz Supervised by: Dr. Dušan Kolář ABSTRACT This document deals with optimalization and reduction of number of new nonterminals and their rules, which are produced during several types of transformation from arbitrary Context Free Grammar into Strong Greibach Normal Form (2-SNF). There are also described techniques for exploitation of graph structures for grammar representation. 1 ÚVOD Jak je dokázáno, je jakákoliv bezkontextová gramatika převeditelná na některou z normálních forem. Důvodem takové transformace je většinou snaha získat množinu přepisovacích pravidel určitého (normálního) tvaru. Ve své ročníkové práci, viz [8], jsem ukázal jakým způsobem převést libovolnou bezkontextovou gramatiku nejprve do Greibachové normální formy (GNF) a posléze i do její striktnější varianty silné Greibachové normální formy (SGNF, 2-SNF). Při těchto transformacích ovšem dochází k nárustu počtu nových nonterminálů a přepisovacích pravidel. Snahou této práce je diskutovat možné způsoby převodu bezkontextových gramatik do silné Greibachové normální formy tak, aby nárůst počtu nových nonterminálů a přepisovacích pravidel nebyl až tak dramatický. Následující text předvede metody, které mají na vstupu Greibachové normální formu, kterou převádí na silnou Greibachové normální formu nebo-li 2-SNF. Čtvrtá z těchto metod je mou navržený optimalizující algoritmus. Na závěr této kapitoly je nastíněna možnost využití grafu, jako struktury pro reprezentaci gramatiky. Výsledkem této práce je komplexní náhled na různé metody převodu bezkontextových gramatik na silnou Greibachové normální formu. A je základním podkladem pro implementaci vybraného způsobu.
2 PŘEVODY VYCHÁZEJÍCÍ Z GREIBACHOVÉ NORMÁLNÍ FORMY Nejprve bude popsán výchozí tvar přepisovacích pravidel gramatiky, na které budou prováděny transformace vedoucí k zisku silné Greibachové normální formy. Předpokládáme, že gramatika G = (N, Σ, P, S) odpovídá Greibachové normální formě, tj. tvar přepisovacího pravidla je následující: A aα, a Σ,A N,α N (1) Jak je popsáno např. v [8], takový tvar gramatiky získáme z libovolné bezkontextové gramatiky tak, že odstraníme 1. zbytečné symboly, 2. ε-pravidla, 3. jednoduchá pravidla, v tuto chvíli je gramatika v tzv. redukované formě 4. levou rekurzi a nakonec 5. provedeme závěrečné úpravy gramatiky, za terminální symboly na jiné než první pozici zavedeme nový nonterminál, pro který vytvoříme přepisovací pravidlo tak, aby se přepisoval na původní terminál a provedeme rozgenerování nonterminálů na první pozici pravé strany Protože se tato práce zabývá redukcí velikosti gramatiky, je vhodné nějakým způsobem vyčíslit změny velikosti jednotlivých množin. Velikost množiny Σ se mění jen v průběhu operací 1., velikost se může redukovat. V části 1. může dojít také k redukci množiny nonterminálů N a množiny P. Ve všech zbývajících bodech dochází k rozšiřování množin N a P. V práci [6] je dokázáno, že: N w 2 N R kde N w je množina nonterminálů gramatiky, která je ve slabé Greibachové normální formě. To je taková forma, která připouští výskyt terminálu i na jiné než první pozici pravé strany přepisovacího pravidla. Dále N R je množina nonterminálů gramatiky, která se nachází v redukované formě, tj. bezkontextová gramatika bez zbytečných symbolů, ε-pravidel a jednoduchých pravidel. Konvence označením 2-SNF bude ve zbytku textu označena silná Greibachové normální forma gramatiky
symbolem k se označí počet nonterminálů pravé strany pravidla. Formálně naznačeno: A aα, a Σ,α N pak k = α. v textu často využívám termínu rozgenerovat. Tímto termínem označuji záměnu nonterminálu za jeho pravou stranu z množiny P v procesu transformace gramatiky. Tedy tvrzení, že se nějaký nonterminál nebude nikdy rozgenerovávat neznamená, že se nevyskytuje v žádné větné formě. Dále popsané metody převádí tvar přepisovacího pravidla (1) na jeden z tvarů 2-SNF: A ab 1 B 2 A ab 1 A a a Σ,A,B 1,B 2 N Pokud ovšem symbol ε patří do jazyka, nesmí se symbol levé strany pravidla S ε objevit na žádné pravé straně pravidla z P. 2.1 POSTUPNÉ PÁROVÁNÍ OD KONCE Jako první bude uvedena metoda, která je odvozena ze způsobu popsaného v [3]. Popis Metoda transformuje všechna pravidla tvaru A aα, které mají k 2 na tvar, jejichž k = 1. Pravidel, která tuto podmínku již splňují si nevšímá. To jsou pravidla tvaru A a a A ab. Protože je jasné kolik pravidel bude transformováno a jakým způsobem, můžeme snadno vyčíslit počet nových nonterminálů a nově vzniklých pravidel. Touto metodou ještě nedochází k optimalizaci velikosti 2-SNF gramatiky, ale některé její postupy budou použity v optimalizační metodě popsané v podkapitole 2.4. A -> a B_1 B_2... B_(k-2) B_(k-1) B_k k > 1 N_1 -> B_(k-1) B_k N_2 -> B_(k-2) N_1 N_(k-2) -> B_2 N_(k-3) N_(k-1) -> B_1 N_(k-2) Obrázek 1: situace při postupném párování od konce Postup
Jak je naznačeno na obrázku 1, je provedena postupná redukce počtu nonterminálů pravé strany pravidla. Redukce se ovšem týká pouze délky pravé strany přepisovacího pravidla, původní nonterminály nezanikají, stávají se součástí nových pravidel. V průběhu transformace vznikají jak nové nonterminály, tak nová přepisovací pravidla. 1. pro pravidlo tvaru A ab 1 B 2...B k 2 B k 1 B k k 2 je provedena substituce posledního páru nonterminálu B k 1 a B k za nový nonterminál N 1, který zařadíme do množiny nově vzniklých nonterminálů N. Množina P bude obsahovat nová pravidla, která vznikají v průběhu transformace. Zařadíme tam tedy i pravidlo: N 1 B k 1 B k 2. V množině P pak je původní pravidlo nahrazeno za pravidlo tvaru: A ab 1 B 2...B k 2 N 1 Pokud i nadále toto pravidlo nesplňuje podmínku je potřeba vytvořit další pár z nonterminálu B k 2 a N 1. Bod 2) opakujeme tak dlouho, dokud nemá pravidlo tvar: A an k 1 Po aplikaci na všechna pravidla pak množina P obsahuje jen pravidla tvaru A ab nebo A a. 3. Následně je nutné transformovat všechna pravidla z P. Protože jejich pravá strana začíná nonterminálem z N, je zajištěno, že rozgenerováním tohoto nonterminálu, vznikne pravidlo N i aα,k 2. Výsledná gramatika G = (N N,Σ,P,S) je v 2-SNF. Množina P vznikne jako: P {A an i a Σ,N i N } {N i ab 1 B 2 a Σ,B 1,B 2 N} {N i ab 1 a Σ,B 1 N}. {N i ab 1 N m a Σ,B 1 N,N m N } Výhodou tohoto způsobu je, že můžeme dopředu spočítat kolik nových nonterminálů a pravidel vznikne. Pro počet pravidel platí tvar: P = p i=1(k i 1) + P (2) kde P je počet pravidel původní gramatiky, p je počet pravidel, která mají k 2. A počet nových nonterminálů z pravidla A ab 1...B k,k 2 je k 1.
2.2 PÁROVÁNÍ OD KONCE Jedná se o jinou metodu vycházející ze způsobu popsaného v [3]. Tentokrát je snahou substituovat vždy dva původní nonterminály v pravidle za jeden nový. Situaci nastiňuje obrázek 2. Popis Metoda transformuje všechna pravidla tvaru A aα, která mají k 2 na tvar, jejichž k = 1. Pravidel, která tuto podmínku již splňují si nevšímá. To jsou pravidla tvaru A a a A ab. Tato metoda opět neoptimalizuje velikost 2-SNF gramatiky, ale některé její výhody budou použity v optimalizační metodě popsané v podkapitole 2.4. A -> a B_1 B_2... B_(k-2) B_(k-1) B_k k > 1 N_i -> B_1 B_2 N_1 -> B_(k-1) B_k N_2 -> B_(k-3) B_(k-2) Obrázek 2: situace při utváření párů od konce Zdálo by se, že počet nových nonterminálů z pravidla A ab 1...B k,k 2 je k/2, ale jak si ukážeme na příkladu není tomu tak. Postup Obrázek 2 naznačuje, jak je provedena redukce počtu nonterminálů na pravé straně pravidla: 1. pro pravidlo tvaru A ab 1 B 2...B k 2 B k 1 B k k 2 je provedena substituce posledního páru nonterminálu B k 1 a B k za nový nonterminál N 1, který zařadíme do množiny nově vzniklých nonterminálů N. Množina P bude obsahovat nová pravidla, která vznikají v průběhu transformace. Zařadíme tam tedy i pravidlo: N 1 B k 1 B k 2. V množině P pak je původní pravidlo nahrazeno za pravidlo tvaru: A ab 1 B 2...B k 2 N 1 Pokud i nadále toto pravidlo nesplňuje podmínku je potřeba vytvořit další pár z nonterminálu B k 3 a B k 2. Bod 2) opakujeme tak dlouho, dokud nemá pravidlo tvar: A an k 1 Po aplikaci na všechna pravidla pak množina P obsahuje jen pravidla tvaru A ab nebo A a.
3. Následně je nutné transformovat všechna pravidla z P. Protože jejich pravá strana začíná nonterminálem z N, je zajištěno, že rozgenerováním tohoto nonterminálu, vznikne pravidlo N i aα,k 2. Výsledná gramatika G = (N N,Σ,P,S) je v 2-SNF. Množina P vznikne jako: P {A an i a Σ,N i N } {N i ab 1 B 2 a Σ,B 1,B 2 N} {N i ab 1 a Σ,B 1 N}. {N i ab 1 N m a Σ,B 1 N,N m N } Pro pravidla, která mají k > 4 nastává problém, že je potřeba substituovat ještě i nonterminály z množiny N, protože redukované pravidlo stále nesplňuje podmínku, aby k = 1. Například pro k = 6 vypadá situace následovně: A -> a B_1 B_2 B_3 B_4 B_5 B_6 N_3 N_2 N_1 N_4 N_5 Obrázek 3: příklad pro šest nonterminálů Oproti způsobu z kapitoly 2.1 tedy nedochází k žádné úspoře počtu nonterminálů a tudíž i přepisovacích pravidel u pravidel, která mají k > 4. Pro tato pravidla stále platí vzorec (2). K optimalizaci dojde jen za určitých podmínek a jen pro pravidla, která mají 1 < k 4. 2.3 POSTUPNÁ SUBSTITUCE OD ZAČÁTKU Tato metoda, popsaná v [10], postupuje opačným způsobem než předchozí dvě. Mají ale společnou vlastnost, že redukují pravidlo A aα,k 2 až na tvar A ab. Popis Metoda transformuje všechna pravidla tvaru A aα, která mají k 2 na tvar, jejichž k = 1. Pravidel, která tuto podmínku již splňují, si nevšímá. To jsou pravidla tvaru A a a A ab. Tato metoda již umožňuje optimalizace velikosti 2-SNF gramatiky, především při implementaci. Postup Při popisu postupu nám vypomůže obrázek 4:
1. Postupuje tak, že u pravidla A ab 1...B k,k 2 provede substituci nonterminálů B 1...B k za nový nonterminál N 1. Vznikne tak nové pravidlo: N 1 B 1...B k (4) To se provede v celé množině P. Množina P pak obsahuje pravidla tvaru A a nebo A ab. 2. Následně je potřeba zpracovat nově vzniklá pravidla obvyklým způsobem, náhradou prvního nonterminálu za jeho pravou stranu z množiny P. 3. Pokud pravidlo (4) má po kroku 2) k 2, pak je nutné provést další substituci. Tentokrát ovšem za nonterminály B 2...B k. 4. Kroky 2) a 3) se opakují tak dlouho, dokud není k = 2. Strom substitucí vypadá následovně: Analýzou zjistíme, že tato metoda negeneruje A -> a B_1 B_2....... B_(k-1) B_k N_1 -> a N_m B_2....... B_(k-1) B_k N_2 -> a N_(m+1) B_3..... B_k.... N_(k-1) -> a N_(m+k) B_k Obrázek 4: situace při tvorbě substitucí od začátků méně nových nonterminálů a pravidel jako předchozí dvě metody. Její schopnost je totožná s první uvedenou metodou. Pokud bychom neprováděli žádné předpřípravy gramatiky lze použít vzorec (2). Na rozdíl od předcházejících dvou způsobů vznikají nová pravidla, která mohou mít různou délku. Zatímco v předchozích metodách vzniklo substitucí vždy pravidlo, které mělo tvar: N i B 1 B 2 mohlo se v případě nalezení shodné pravé strany použít levá strana. Nevznikl tedy ve skutečnosti nový nonterminál. V případě této metody mohou mít pravidla potenciálně různou délku, proto je nalezení stejné pravé strany méně pravděpodobné. Možnost optimalizace Předpřípravou gramatiky tak, že seřadíme gramatiku podle délky pravé strany (k) vzestupně, dosáhneme zvýšení pravděpodobnosti nalezení již použité substituce. Podaří-li se nalézt již použitou substituci, není pak potřeba zavádět nový nonterminál, ale použije se nalezený nonterminál.
2.4 KOMBINACE RŮZNÝCH METOD V předchozích podkapitolách byly nastíněné jednotlivé možnosti převodu libovolné bezkontextové gramatiky do 2-SNF. Byly zmíněné výhody každé z metod, u poslední dokonce i možnost optimalizace. Poslední variantou popisovanou v této kapitole je vybraná metoda sloužící k optimalizaci velikosti 2-SNF gramatiky. Snahou je využít všech výhod předešlých metod. Popis Základní myšlenka této metody vychází ze společné vlastnosti a zároveň společné nevýhody všech předešlých způsobů převodu, a sice, že redukovala všechna pravidla z P, která měla tvar k 2, na tvar A ab. Otázkou je, zda-li je nutné redukovat všechna pravidla bez rozdílu až na tvar A ab nebo je možné některá pravidla ponechat, popř. redukovat jen na tvar A ab 1 B 2. Odpověd zní, že existují taková pravidla, která lze ponechat ve tvaru A ab 1 B 2. Jsou to taková pravidla, jejichž levá strana se nikdy nevyskytuje na pozici, která bude rozgenerovávána. Postup Do zvláštní množiny budeme umist ovat ty nonterminály, které budou později rozgenerovávány. Množinu označíme R. Pro ty nonterminály z N, které nejsou součástí R, musíme provést test, zda také nepatří do množiny R. 1. Na začátku je množina R prázdná. Hledáme nonterminální symbol z levé strany prvního pravidla na pravé straně některého pravidla z P. Není-li nalezen, nebude se nikdy rozgenerovávat. Můžeme tedy ta pravidla, která mají na levé straně tento nonterminál a zároveň k 2 redukovat až na k = 2. 2. Je-li hledaný nonterminál nalezen na některé z pravých stran, pak to ještě neznamená, že bude rozgenerováván. Například pro tyto dvě pravidla: je třeba rozlišit situace na: A ab 1...B k B 2 ab 1...A...B k (a) je jisté, že rozgenerováváná pozice není na pozici k (b) při délce pravidla k = 4 je potřeba nejprve otestovat B 2 pokud bude B 2 posléze rozgenerováván, pak pro nonterminál A je nerozgenerovávaná pozice na k = 4. pokud nebude B 2 rozgenerovávána, pak pro nonterminál A jsou nerozgenerováváné pozice na k = 2,4. (c) je-li A na pozici k = 1 nemusí být nutně rozgenerováván, ale závisí to na nonterminálu B 2, proto je potřeba rekurzivně otestovat nonterminál B 2 (d) pro ostatní případy nastává nutnost rozgenerování nonterminálu
3. V průběhu zjišt ování, zda bude nonterminál redukován, automaticky ukládáme nonterminály na rozgenerováváných pozicích do množiny R. Pro redukování délky pravé strany se předpokládá metoda popsaná v 2.1, popř 2.2. Jako další možnost se nabízí použít pro redukci metodu popsanou v 2.3, s tím spojené využití předpřípravy gramatiky. Byly by ovšem nutné zásahy do postupu, protože se změní pozice, v nichž už není nonterminál rozgenerováván. Výhodou této metody je, že se seznam rychle plní, tudíž není potřeba pro každý nonterminál z množiny N na levé straně pravidel množiny P testovat, zda se objeví na první pozici pravé strany některého pravidla z množiny P. Tato metoda má svá omezení, především je potřeba zdůraznit, že optimalizace se projeví jen na gramatikách s dostatečně mocnou množinou N a P. 2.5 REPREZENTACE GRAMATIKY V GRAFU Závěrečná podkapitola, která popisuje reprezentaci gramatiky v grafu, se vymyká předchozím popsaným metodám. Také zde nebude popsána jednoznačně metodika, která by byla použitelná při optimalizaci velikosti gramatik, ale pouze nástin myšlenky. Grafové struktury jsou v programovacích technikách velmi známé a oblíbené. Snad nejpoužívanější a nejznámější 1 graf je binární strom. Způsob reprezentace gramatiky bude vysvětlen na příkladu jednoduché gramatiky G = ({A,B 1,C 1,D 1 },{a,b,c,d},p,a), kde množina P obsahuje tato pravidla: A ab 1 C 1 D 1 B 1 bc 1 D 1 C 1 cd 1 D 1 d Tato gramatika je schopná vygenerovat jedinou větu jazyka L(G), a to abcddcdd. A -> a B_1 C_1 D_1 B_1 -> b C_1 D_1 C_1 -> c D_1 D_1 -> d Obrázek 5: Reprezentace gramatiky v grafu Popišme si vlastnosti zobrazení gramatiky v grafu. Každé pravidlo tvoří uzel grafu, vychází z něho tolik hran, kolik nonterminálů má na pravé straně. Tyto hrany vedou k uzlu, 1 pominu-li strukturu seznam, která je speciálním případem stromu
jehož levá strana se shoduje s nonterminálem na pravé straně. Má-li pravidlo více alternativ, vzniká tím pádem více podgrafů. Na obrázku 5 vidíme jednoduchý graf gramatiky G. Z grafu zjistíme, že není žádná hrana, která by vedla zpět na startovní symbol A. To značí nerekurzivní gramatiku, která popisuje konečný jazyk. Z počtu hran, které vedou k určitému nonterminálu zjistíme počet pravidel, kde se daný nonterminál vyskytuje. Pořadí nonterminálu v pravidle odpovídá pořadí hrany. Tak například k nonterminálu A nevede žádná hrana, z toho můžeme usoudit, že nonterminál A se nevyskytuje na žádně z pravých stran, a proto by v průběhu redukce došlo ke zkrácení na k = 2. K nonterminálu B 1 sice vede hrana, je tedy nutné zjistit, zda se bude otcovský uzel redukovat a kolikátá hrana je to v pořadí, tím i zda dojde k rozgenerování uzlu B 1. V tuto chvíli jsme jednoduše uspořili dvě nadbytečná pravidla a dva nové nonterminály, které by vznikly, kdybychom použili postupu dle 2.1. Zjistíme, že se nonterminál B 1 nachází na pozici, která nebude zahrnuta do redukce. A tak bychom mohli pokračovat dále. Z implementačního hlediska je tato struktura velice výhodná, protože pohyb a vyhledávání v gramatice se děje pomocí postupu po hranách. Dále je možné aplikovat některé algoritmy nad obecným grafem. 3 ZÁVĚR V práci byly popsány různé přístupy pro převod libovolné bezkontextové gramatiky do 2-SNF. Byl také popsán vlastní způsob převodu, který se snaží o minimalizaci nárůstu počtu nových nonterminálů a pravidel. Dále byl nastíněn další alternativní způsob reprezentace gramatiky, a to v grafu, kterého by se dalo využít v procesu transformace Greibachové normální formy do 2-SNF. Hlavním přínosem této práce je souhrn různých přístupů při transformaci libovolné bezkontextové gramatiky do 2-SNF. Důležitým výstupem této práce je navržená metoda, která převádí Greibachové normální formu do 2-SNF s ohledem na počet nově vznikajících nonterminálů a pravidel. Tato metoda slouží jako podklad pro pozdější implementaci, která bude navázána na dřívější již implementovaný systém. REFERENCE [1] Češka, M., Rábová, Z.: Gramatiky a jazyky, VUT Brno 1992 [2] Češka, M., Rábová, Z.: Gramatiky a jazyky cvičení, VUT Brno 1992 [3] Harrison, M. A.: Introduction to Formal Language Theory, Addison-Wesley Publishing company, Inc. 1978 [4] Chytil, M.: Teorie automatů a formálních jazyků, Univerzita J. E. Purkyně v Brně 1982 [5] Melichar, B.: Gramatiky a automaty, ČVUT Praha 1978
[6] Kelemenová, A.: Complexity of Normal Form Grammars, TCS 28 s. 299 314 1984 [7] Koch, R., Blum, N.: Greibach Normal Form Transformation, Revisited, In Reischuk and Morvan, editors, STACS 97 Proceedings, s 47 54, New York, NY, 1997. SpringerVerlag. [8] Suchánek, J.: Tranformace bezkontextových gramatik do silné normální Greibachové formy, FIT VUT Brno 2002 [9] Urbanek, F. J.: On Greibach Normal Form Construction, TCS 40 s. 315 317 1985 [10] Wood, D.: Theory of Computation, John Wiley & Sons, Inc. 1987