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

edit

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

ABC,   или

Aa,   или

S → ε,

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

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

Претварање граматике у Нормалну форму Чомског

edit

Да би се граматика претворила у Нормалну форму Чомског, примјењује се низ једноставних трансформација у одређеном редослиједу; ово је описано у већини уџбеника о теорији аутомата. Презентација овдје слиједи Хопкрофта и Улмана (1979), али је прилагођена да користи називе трансформација из Лангеа и Леиßа (2009). Свака од сљедећих трансформација успоставља једну од особина потребних за Нормалну форму Чомског.

ПОЧЕТАК: Елиминисати почетни симбол са десне стране.

Увести нови почетни симбол S0, и ново правило

S0S,

гдjе је S претходни почетни симбол. Ово не мијења језик који граматика производи, и S0 се неће појавити на десној страни ниједног правила.

ТЕРМИНАЛ: Елиминисати правила са непојединаченим терминалима

За уклањање сваког правила

AX1 ... a ... Xn

са терминалним симболом a који није једини симбол на десној страни, увести, за сваки такав терминал, нови нетерминални симбол Na и ново правило

Naa.

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

AX1 ... a ... Xn

у

AX1 ... Na ... Xn

Ако се на десној страни јављају више терминалних симбола, истовремено замјени сваки од њих његовим одговарајућим нетерминалним симболом. Ово не мијења језик који производи граматика.

БИНАРИЗАЦИЈА: Избаци правила која имају на десној страни више од 2 нетерминална симбола.

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

AX1 X2 ... Xn

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

AX1 A1,
A1X2 A2,
... ,
An-2Xn-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 нису. Затим добијамо сљедећу посредну граматику:

S0AbB | AbB | AbB | AbB   |   C
BAA | AA | AA | AεA   |   AC | AC
Cb | c
Aa | ε

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

S0AbB | Ab | bB | b   |   C
BAA | A   |   AC | C
Cb | c
Aa

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

