שפה חופשית הקשר היא שפה פורמלית שיש לה דקדוק חסר הקשר (CFG). דקדוק חסר הקשר הוא אוסף כללים שמחליפים משתנה דקדוקי אחד בכל פעם במחרוזת של משתנים וסימנים סופיים.
דקדוק G חופשי הקשר כולל רק כללים מהצורה A → α, כאשר A הוא משתנה ו־α היא מחרוזת של משתנים וסימנים טרמינליים. השם "חסר הקשר" אומר שהחלפת A נעשית בלי להתחשב במה שסביבו.
שפה היא חופשית הקשר אם קיימת דקדוק כזה שמייצר את כל המילים שלה. שפות אלה שוות מבחינת כוח ביטוי לאוטומט מחסנית לא דטרמיניסטי (NPDA), כלומר ניתן להראות שלכל דקדוק כזה יש אוטומט מקביל ולהיפך.
השפה של מחרוזות שבהן יש n פעמים את האות a ואז n פעמים את האות b (למשל aaabbb) היא שפה חופשית הקשר ולא רגולרית. דקדוק יוצא דופן שמייצר אותה משתמש במשתנה S ובכלל S → aSb | ab.
לעומתה, השפה שבה יש n פעמים a, אחר כך n פעמים b ואז n פעמים c אינה שפה חופשית הקשר. ניתן להוכיח זאת, למשל בעזרת לומת הניפוח (pumping lemma) לשפות חופשיות הקשר, כלי שמראה מגבלות על מה שאפשר לייצר.
משפחת השפות חופשיות ההקשר סגורה תחת פעולות כמו איחוד (חיבור שתי שפות) ושרשור (חיבור מילים אחת אחרי השנייה). היא אינה סגורה תחת פעולות כמו חיתוך (חיפוש מילים מופיעות בשתי השפות) והפרש (מילים שנמצאות באחת ולא בשנייה).
חלק מהשאלות על שפות חופשיות הקשר אינן כריעות, כלומר אין אלגוריתם שמחליט אותן לכל שפה כזו. למען ההשוואה, בעיות אלה הן כריעות כשמדובר בשפות רגולריות.
שפה חופשית הקשר היא קבוצה של מילים שמיוצרת על ידי כללים פשוטים. דקדוק חסר הקשר הוא קבוצת כללים שמחליפים סימן אחד בכל פעם. ההחלפה לא תלויה במה שמסביב לסימן.
כלל בדקדוק כזה מחליף משתנה בשרשרת של סימנים ומשתנים. כך בונים את כל המילים בשפה.
יש שפה של מחרוזות שבהן יש מספר אחד של אותיות a ואז אותו מספר של אותיות b. לדוגמה: aab b (שני a ואז שני b). שמייצרים אותה עם כלל שמחליף S ב־a S b או ב־a b.
יש שפה שמורכבת מאותיות a, b ו־c באותו מספר בכל פעם. אותה שפה אי אפשר לייצר עם הכללים האלה. אפשר להראות זאת בהוכחה מתמטית שנקראת למת הניפוח (כלי שמראה מי אפשר למתח).
שפות חופשיות ההקשר סגורות תחת איחוד. איחוד זה לחבר שתי שפות ביחד. הן גם סגורות תחת שרשור. שרשור זה לשים שתי מילים אחת אחרי השנייה. הן לא סגורות תחת חיתוך והפרש. חיתוך אומר למצוא מילים שנמצאות בשתי השפות. הפרש אומר לקחת מילים שבאחת השפה אבל לא בשנייה.
יש שאלות על שפות אלה שמחשבים לא יכולים להכריע תמיד. לשפות רגולריות יש פתרונות פשוטים יותר.
תגובות גולשים