Normální forma Greibacha
V teoretické informatice , a zejména v teorii formálního jazyka , je algebraická gramatika v Greibachově normální formě (v angličtině, Greibachově normální formě nebo GNF ), pokud správní členové jejích pravidel začínají symbolem terminálu , případně následovaným a nebo více proměnné . Varianta umožňuje dalšímu pravidlu vygenerovat prázdné slovo, pokud je součástí jazyka. Tato normální forma je pojmenována po Sheile Greibachové, která ji představila a prokázala svou existenci.
Existují i jiné normální formy gramatiky, jako je Chomského normální forma , nebo gramatiky bez levé rekurze . Normální forma Greibacha je nejkomplikovanější z těchto normálních forem a byla dále vylepšena.
Popis
Algebraická gramatika je v Greibachově normální formě, pokud jsou všechna její pravidla ve tvaru:
NA→naNA1NA2⋯NAne{\ displaystyle A \ až aA_ {1} A_ {2} \ cdots A_ {n}}![{\ displaystyle A \ až aA_ {1} A_ {2} \ cdots A_ {n}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4131d74cb0a59992f4ad34521f13cac9f039ae3c)
nebo
S→ε{\ displaystyle S \ to \ varepsilon}![{\ displaystyle S \ to \ varepsilon}](https://wikimedia.org/api/rest_v1/media/math/render/svg/eb30bc1a4b59dcdeb095ecfaad991c8e3b0d26c8)
kde je proměnná , je písmeno a
je možná prázdná sekvence proměnných; je axiom a ε je prázdné slovo .
NA{\ displaystyle A}
na{\ displaystyle a}
NA1NA2...NAne{\ displaystyle A_ {1} A_ {2} \ ldots A_ {n}}
S{\ displaystyle S}![S](https://wikimedia.org/api/rest_v1/media/math/render/svg/4611d85173cd3b508e67077d4a1252c9c05abca2)
Gramatika v normální Greibachově podobě je pozoruhodně bez levé rekurze . Hlavní vlastností je, že jakoukoli algebraickou gramatiku lze transformovat do ekvivalentní gramatiky v normální formě Greibacha, teorém založený v roce 1965 Sheilou Greibachovou.
Existuje několik konstrukcí. Pokud neexistuje žádné pravidlo epsilon , je algoritmus jednodušší; v obecném případě dochází k časovým transformacím složitosti a v případě, že gramatika nemá pravidlo jednotky (ve formě proměnné ).
S→ε{\ displaystyle S \ to \ varepsilon}
Ó(ne4){\ displaystyle O (n ^ {4})}
Ó(ne3){\ displaystyle O (n ^ {3})}
NA→B{\ displaystyle A \ až B}
B{\ displaystyle B}![B](https://wikimedia.org/api/rest_v1/media/math/render/svg/47136aad860d145f75f3eed3022df827cee94d7a)
V normální Greibachově formě derivace generuje v každém kroku derivace písmeno daného jazykového slova: délka derivace se proto rovná délce slova. Normální formu lze použít ekvivalentním způsobem k vytvoření tlačítkového automatu, který přijímá slova jazyka v reálném čase, to znamená čte písmeno vstupního slova v každém kroku výpočtu.
Konstrukce
Konstrukce gramatiky v normální formě Greibacha z algebraické gramatiky dané částí předmětů zpracovaných v mnoha teoretických počítačových učebnicích formálních jazyků, automatů a jejich složitosti. Jedna ze staveb je v několika fázích:
Předběžná fáze: odstranění pravidel epsilon
Můžeme předpokládat, že axiom gramatiky se neobjevuje u pravého člena pravidla.
Pravidlo , kde axiom není, je odstraněno; vezmeme v úvahu každé pravidlo, kde se objeví , a přidáme pro každý výskyt pravidlo do gramatiky, pokud nevytvoříme pravidlo epsilon. Například pokud
NA→ε{\ displaystyle A \ to \ varepsilon}
NA{\ displaystyle A}
B→α{\ displaystyle B \ až \ alfa}
NA{\ displaystyle A}
α{\ displaystyle \ alpha}
α=βNAy{\ displaystyle \ alpha = \ beta A \ gamma}
B→βy{\ displaystyle B \ až \ beta \ gama}![{\ displaystyle B \ až \ beta \ gama}](https://wikimedia.org/api/rest_v1/media/math/render/svg/13c8cb498735b34a2dc121539896d40172d1200d)
B→naNAbNAvs.{\ displaystyle B \ na aAbAc}![{\ displaystyle B \ na aAbAc}](https://wikimedia.org/api/rest_v1/media/math/render/svg/423d85fb25b64fa495ab858e970dd6a587e7b376)
přidáme tři pravidla
B→nabNAvs.,B→naNAbvs.,B→nabvs.{\ displaystyle B \ to abAc, B \ to aAbc, B \ to abc}![{\ displaystyle B \ to abAc, B \ to aAbc, B \ to abc}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2428afd48f5d1c87bc03153ed03db5e6f2eea905)
.
Pravidlo, jehož pravý člen obsahuje proměnné, které jsou všechny odvozeny od prázdného slova, se tak může vzdát nových pravidel.
ne{\ displaystyle n}
2ne{\ displaystyle 2 ^ {n}}![2 ^ {n}](https://wikimedia.org/api/rest_v1/media/math/render/svg/8226f30650ee4fe4e640c6d2798127e80e9c160d)
Druhá fáze: odstranění pravidel jednoty
Pravidlo jednotka je pravidlo formy , kde je proměnná. Abychom tento typ pravidla vyloučili, nahradíme takové pravidlo pravidlem
NA→B{\ displaystyle A \ až B}
B{\ displaystyle B}![B](https://wikimedia.org/api/rest_v1/media/math/render/svg/47136aad860d145f75f3eed3022df827cee94d7a)
NA→α{\ displaystyle A \ až \ alfa}![{\ displaystyle A \ až \ alfa}](https://wikimedia.org/api/rest_v1/media/math/render/svg/410e689b665f4055713f33b1c6aba92a1cd79aab)
pro každé pravidlo
B→α{\ displaystyle B \ až \ alfa}![{\ displaystyle B \ až \ alfa}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c08b68b656f351b61efbfad6e66a9b1445389e5b)
(pokud se nejedná o dříve odstraněné pravidlo jednotky). Tato technika je dokončena v případě cyklů (například existence tří pravidel ) identifikací proměnných cyklu: všechny jsou nahrazeny jednou z nich.
NA→B,B→VS,VS→NA{\ displaystyle A \ až B, B \ až C, C \ až A}![{\ displaystyle A \ až B, B \ až C, C \ až A}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c531b9b1c9a17c215a5ed140c510acf39314c0d0)
Formátování normální
Předpokládáme gramatiku bez pravidel ε a bez pravidel jednotek. Předpokládáme číslované proměnné ; definujeme posloupnost gramatik, kde je počáteční gramatika, s tou vlastností, že se proměnné neobjeví v čele správných členů pravidla. Předpokládáme, že gramatika je konstruována, a postupujeme ve dvou fázích
NA1,NA2,...,NAm{\ displaystyle A_ {1}, A_ {2}, \ tečky, A_ {m}}
G0,G1,...,Gne{\ displaystyle G_ {0}, G_ {1}, \ tečky, G_ {n}}
G0{\ displaystyle G_ {0}}
Gi{\ displaystyle G_ {i}}
NA1,...,NAi{\ displaystyle A_ {1}, \ ldots, A_ {i}}
Gi-1{\ displaystyle G_ {i-1}}![{\ displaystyle G_ {i-1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a55806477fa0b372328de290be02d42c3c92fc34)
1. Odstranění levé rekurze proNAi{\ displaystyle A_ {i}}
: odstraníme záhlaví pravidel z : pravidel
NAi{\ displaystyle A_ {i}}
NAi{\ displaystyle A_ {i}}![Mít}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1aed3b5def921afbe6cc48aaf8f9b11c6f1c1e2d)
NAi→NAiα1∣...∣NAiαne∣β1∣...∣βm{\ displaystyle A_ {i} \ rightarrow A_ {i} \ alpha _ {1} \ mid \ ldots \ mid A_ {i} \ alpha _ {n} \ mid \ beta _ {1} \ mid \ ldots \ mid \ beta _ {m}}![{\ displaystyle A_ {i} \ rightarrow A_ {i} \ alpha _ {1} \ mid \ ldots \ mid A_ {i} \ alpha _ {n} \ mid \ beta _ {1} \ mid \ ldots \ mid \ beta _ {m}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/56c8c1035fea0a28b385c2fa54fb7d7909c96502)
kde jsou nezačínají nahrazeny
βj{\ displaystyle \ beta _ {j}}
NA{\ displaystyle A}![NA](https://wikimedia.org/api/rest_v1/media/math/render/svg/7daff47fa58cdfd29dc333def748ff5fa4c923e3)
NAi→β1NAi′∣...∣βmNAi′∣β1∣...∣βm{\ displaystyle A_ {i} \ rightarrow \ beta _ {1} A '_ {i} \ mid \ ldots \ mid \ beta _ {m} A' _ {i} \ mid \ beta _ {1} \ mid \ ldots \ mid \ beta _ {m}}
NAi′→α1NAi′∣...∣αneNAi′∣α1∣...∣αne{\ displaystyle A '_ {i} \ rightarrow \ alpha _ {1} A' _ {i} \ mid \ ldots \ mid \ alpha _ {n} A '_ {i} \ mid \ alpha _ {1} \ mid \ ldots \ mid \ alpha _ {n}}
2. Odstranění hlavičkovýchNAi{\ displaystyle A_ {i}}
výskytů: výskyty proměnných, které se objevují nebo se mohou objevit v hlavičce v pravých členech pravidel, jsou nahrazeny sadou pravidel pro tyto proměnné.
NAj(1≤j≤i){\ displaystyle A_ {j} (1 \ leq j \ leq i)}![{\ displaystyle A_ {j} (1 \ leq j \ leq i)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0a067c1fb5043165851df0b8af119f99c6a9449b)
Pokud na konci zůstanou v pravých členech pravidel jiná než v záhlaví koncová písmena, budou nahrazena další proměnnou , jednou pro každé písmeno , s pravidlem .
Tna{\ displaystyle T_ {a}}
na{\ displaystyle a}
Tna→na{\ displaystyle T_ {a} \ to a}![{\ displaystyle T_ {a} \ to a}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9b3b8ebd463f16950ebab50f5028e7b512e0ee6a)
Příklad
Zde je příklad z knihy Oliviera Cartona (píšeme místo ):
NA,B,VS{\ displaystyle A, B, C}
NA1,NA2,NA3{\ displaystyle A_ {1}, A_ {2}, A_ {3}}![{\ displaystyle A_ {1}, A_ {2}, A_ {3}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/18eb93c88961a573677555bffd4d27cc0557e70d)
Gramatika G 0 :
NA→NAB∣na{\ displaystyle A \ až AB \ mid a}
B→BVS∣b{\ displaystyle B \ až BC \ střední b}
VS→VSNA∣vs.{\ displaystyle C \ až CA \ mid c}
Obě pravidla jsou nahrazena
NA{\ displaystyle A}![NA](https://wikimedia.org/api/rest_v1/media/math/render/svg/7daff47fa58cdfd29dc333def748ff5fa4c923e3)
NA→naNA′∣na,NA′→BNA′∣B{\ displaystyle A \ do aA '\ mid a, \ quad A' \ do BA '\ mid B}![{\ displaystyle A \ do aA '\ mid a, \ quad A' \ do BA '\ mid B}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5ff1e0c603d8582edbfb116a7f9ab9246b41a665)
.
Získáváme:
Gramatika G 1 :
NA→naNA′∣na{\ displaystyle A \ až aA '\ střední a}
NA′→BNA′∣B{\ displaystyle A '\ do BA' \ střední B}
B→BVS∣b{\ displaystyle B \ až BC \ střední b}
VS→VSNA∣vs.{\ displaystyle C \ až CA \ mid c}
Obě pravidla jsou nahrazena
B{\ displaystyle B}![B](https://wikimedia.org/api/rest_v1/media/math/render/svg/47136aad860d145f75f3eed3022df827cee94d7a)
B→bB′∣b,B′→VSB′∣VS{\ Displaystyle B \ až bB '\ mid b, \ quad B' \ až CB '\ mid C}![{\ Displaystyle B \ až bB '\ mid b, \ quad B' \ až CB '\ mid C}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3676822caa7a53a60b29b21517c71bffdd0f9aa1)
a výskyty v horní části
B{\ displaystyle B}
jsou nahrazena těmito dvěma pravidly. Získáváme:
Gramatika G 2 :
NA→naNA′∣na{\ displaystyle A \ až aA '\ střední a}
NA′→bB′NA′∣bNA′∣bB′∣b{\ displaystyle A '\ to bB'A' \ mid bA '\ mid bB' \ mid b}
B→bB′∣b{\ displaystyle B \ až bB '\ střední b}
B′→VSB′∣VS{\ displaystyle B '\ do CB' \ střední C}
VS→VSNA∣vs.{\ displaystyle C \ až CA \ mid c}
Podobně jsou dvě pravidla nahrazena, v prvním kroku,
VS{\ displaystyle C}![VS](https://wikimedia.org/api/rest_v1/media/math/render/svg/4fc55753007cd3c18576f7933f6f089196732029)
VS→vs.VS′∣vs.,VS′→NAVS′∣NA{\ displaystyle C \ to cC '\ mid c, \ quad C' \ to AC '\ mid A}![{\ displaystyle C \ to cC '\ mid c, \ quad C' \ to AC '\ mid A}](https://wikimedia.org/api/rest_v1/media/math/render/svg/8e1e663386c02b141d4e092dd072d5cc7c38f0eb)
,
ale přední proměnná je nahrazena jejími pravidly, stejně jako přední proměnná . Dostaneme gramatiku:
NA{\ displaystyle A}
VS{\ displaystyle C}![VS](https://wikimedia.org/api/rest_v1/media/math/render/svg/4fc55753007cd3c18576f7933f6f089196732029)
Gramatika G 3
NA→naNA′∣na{\ displaystyle A \ až aA '\ střední a}
NA′→bB′NA′∣bNA′∣bB′∣b{\ displaystyle A '\ to bB'A' \ mid bA '\ mid bB' \ mid b}
B→bB′∣b{\ displaystyle B \ až bB '\ střední b}
B′→vs.VS′B′∣vs.B′∣vs.VS′∣vs.{\ displaystyle B '\ až cC'B' \ střední cB '\ střední cC' \ střední c}
VS→vs.VS′∣vs.{\ displaystyle C \ až cC '\ střední c}
VS′→naNA′VS′∣naVS′∣naNA′∣na{\ displaystyle C '\ do aA'C' \ střední aC '\ střední aA' \ střední a}
Jiné běžné formy
Kvadratická normální forma
Gramatika je v Greibachově kvadratické normální formě, pokud jsou všechna její pravidla v podobě
NA→naPROTI{\ displaystyle A \ až aV}![{\ displaystyle A \ až aV}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d9d580be767585eb30eaa09572e8232ea8fb14c6)
kde se skládá z nejvýše dvou proměnných, takže pokud navíc mají správní členové pravidel délku nejvýše 3. Výše uvedená gramatika a gramatika:
PROTI{\ displaystyle V}![PROTI](https://wikimedia.org/api/rest_v1/media/math/render/svg/af0f6064540e84211d0ffe4dac72098adfa52845)
S→naSS|b{\ Displaystyle S \ ASS | b}![{\ Displaystyle S \ ASS | b}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0442c911a63cdb7c792ae3ccf8960a8cdc9f9229)
jazyk Lukasiewicz jsou v kvadratické formě, gramatiky
S→naSSS|b{\ displaystyle S \ k aSSS | b}![{\ displaystyle S \ k aSSS | b}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a6d134b0364a5d27a8a516cc0a6602c54aa71f22)
není. Lze jej transformovat do kvadratické gramatiky seskupením po sobě jdoucích výskytů; zde představíme novou proměnnou a gramatiku nahradíme:
T{\ displaystyle T}![T](https://wikimedia.org/api/rest_v1/media/math/render/svg/ec7200acd984a1d3a3d7dc455e262fbe54f7f6e0)
S→naST|b,T→SS{\ displaystyle S \ k AST | b, \ quad T \ k SS}![{\ displaystyle S \ k AST | b, \ quad T \ k SS}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b481c1c22f7371088579d3b671ee0a5a0f3ee2be)
Gramatika již není v normální Greibachově formě, ale stejně jako dříve nahradíme přední proměnnou v pravidle pro , což dává , tedy
T{\ displaystyle T}
T→naSSSS∣bS{\ displaystyle T \ k aSSSS \ mid bS}![{\ displaystyle T \ k aSSSS \ mid bS}](https://wikimedia.org/api/rest_v1/media/math/render/svg/66bcea1b65d8c8fbbca22beb697a15d55d4cf217)
S→naST|b,T→naTT∣bS{\ displaystyle S \ k AST | b, \ quad T \ k aTT \ mid bS}![{\ displaystyle S \ k AST | b, \ quad T \ k aTT \ mid bS}](https://wikimedia.org/api/rest_v1/media/math/render/svg/038a81669d0ec11888ee6fc102bd280f00499d48)
.
Bilaterální normální forma
Gramatika je v normální formě oboustranného nebo normální formě duálního z Greibachové-li spustit všechna její pravidla a konec s koncovou dopisem formálně pokud pravidla členů práv ve kterém a je abeceda terminál a non-terminál gramatiky. Gramatika je v bilaterální kvadratické normální formě, pokud jsou v ní praví členové pravidel , takže pokud jsou navíc praví členové pravidel v délce menší nebo rovné 4. Tuto konstrukci představil Günter Hotz.
Σ∪ΣPROTI∗Σ{\ displaystyle \ Sigma \ cup \ Sigma V ^ {*} \ Sigma}
Σ{\ displaystyle \ Sigma}
PROTI{\ displaystyle V}
Σ∪Σ(ε∪PROTI∪PROTI2)Σ{\ displaystyle \ Sigma \ cup \ Sigma (\ varepsilon \ cup V \ cup V ^ {2}) \ Sigma}![{\ displaystyle \ Sigma \ cup \ Sigma (\ varepsilon \ cup V \ cup V ^ {2}) \ Sigma}](https://wikimedia.org/api/rest_v1/media/math/render/svg/02ff5b64f0da96d6d4b37286c8383b90e7f29ff4)
Ostatní stavby
Jinou algebraickou konstrukci navrhl Daniel J. Rosenkrantz. Je založen na řešení soustavy rovnic v algebře částí na volném monoidu. Tato metoda vede přímo k kvadratické gramatice, pokud vycházíme z gramatiky v Chomského normální formě . Další konstrukce a zevšeobecnění byly dány různými autory.
Poznámky a odkazy
-
Hopcroft a Ullman 1979 , str. 95.
-
(in) Sheila A. Greibach , „ The New Normal-Form Theorem for Context-Free Grammars Sentence Structure “ , Journal of ACM , vol. 12, n o 1,Leden 1965, str. 42–52 ( DOI 10.1145 / 321250.321254 ).
-
(in) Norbert Blum a Robert Koch , „ Greibach Normal Form Transformation Revisited “ , Information & Computation , sv. 150, n o 1,
1999, str. 112–118 ( DOI 10.1006 / inco.1998.2772 , číst online ).
-
Představujeme, co se týče konstrukce Chomského normální formy , novou proměnnou, která se stává axiomem, a jediné další pravidlo , kde je starý axiom.S0{\ displaystyle S_ {0}}
S0→S{\ displaystyle S_ {0} \ to S}
S{\ displaystyle S}
-
Hopcroft, Motwani a Ullman 2007 , s. 268.
-
Carton 2008 .
-
Günter Hotz, „ Normální tvarové transformace bezkontextových gramatik “, Acta Cybernetica , roč. 4, n o 1,
1978, str. 65-84.
-
(in) Joost Engelfriet , „ Elementární důkaz dvojí normální formy Greibacha “ , Information Processing Letters , sv. 44, n O 6,
1992, str. 291–293 ( DOI 10.1016 / 0020-0190 (92) 90101-Z ).
-
Daniel J. Rosenkrantz, „ Maticové rovnice a normální tvary pro bezkontextové gramatiky “, Journal of ACM , sv. 14, N O 3,
července 1967, str. 501–507.
-
(in) Ryo Yoshinaka , „ Elementární důkaz zobecnění pravidelné dvojité Greibachovy formy “ , Information Processing Letters , sv. 109, n o 10,2009, str. 490–492 ( DOI 10.1016 / j.ipl.2009.01.015 ).
Bibliografie
Manuály
-
Olivier Carton, Formální jazyky, vyčíslitelnost a složitost: bakalářský a magisterský titul z matematiky nebo informatiky, výpočetní technika možnost agregace matematiky , Paříž, Vuibert,2008, 237 s. ( ISBN 978-2-7117-2077-4 , číst online ) - Oddíl 2.5 Normální forma Greibach.
- John E. Hopcroft a Jeffrey D. Ullman , Úvod do teorie automatů, jazyky a výpočty , Addison-Wesley,1979
- (en) John E. Hopcroft , Rajeev Motwani a Jeffrey D. Ullman , Úvod do teorie automatů, jazyků a výpočtů , Addison-Wesley ,2007, 3 e ed. ( ISBN 978-0-32146225-1 )
-
(en) John E. Hopcroft, Rajeev Motwani a Jeffrey D. Ullman, Úvod do teorie automatů, jazyků a výpočtů , Pearson Addison Wesley,2007, 3 e ed. , xvii + 535 str. ( ISBN 978-0-321-45536-9 a 0-321-45536-3 ) - strana 277.
-
(en) Peter Linz, Úvod do formálních jazyků a automatů , Jones & Bartlett Learning,2001, 410 str. ( ISBN 978-0-7637-1422-2 a 0763714224 , číst online ).
-
(de) Katrin Erk a Lutz Priese, Theoretische Informatik: eine umfassende Einführung , Berlin, Springer,2008, 485 s. ( ISBN 978-3-540-76319-2 , OCLC 244015158 ) - 6.8.1 6.3 Chomsky- und Greibach-Normalform str. 121 .
-
(en) Michael A. Harrison, Úvod do teorie formálního jazyka , čtení, mše sv. ua, Addison-Wesley,1978, 594 s. ( ISBN 0-201-02955-3 , OCLC 266962302 ) - Oddíl 4.6 Greibachova normální forma, s. 111-120 .
Třídy
Podívejte se také
<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">