{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.

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

Када се бира редослијед примјене горе наведених трансформација, треба имати у виду да неке трансформације могу уништити резултат који је постигнут другима. На примјер, ПОЧЕТАК ће поново увести јединично правило ако се примјени након ЈЕДИНИЧНО ПРАВИЛО. Табела показује који редослиједи су дозвољени.

Међусобно чување резултата трансформације
Трансформација X увијек чуваува (✓)

одн. може поништити (✖) резултат Y:

Y

X

ПОЧЕТАК ТЕРМИНАЛ БИНАРИЗАЦИЈА БРИСАЊЕ ЈЕДИНИЧНО ПРАВИЛО
ПОЧЕТАК ✖️ ✖️
ТЕРМИНАЛ ✖️
БИНАРИЗАЦИЈА
БРИСАЊЕ ✖️
ЈЕДИНИЧНО ПРАВИЛО (✓)*
ЈЕДИНИЧНО ПРАВИЛО чува резултат БРИСАЊАЊЕ

ако је почетак био позван прије

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

Примјер

edit

Сљедећа граматика, са почетним симболом Expr, описује поједностављену верзију свих синтаксички исправних аритметичких израза у програмским језицима као што су C или Algol60. Број и промјенљива се овдје сматрају терминалним симболима ради једноставности, јер у фронтенду компилатора њихова интерна структура обично није битна за парсер. Терминални симбол "^" означава степеновање у Algol60.

 
Стабло апстрактне синтаксе аритметичког израза "а^2+4*б". примјер граматике (горе) и њен нормални облик Чомског (доле)
Expr Term | Expr AddOp Term | AddOp Term
Term Factor | Term MulOp Factor
Factor Primary | Factor ^ Primary
Primary number | variable | ( Expr )
AddOp → + | −
MulOp → * | /

У кораку "ПОЧЕТАК" горе наведеног алгоритма конверзије, само је правило S0Expr додано у граматику. Након корака "ТЕРМИНАЛ", граматика изгледа овако:

S0 Expr
Expr Term | Expr AddOp Term | AddOp Term
Term Factor | Term MulOp Factor
Factor Primary | Factor PowOp Primary
Primary number | variable | Open Expr Close
AddOp → + | −
MulOp → * | /
PowOp → ^
Open → (
Close → )

Након корака "БИНАРИЗАЦИЈА", добија се сљедећа граматика:

S0 Expr
Expr Term | Expr AddOp_Term | AddOp Term
Term Factor | Term MulOp_Factor
Factor Primary | Factor PowOp_Primary
Primary number | variable | Open Expr_Close
AddOp → + | −
MulOp → * | /
PowOp → ^
Open → (
Close → )
AddOp_Term AddOp Term
MulOp_Factor MulOp Factor
PowOp_Primary PowOp Primary
Expr_Close Expr Close

Пошто нема ε-правила, корак "БРИСАЊЕ" не мења граматику. Након корака "ЈЕДИНИЧНО ПРАВИЛО", добија се сљедећа граматика, која је у Нормалној форми Чомског:

S0 number | variable | Open Expr_Close | Factor PowOp_Primary | Term MulOp_Factor | Expr AddOp_Term | AddOp Term
Expr number | variable | Open Expr_Close | Factor PowOp_Primary | Term MulOp_Factor | Expr AddOp_Term | AddOp Term
Term number | variable | Open Expr_Close | Factor PowOp_Primary | Term MulOp_Factor
Factor number | variable | Open Expr_Close | Factor PowOp_Primary
Primary number | variable | Open Expr_Close
AddOp → + | −
MulOp → * | /
PowOp → ^
Open → (
Close → )
AddOp_Term AddOp Term
MulOp_Factor MulOp Factor
PowOp_Primary PowOp Primary
Expr_Close Expr Close

Са Na у кораку "ТЕРМИНАЛ" представљени су PowOp, Open и Close. Са Ai у кораку "БИНАРИЗАЦИЈА" представљени су AddOp_Term, MulOp_Factor, PowOp_Primary и Expr_Close.

Алтернативна дефиниција

edit

Редукована форма Чомског

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

Формална граматика је у Редукованој форми Чомског ако су сва њена правила производње у облику:

𝐴 → 𝐵𝐶 или

𝐴 → 𝑎,

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

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

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

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

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

⟨𝐴⟩::= 𝑎,

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

Примјена

edit

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

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

edit

Биљешке

edit
  1. Онај који производи исти језик
  2. На пример, Хопкрофт, Уллман (1979) су спојили ТЕРМИНАЛ и БИНАРИЗАЦИЈУ у једну трансформацију.
  3. Указивање задржаних и изостављених нетерминала N са N и N, респективно
  4. Ако би граматика имала правило S0 → ε, не би могло бити "уведено", пошто нема "позивних локација". Стога не би могло бити обрисано у наредном кораку.
  5. тј. дужина написана, мјерена у симболима

Референце

edit
  1. Chomsky, Noam (1959). "On Certain Formal Properties of Grammars". Information and Control. 2 (2): 137–167. doi:10.1016/S0019-9958(59)90362-6. Here: Sect.6, p.152ff.
  2. D'Antoni, Loris. "Page 7, Lecture 9: Bottom-up Parsing Algorithms" (PDF). CS536-S21 Intro to Programming Languages and Compilers. University of Wisconsin-Madison. Archived (PDF) from the original on 2021-07-19.
  3. Sipser, Michael (2006). Introduction to the theory of computation (2nd ed.). Boston: Thomson Course Technology. Definition 2.8. ISBN 0-534-95097-3. OCLC 58544333.
  4. Hopcroft, John E.; Ullman, Jeffrey D. (1979). Introduction to Automata Theory, Languages and Computation. Reading, Massachusetts: Addison-Wesley Publishing. ISBN 978-0-201-02988-8.
  5. Hopcroft, John E.; Motwani, Rajeev; Ullman, Jeffrey D. (2006). Introduction to Automata Theory, Languages, and Computation (3rd ed.). Addison-Wesley. ISBN 978-0-321-45536-9. Section 7.1.5, p.272
  6. Rich, Elaine (2007). "11.8 Normal Forms". Automata, Computability, and Complexity: Theory and Applications (PDF) (1st ed.). Prentice-Hall. p. 169. ISBN 978-0132288064. Archived from the original (PDF) on 2023-01-17.
  7. Wegener, Ingo (1993). Theoretische Informatik - Eine algorithmenorientierte Einführung. Leitfäden und Mongraphien der Informatik (in German). Stuttgart: B. G. Teubner. ISBN 978-3-519-02123-0. Section 6.2 "Die Chomsky-Normalform für kontextfreie Grammatiken", p. 149–152
  8. Lange, Martin; Leiß, Hans (2009). "To CNF or not to CNF? An Efficient Yet Presentable Version of the CYK Algorithm" (PDF). Informatica Didactica. 8. Archived (PDF) from the original on 2011-07-19.
  9. Allison, Charles D. (2022). Foundations of Computing: An Accessible Introduction to Automata and Formal Languages. Fresh Sources, Inc. p. 176. ISBN 9780578944173.
  10. Hopcroft et al. (2006)[page needed]
  11. Floyd, Robert W. (1961). "Note on mathematical induction in phrase structure grammars" (PDF). Information and Control. 4 (4): 353–358. doi:10.1016/S0019-9958(61)80052-1. Archived (PDF) from the original on 2021-03-05. Here: p.354
  12. Knuth, Donald E. (December 1964). "Backus Normal Form vs. Backus Naur Form". Communications of the ACM. 7 (12): 735–736. doi:10.1145/355588.365140. S2CID 47537431.
  13. Jurafsky, Daniel; Martin, James H. (2008). Speech and Language Processing (2nd ed.). Pearson Prentice Hall. p. 465. ISBN 978-0-13-187321-6.

Даље читање

edit
  • Коул, Ричард. Претварање 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.