אוטומטים ושפות פורמליות/תכונות של שפות חסרות הקשר/דו-משמעות

מתוך testwiki
קפיצה לניווט קפיצה לחיפוש

תבנית:אוטומטים ושפות פורמליות נאמר שדקדוק הוא דו-משמעי (לעתים גם: רב-משמעי, ambiguous) אם קיימת בשפה הנוצרת על-ידי הדקדוק מילה, שניתן ליצור אותה בשני אופנים שונים. כלומר, אם קיימים שני עצי-גזירה שונים עבור אותה המילה. דוגמא לדקדוק דו-משמעי הוא הדקדוק הבא

S0S1ε01

קל לראות כי ניתן ליצור את המילה 01 בשני אופנים שונים: S0S10ε1=01 אך גם S01. עבור דוגמא זו קל לשנות את הדקדוק כך שיהיה חד-משמעי. למשל S0S1ε יוצר את אותה השפה, ואינו דו-משמעי.


דוגמא נוספת: הדקדוק SSSa הינו דו-משמעי. להלן שני עצי יצירה עבור המילה aaa:

מאידך, הדקדוק SaSε יוצר את אותה שפה (aa*), ואינו דו משמעי.

עץ היצירה היחיד של המילה aaa בדקדוק שאינו דו-משמעי

תבנית:תרגיל

דו משמעות אינהרנטית

מחלקת השפות חופשיות ההקשר נחלקות לשתי תת-מחלקות:

  1. שפות שאינן דו-משמעיות
  2. שפות דו-משמעיות באופן אינהרנטי

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

L={anbncmdmn,m1}{anbmcmdnn,m1}

מילים מהצורה anbncndn תמיד יהיו בעלי שני עצי גזירה שונים, אחד עקב הכללים שמייצרים את anbncmdm והשני עקב הכללים שמייצרים את anbmcmdn עבור n=m. תבנית:להשלים

כריעות בעיית הדו-משמעות

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

L={GG is unambiguous grammar}

(זהו נושא מתקדם השייך לקורס תורת החישוביות)

תבנית:אוטומטים ושפות פורמליות