שפה חופשית הקשר

במדעי המחשב, שפה חופשית הקשר (או שפה חסרת הקשר) היא שפה פורמלית אשר קיים דקדוק חסר הקשר המגדיר אותה; כלומר, שפה  היא שפה חופשית הקשר אם קיים דקדוק חסר הקשר  כך ש- היא אוסף כל המילים שניתן לגזור מהסימן התחילי של . ניתן להוכיח, ששפה היא חופשית הקשר אם ורק אם קיים אוטומט מחסנית לא דטרמניסטי המקבל אותה.

משפחת השפות חופשיות ההקשר סגורה תחת פעולות של איחוד ושרשור שפות, אך לא תחת חיתוך והפרש (להבדיל מהשפות הרגולריות).

הגדרה פורמלית
מבחינה פורמלית נהוג להגדיר שפה חופשית הקשר כשפה שנוצרת על ידי דקדוק חופשי הקשר (דקדוק מטיפוס 2 בהיררכיה של חומסקי). דקדוק  ייקרא חופשי הקשר אם ורק אם כל כלל יצירה בו הוא מהצורה  כאשר  הוא משתנה דקדוקי ואילו  היא מחרוזת כלשהי של משתנים דקדוקיים וסימנים טרמינליים.

המונח "חופשית הקשר" בא מכך שההחלפה של  צריכה להתבצע ללא חשיבות לשאלה מה נמצא מימינו ומשמאלו של , כלומר ללא חשיבות להקשר בו הוא מופיע.

דוגמה
השפה  היא שפה חופשית הקשר ואינה שפה רגולרית. דקדוק חופשי הקשר שיוצר אותה הוא הדקדוק שמכיל את המשתנה  והסימנים הטרמינליים  ואת כלל היצירה .

לעומת זאת, השפה  אינה חופשית הקשר, ניתן להוכיח זאת על נקלה באמצעות שימוש בלמת הניפוח לשפות חופשיות הקשר.

 סגירות 
משפחת השפות חופשיות ההקשר סגורה תחת מספר פעולות:
 הפעלת הומומורפיזם על מילות הקוד (התאמה השומרת על פעולת השרשור)
 שרשור שתי שפות זו לזו
 הפעלת סגור קלין על שפה
 איחוד שתי שפות
 חיתוך עם שפה רגולרית

לעומת זאת, משפחה זו אינה סגורה תחת הפעולות:
 השלמת שפה
 חיתוך עם שפה חופשית הקשר
 הפרש בין שתי שפות חופשיות הקשר

בעיות הכרעה הקשורות לשפות חופשיות הקשר
מספר שאלות הקשורות לשפות חופשיות הקשר לא כריעות, בהן:
שקילות: נתונים שני דקדוקים A ו-B, האם שתי השפות שהם מגדירים שוות, כלומר ?
 זרות: נתונים שני דקדוקים A ו-B, האם שתי השפות שהם מגדירים לא נחתכות, כלומר ? 
הכלה: נתונים שני דקדוקים A ו-B, האם שפה אחת מוכלת בשנייה, כלומר ?
הערה: כל הבעיות האלה כריעות כשמדובר בשפות רגולריות. 

לעומת זאת השאלות הבאות כריעות:
 שפה ריקה: בהינתן דקדוק, האם השפה שהוא מגדיר ריקה? 
סופיות: בהינתן דקדוק, האם השפה שהוא מגדיר סופית?
 חברות בשפה: בהינתן דקדוק A ומחרוזת X האם X בשפה L(A)?

 קישורים חיצוניים 
ספריית boost לשפות חופשיות הקשר בC++
ספריית pyparsing לשפות חופשיות הקשר בפייתון 

קטגוריה:שפות פורמליות