הצורה הנורמלית של גרייבך

בתורת השפות הפורמליות, אומרים כי דקדוק חסר הקשר מוצג בצורה הנורמלית של גרייבך (אותה הגתה שילה גרייבך) אם כל כללי הגזירה שלו הם מהצורה A → σ α {\displaystyle A\rightarrow \sigma \alpha } , כאשר σ {\displaystyle \sigma } סימן טרמינלי, A {\displaystyle A} משתנה שאינו טרמינלי, ו- α {\displaystyle \alpha } מילה המורכבת מאפס משתנים או יותר. כל דקדוק המוגדר באמצעות הצורה הנורמלית של גרייבך הוא חסר הקשר, וכל דקדוק חסר הקשר ששפתו אינה מכילה את המילה הריקה יכול להיכתב באופן שקול כדקדוק בצורה הנורמלית של גרייבך. גם לשפה שכן מכילה את המילה הריקה ניתן להגדיר דקדוק מהצורה הנורמלית של גרייבך, באמצעות הוספת הכלל S → ε {\displaystyle S\rightarrow \varepsilon } לדקדוק שכל כלליו הם מהצורה שהוצגה מעלה. יהי G = ( V , T , P , S ) {\displaystyle G=(V,T,P,S)} דקדוק חופשי הקשר שיוצר שפה כלשהי שלא מכילה את המילה הריקה (אם השפה מכילה את המילה הריקה, אז אחרי ביצוע האלגוריתם נוסיף את הכלל S → ε {\displaystyle S\rightarrow \varepsilon } לקבלת דקדוק מהצורה המורחבת של גרייבך), ונניח ש- V = { A 1 , . . . , A n } {\displaystyle V=\{A_{1},...,A_{n}\}} . נגדיר שתי בניות עזר לפישוט האלגוריתם. לכל כלל ב- P {\displaystyle P} מהצורה A → σ 1 B σ 2 {\displaystyle A\rightarrow \sigma _{1}B\sigma _{2}} , כאשר כל כללי B {\displaystyle B} הם מהצורה B → γ 1 | γ 2 | . . . | γ n {\displaystyle B\rightarrow \gamma _{1}|\gamma _{2}|...|\gamma _{n}} , נשמיט את הכלל A → σ 1 B σ 2 {\displaystyle A\rightarrow \sigma _{1}B\sigma _{2}} ונוסיף במקומו את הכללים B → σ 1 γ 1 σ 2 | σ 1 γ 2 σ 2 | . . . | σ 1 γ n σ 2 {\displaystyle B\rightarrow \sigma _{1}\gamma _{1}\sigma _{2}|\sigma _{1}\gamma _{2}\sigma _{2}|...|\sigma _{1}\gamma _{n}\sigma _{2}} . נפריד את הכללים של כל משתנה A {\displaystyle A} לשתי קבוצות. בקבוצה הראשונה יהיו כל הכללים שגוזרים מילה שמתחילה ב A {\displaystyle A} , ובקבוצה השנייה כל שאר הכללים, כלומר הקבוצה הראשונה תכיל כללים מהצורה A → A σ 1 | A σ 2 | . . . | A σ m {\displaystyle A\rightarrow A\sigma _{1}|A\sigma _{2}|...|A\sigma _{m}} והקבוצה השנייה תכיל את שאר הכללים שנגזרים מ A {\displaystyle A} , נניח A → γ 1 | γ 2 | . . . | γ n {\displaystyle A\rightarrow \gamma _{1}|\gamma _{2}|...|\gamma _{n}} . נוסיף ל- V {\displaystyle V} משתנה חדש, A ′ {\displaystyle A'} ונחליף את כל הכללים ש A {\displaystyle A} גוזר ב- P {\displaystyle P} באופן הבא: לכל 1 ≤ i ≤ m {\displaystyle 1\leq i\leq m} נוסיף את הכללים: A ′ → α i {\displaystyle A'\rightarrow \alpha _{i}} A ′ → α i A ′ {\displaystyle A'\rightarrow \alpha _{i}A'} ולכל 1 ≤ j ≤ n {\displaystyle 1\leq j\leq n} נוסיף את הכללים: A → γ i {\displaystyle A\rightarrow \gamma _{i}} A → γ i A ′ {\displaystyle A\rightarrow \gamma _{i}A'} כעת נציג את האלגוריתם תוך שימוש מתמיד בבניות העזר. בעבור A 1 {\displaystyle A_{1}} , אם קיימים כללים מהצורה A 1 → A 1 σ {\displaystyle A_{1}\rightarrow A_{1}\sigma } , נשתמש בבניית עזר 2 כדי להוסיף לדקדוק משתנה A 1 ′ {\displaystyle A_{1}'} ונפעל על פי הבניה לתיקון כללי הגזירה. לכל משתנה אחר, A i {\displaystyle A_{i}} כאשר 1 ≤ i {\displaystyle 1\leq i} ב- V {\displaystyle V} , תחילה נטפל בכללים מהצורה A i → A j σ {\displaystyle A_{i}\rightarrow A_{j}\sigma } כאשר j ≤ i {\displaystyle j\leq i} באמצעות הפעלת בניית עזר 1 על המשתנה A j {\displaystyle A_{j}} . לאחר מכן, נטפל בכללים מהצורה A k → A k σ {\displaystyle A_{k}\rightarrow A_{k}\sigma } באמצעות בניית עזר 2, תוך הוספת המשתנה A k ′ {\displaystyle A_{k}'} והגדרת כללי בנייה 2. נשים לב שאחרי שביצענו את שלב 1, כל כלל בקבוצת הכללים החדשה שלנו הוא מהצורה A i → σ α {\displaystyle A_{i}\rightarrow \sigma \alpha } כאשר σ {\displaystyle \sigma } טרמינל, או מהצורה A i → A j σ {\displaystyle A_{i}\rightarrow A_{j}\sigma } כאשר i ≤ j {\displaystyle i\leq j} , ובפרט כל הכללים שנגזרים מ A n {\displaystyle A_{n}} הם מהצורה הראשונה. לכל כלל שנגזר מ A k {\displaystyle A_{k}} החל מ k = n − 1 {\displaystyle k=n-1} ועד k = 1 {\displaystyle k=1} נפעיל את בנייה 1 כדי לקבל כללים שכולם מהצורה A k → σ α {\displaystyle A_{k}\rightarrow \sigma \alpha } כאשר σ {\displaystyle \sigma } טרמינל. נדאג שגם כל הכללים של משתני העזר יהיו מהצורה A k ′ → σ α {\displaystyle A_{k}'\rightarrow \sigma \alpha } כאשר σ {\displaystyle \sigma } טרמינל בעזרת בנייה 1. כעת כל הכללים הם מהצורה A → σ α {\displaystyle A\rightarrow \sigma \alpha } או מהצורה A → σ {\displaystyle A\rightarrow \sigma } כאשר σ {\displaystyle \sigma } טרמינל ו- α {\displaystyle \alpha } מורכב הן ממשתנים והן מסימנים טרמינלים. מכיוון שהמטרה שלנו היא להגיע לדקדוק מהצורה של גרייבך, נצטרך לגרום ל α {\displaystyle \alpha } להיות מורכבת אך ורק ממשתנים. אם כל ה α {\displaystyle \alpha } בכל הכללים מורכבות ממשתנים בלבד, סיימנו. אחרת, קיימת α {\displaystyle \alpha } כך שמופיע בה משתנה טרמינלי τ {\displaystyle \tau } . לכל טרמינל כזה שנותר, נגדיר משתנה חדש B τ {\displaystyle B_{\tau }} , נחליף את כל המופעים של τ {\displaystyle \tau } בכל α {\displaystyle \alpha } שהוא מופיע בה ב B τ {\displaystyle B_{\tau }} , ונוסיף את הכלל B τ → τ {\displaystyle B_{\tau }\rightarrow \tau } . כעת בידינו דקדוק מהצורה הנורמלית של גרייבך ששקול לדקדוק המקורי. הצורה הנורמלית של גרייבך משמשת כדי להראות שאם שפה לא מכילה את המילה הריקה, אז ניתן לבנות לה אוטומט מחסנית שלא כולל מסעי אפסילון, בהוכחה שכל שפה חסרת הקשר יכולה להתקבל על ידי אוטומט מחסנית. בנוסף, ניתן להשתמש בצורה הנורמלית של גרייבך למעבר מדקדוק חסר הקשר נתון לאוטומט מחסנית בעבור שפה מסוימת. דקדוק חסר הקשר הצורה הנורמלית של חומסקי שמואל זקס ונסים פרנסיז, ‏אוטומטים ושפות פורמליות ב, האוניברסיטה הפתוחה, 2000 שמואל זקס ונסים פרנסיז, אוטומטים ושפות פורמליות ב, האוניברסיטה הפתוחה, 2000, עמ' 103-109 שילה גרייבך, "A New Normal-Form Theorem for Context-Free Phrase Structure Grammars", הז'ורנל של ACM, ינואר 1965