Draft:Нормална форма Чомског

У теорији формалних језика, контекстно-слободна граматика, G, је у Чомски нормалној форми (Ноам Чомски. је први описао ову форму) ако су сва њена продукциона правила у облику :

A → BC,   или

A → a,   или

S → ε,

гдје су A, B и C нетерминални симболи, слово a је терминални симбол (симбол који представља константну вриједност), S је почетни симбол, а ε означава празан низ карактера. Такође, ни B ни C не могу бити почетни симболи, а треће продукционо правило може се појавити само ако је ε у L(G), језику који производи контекстно-слободна граматика G.

Свака граматика у Нормалној форми Чомског је контекстно-слободна, и обрнуто, свака контекстно-слободна граматика може бити трансформисана у еквивалентну која је у Нормалној форми Чомског и има величину не већу од квадрата величине оригиналне граматике.

Претварање граматике у Нормалну форму Чомског
Да би се граматика претворила у Нормалну форму Чомског, примјењује се низ једноставних трансформација у одређеном редослиједу; ово је описано у већини уџбеника о теорији аутомата. Презентација овдје слиједи Хопкрофта и Улмана (1979), али је прилагођена да користи називе трансформација из Лангеа и Леиßа (2009). Свака од сљедећих трансформација успоставља једну од особина потребних за Нормалну форму Чомског.""''' ПОЧЕТАК: Елиминисати почетни симбол са десне стране. '""Увести нови почетни симбол S''0, и ново правило"S0 → S,"гдjе је S претходни почетни симбол. Ово не мијења језик који граматика производи, и S0 се неће појавити на десној страни ниједног правила."" ТЕРМИНАЛ: Елиминисати правила са непојединаченим терминалима ""За уклањање сваког правила"A → X1 ... a ... Xn"са терминалним симболом a који није једини симбол на десној страни, увести, за сваки такав терминал, нови нетерминални симбол Na и ново правило


 * Na → a.

Промјенити свако правило


 * A → X1 ... a ... Xn

у


 * A → X1 ... Na ... Xn

Ако се на десној страни јављају више терминалних симбола, истовремено замјени сваки од њих његовим одговарајућим нетерминалним симболом. Ово не мијења језик који производи граматика .""''' БИНАРИЗАЦИЈА: Избаци правила која имају на десној страни више од 2 нетерминална симбола. '''

Замјенити свако правило


 * A → X1 X2 ... Xn

са више од 2 нетерминала X1, ..., Xn са правилом


 * A → X1 A1,
 * A1 → X2 A2,
 * An-2 → Xn-1 Xn,
 * An-2 → Xn-1 Xn,

гдје су Ai нови нетерминални симболи. Опет, ово не мијења језик који производи граматика ."" БРИСАЊЕ: Елиминисати ε-правила ""ε-правило је правило облика"A → ε,"гдје A није S0, почетни симбол граматике.

Да бисмо елиминисали сва правила овог облика, прво одредимо скуп свих нетерминала који изводе ε. Хопкрофт и Улман (1979) називају такве нетерминале празан (nullable) и израчунавају их на сљедећи начин:


 * Ако постоји правило A → ε, онда је A празан.
 * Ако постоји правило A → X1 ... Xn, и сваки Xi је празан, тада је и A празан.

Добијамо посредну граматику замјеном сваког правила"A → X1 ... Xn"у свим верзијама у којима је неки празан Xi изостављен. У овој граматици, бришемо свако ε-правило, осим ако је лијева страна почетни симбол, добија се трансформисана граматика.

На примјер, у сљедећој граматици са почетним симболом S0:


 * S0 → AbB | C
 * B → AA | AC
 * C → b | c
 * A → a | ε

нетерминал A, и самим тим и B, је празан, док C и S0 нису. Затим добијамо сљедећу посредну граматику:


 * S0 → AbB | Ab B  |  A bB |  A b B    |   C
 * B → AA |  A A | A A  |  A ε A    |   AC |  A C
 * C → b | c
 * A → a | ε

У овој граматици, сва ε-правила су "уграђена на мјесту позива". У сљедећем кораку, можемо их обрисати, чиме добијамо граматику:


 * S0 → AbB | Ab | bB | b   |   C
 * B → AA | A   |   AC | C
 * C → b | c
 * A → a

Ова граматика производи исти језик као и оригинални примјер граматике,

{ab, aba, abaa, abab, abac, abb, abc, b, bab, bac, bb, bc, c}, али нема ε-правила."" ЈЕДИНИЧНО ПРАВИЛО: Елиминисати јединична правила ""Јединично правило је правило облика"A → B,"гдје су A, B нетерминални симболи. Да би се ово правило уклонило, за свако правило"B → X1 ... Xn,"гдје је X1 ... Xn низ карактера нетерминала и терминала, додати правило"A → X1 ... Xn"осим ако је ово јединично правило које је већ уклоњено или се уклања. Прескакање нетерминалног симбола B у насталој граматици је могуће због тога што је B члан јединичног затварања нетерминалног симбола A

 Редослијед трансформација 

Када се бира редослијед примјене горе наведених трансформација, треба имати у виду да неке трансформације могу уништити резултат који је постигнут другима. На примјер, ПОЧЕТАК ће поново увести јединично правило ако се примјени након ЈЕДИНИЧНО ПРАВИЛО. Табела показује који редослиједи су дозвољени. Осим тога, у најгорем случају, увећање величине граматике зависи од редоследа трансформација. Користећи |G| да означимо величину оригиналне граматике G, увећање величине у најгорем случају може се кретати од |G|² до 2² |G|, у зависности од алгоритма трансформације који се користи. Увећање величине граматике зависи од редоследа између БРИСАЊЕ и БИНАРИЗАЦИЈА. Може бити експоненцијално када се прво обави БРИСАЊЕ, али је линеарно у другим случајевима. ЈЕДИНИЧНО ПРАВИЛО може довести до квадратичног увећања величине граматике. Редослиједи ПОЧЕТАК, ТЕРМИНАЛ, БИНАРИЗАЦИЈА, БРИСАЊЕ, ЈЕДИНИЧНО ПРАВИЛО и ПОЧЕТАК, БИНАРИЗАЦИЈА, БРИСАЊЕ, ЈЕДИНИЧНО ПРАВИЛО, ТЕРМИНАЛ доводе до најмањег (тј. квадратичног) увећања.

Примјер
Сљедећа граматика, са почетним симболом Expr, описује поједностављену верзију свих синтаксички исправних аритметичких израза у програмским језицима као што су C или Algol60. Број и промјенљива се овдје сматрају терминалним симболима ради једноставности, јер у фронтенду компилатора њихова интерна структура обично није битна за парсер. Терминални симбол "^" означава степеновање у Algol60. У кораку "ПОЧЕТАК" горе наведеног алгоритма конверзије, само је правило S0→Expr додано у граматику. Након корака "ТЕРМИНАЛ", граматика изгледа овако: Након корака "БИНАРИЗАЦИЈА", добија се сљедећа граматика: Пошто нема ε-правила, корак "БРИСАЊЕ" не мења граматику. Након корака "ЈЕДИНИЧНО ПРАВИЛО", добија се сљедећа граматика, која је у Нормалној форми Чомског: Са Na у кораку "ТЕРМИНАЛ" представљени су PowOp, Open и Close. Са Ai у кораку "БИНАРИЗАЦИЈА" представљени су AddOp_Term, MulOp_Factor, PowOp_Primary и Expr_Close.

Алтернативна дефиниција
Редукована форма Чомског

Други начин да се дефинише Нормална форма Чомског је:

Формална граматика је у Редукованој форми Чомског ако су сва њена правила производње у облику:"𝐴 → 𝐵𝐶 или""𝐴 → 𝑎,"гдје 𝐴, 𝐵 и 𝐶 су нетерминални симболи, а 𝑎 је терминални симбол. Користећи ову дефиницију, 𝐵 или 𝐶 могу бити почетни симбол. Само оне контекстно-слободне граматике које не генеришу празан низ карактера могу се трансформисати у Редуковану форму Чомског.

Флојдова нормална форма

У писму у коме је предложио термин Бекус-Наур форма (БНФ), Доналд Е. Кнут је споменуо да је БНФ "синтакса у којој све дефиниције имају такав облик може се рећи да је у 'Флојдовој нормалној форми'", ⟨𝐴⟩::= ⟨𝐵⟩ ∣ ⟨𝐶⟩ или

⟨𝐴⟩::= ⟨𝐵⟩ ⟨𝐶⟩ или

⟨𝐴⟩::= 𝑎, гдје ⟨𝐴⟩, ⟨𝐵⟩ и ⟨𝐶⟩ су нетерминални симболи, а 𝑎 је терминални симбол, јер је Роберт В. Флојд пронашао да се свака БНФ синтакса може превести на горе наведени облик 1961. године. Међутим, он је повукао овај термин "јер је без сумње многима служила ова проста чињеница у њиховом раду, и то је само спорадично у односу на главна разматрања Флојдове биљешке." Док Флојдова биљешка наводи оригинални чланак Чомског из 1959. године, писмо Кнута то не чини.

Примјена
Поред његовог теоријског значаја, конверзија у Нормалну форму Чомског се користи у неким алгоритмима као предпроцесирање, на примjер у CYK алгоритму, који је алгоритам за одоздо-према-горе парсирање за контекстно-слободне граматике, као и његовој варијанти вјероватноће CKY алгоритму.

Погледај такође

 * Бекус-Наур форма
 * CYK алгоритам
 * Граибахова нормална форма
 * Курода нормална форма
 * Лема о пумпању за контекстно-слободне језике - њена доказивања се односе на Чомскијеву нормалну форму

Даље читање

 * Коул, Ричард. Претварање CFG-ова у ЧНФ (Нормална форма Чомског), 17. октобар 2007. (pdf) — користи редослијед ТЕРМИНАЛ, БИНАРИЗАЦИЈА, ПОЧЕТАК, БРИСАЊЕ, ЈЕДИНИЧНО ПРАВИЛО.
 * Џон Мартин (2003). Увод у језике и теорију рачунарства. МакГрав Хил. ISBN 978-0-07-232200-2. (Стране 237–240 од одељка 6.6: поједностављени облици и нормални облици.)
 * Мајкл Сипсер (1997). Увод у теорију рачунарства. ПВС Публишинг. ISBN 978-0-534-94728-6. (Стране 98–101 од поглавља 2.1: контекстно-слободне граматике. Страница 156.)
 * Чарлс Д. Елисон (2021) (20. август 2021). Основе рачунарства: Приступачан увод у формални језик. Фреш Сорцес, Инк. ISBN 9780578944173. (странице 171-183 од поглавља 7.1: Нормална форма Чомског)
 * Сипсер, Мајкл. Увод у теорију рачунарства, 2. издање.
 * Александар Медуна (6. децембар 2012). Аутомати и језици: Теорија и примјене. Спрингер Сајенц & Бизнес Медиа. ISBN 978-1-4471-0501-5.