דקדוק חופשי-הקשר

בשפות פורמליות, דקדוק חופשי-הקשר (גם: דקדוק חסר-הקשר) הוא דקדוק אשר כל כלל יצירה בו הוא מהצורה   A → α {\displaystyle \ A\to \alpha } כאשר   A {\displaystyle \ A} הוא משתנה דקדוקי ואילו   α {\displaystyle \ \alpha } היא מחרוזת כלשהי של משתנים דקדוקיים וסימנים טרמינליים. דקדוק חסר הקשר יוצר שפה חופשית הקשר (טיפוס 2 בהיררכיה של חומסקי). המונח "חסר הקשר" מציין כי כלל היצירה עבור   A {\displaystyle \ A} יכול להתבצע ללא חשיבות לשאלה מה נמצא מימינו ומשמאלו של   A {\displaystyle \ A} , כלומר ללא חשיבות להקשר בו הוא מופיע. בדקדוק תלוי הקשר, לעומת זאת, ייתכנו כללי יצירה מהצורה   α A β → α γ β {\displaystyle \ \alpha A\beta \to \alpha \gamma \beta } , כאשר   A {\displaystyle \ A} הוא משתנה דקדוקי ו   α , β , γ {\displaystyle \ \alpha ,\beta ,\gamma } הן מחרוזות כלשהן של משתנים דקדוקיים וסימנים טרמינליים (ייתכן וריקות). דקדוק חסר הקשר G {\displaystyle G} מוגדר על ידי הרביעייה G = ( V , Σ , R , S ) {\displaystyle G=(V,\Sigma ,R,S)} , כאשר: V {\displaystyle V} - קבוצת משתנים Σ {\displaystyle \Sigma } - קבוצת אותיות סופיות (טרמינלים). קבוצה זו מהווה את האלפבית של השפה הנוצרת. R {\displaystyle R} - קבוצת כללי יצירה. כל כלל הופך משתנה למחרוזת של אותיות ומשתנים ( A → α ) ∈ R A ∈ V , α ∈ ( V ∪ Σ ) ∗ {\displaystyle (A\to \alpha )\in R\qquad A\in V,\alpha \in (V\cup \Sigma )^{*}} S {\displaystyle S} - סימן ההתחלה. משתנה מתוך V {\displaystyle V} . אומרים שהדקדוק G {\displaystyle G} יוצר מילה x {\displaystyle x} , אם ניתן להתחיל מהמשתנה S {\displaystyle S} , ועל ידי ביצוע אחד או יותר מכללי היצירה שב- R {\displaystyle R} , להגיע אל המילה x ∈ Σ ∗ {\displaystyle x\in \Sigma ^{*}} . מסמנים במקרה זה S ⇒ ∗ x {\displaystyle S\Rightarrow ^{*}x} . השפה הנוצרת על ידי הדקדוק G {\displaystyle G} , היא אוסף כל המחרוזות x {\displaystyle x} , אותן ניתן לייצר מ- S {\displaystyle S} , על ידי כללי היצירה המוגדרים ב-R. באופן פורמלי, L ( G ) = { x ∣ S ⇒ ∗ x } {\displaystyle L(G)=\{x\mid S\Rightarrow ^{*}x\}} ערך מורחב – הצורה הנורמלית של חומסקי כל דקדוק חסר הקשר לא ריק שאינו יוצר את המילה הריקה ϵ {\displaystyle \epsilon } , ניתן להמרה לדקדוק בו כל כלל יצירה הוא מהצורה A → B C {\displaystyle A\to BC} או A → a {\displaystyle A\to a} כאשר A , B , C {\displaystyle A,B,C} משתנים ו- a {\displaystyle a} טרמינל. צורה זו נקראת הצורה הנורמלית של חומסקי על-שם הבלשן נועם חומסקי. צורה אחרת לדקדוקים חסרי הקשר היא הצורה הנורמלית של גרייבך, הקרויה על-שם מדענית המחשב שילה גרייבך. בדקדוק זה כל כלל יצירה הוא מהצורה A → a X {\displaystyle A\to aX} , כאשר a {\displaystyle a} הוא טרמינל, ו- X {\displaystyle X} הוא רצף של אפס או יותר משתנים. לצורה זו כמה תכונות מעניינות, שכן כל כלל יצירה מוסיף בדיוק אות אחת למילה נוצרת, ולכן אורך המילה נתון על ידי כמות כללי היצירה שהופעלו. כמו כן, ניתן להמיר כל דקדוק מצורת גרייבך לאוטומט מחסנית שאין בו מעברי- ϵ {\displaystyle \epsilon } , ובכך להראות כי תמיד ניתן לבטל מעברי- ϵ {\displaystyle \epsilon } באוטומטי מחסנית. אם עבור דקדוק נתון קיימות שתי דרכים שונות ליצור מילה מסוימת, אומרים שהדקדוק דו-משמעי. לתכונה זה משמעויות בבלשנות ובקומפילציה. קיימות שפות חסרות הקשר שהן דו-משמעויות בצורה אינהרנטית - כל דקדוק היוצר אותן יהיה דו משמעי. עבור שפות שאינן דו-משמעיות בצורה אינהרנטית, קיים דקדוק שאינו דו-משמעי, אך לא ידועה דרך סיסטמית להמיר דקדוק דו-משמעי לדקדוק שאינו דו-משמעי. נוסף על כך, השאלה האם דקדוק נתון הוא דו-משמעי או לאו אינה כריעה, כלומר לא קיים אלגוריתם שפותר אותה. דו-משמעות תחבירית שפה רגולרית ההיררכיה של חומסקי תורת האוטומטים - מונחים שמואל זקס ונסים פרנסיז, ‏אוטומטים ושפות פורמליות ב, האוניברסיטה הפתוחה, 2000 John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman. Introduction to Automata Theory, Languages, and Computation, 3rd Edition, Addison-Wesley, 2006. ISBN 0-321-45536-3. John E. Hopcroft and Jeffrey D. Ullman, Introduction to Automata Theory, Languages and Computation, Addison-Wesley Publishing, Reading Massachusetts, 1979. ISBN 0-201-02988-X. גדי אלכסנדרוביץ', מבוא לדקדוקים חסרי הקשר, באתר "לא מדויק", 5 במרץ 2015 דוגמה לשפה דו-משמעית בצורה אינהרנטית היא השפה L = { a n b n c m d m ∣ n , m ≥ 1 } ∪ { a n b m c m d n ∣ n , m ≥ 1 } {\displaystyle L=\{a^{n}b^{n}c^{m}d^{m}\mid n,m\geq 1\}\cup \{a^{n}b^{m}c^{m}d^{n}\mid n,m\geq 1\}} .