1 / 32

תזכורת מתרגולים אחרונים

backend. ניתוח סמנטי. ניתוח תחבירי. ניתוח לקסיקלי. תזכורת מתרגולים אחרונים. מבנה סכמתי של קומפיילר ניתוח תחבירי: Top Down : LL(1) , RD Bottom up : LR(0) SLR LR(1) CLR LALR. אסימונים (tokens). ניתוח מלמטה למעלה – Bottom Up.

zytka
Download Presentation

תזכורת מתרגולים אחרונים

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. backend ניתוח סמנטי ניתוח תחבירי ניתוח לקסיקלי תזכורת מתרגולים אחרונים • מבנה סכמתי של קומפיילר • ניתוח תחבירי: • Top Down: LL(1) ,RD • Bottom up: • LR(0) • SLR • LR(1)\ CLR • LALR אסימונים (tokens)

  2. ניתוח מלמטה למעלה – Bottom Up • מתחילים את הניתוח במילת הקלט, ומנסים להגיע עד למשתנה ההתחלתי (שורש עץ הגזירה). • מחליפים תבנית פסוקית במשתנה הגוזר אותה. • תכונות מנתחי LR: • קוראים את הקלט משמאל לימין (L) • מוצאים את הגזירה הימנית (R) ביותר, בסדר הפוך לסדר הגזירה. • דוגמא לניתוח בגישת Bottom-Up:

  3. מבנהמנתח LR מנתח LR מכיל: סרט הקלט (בעל א"ב של טרמינלי הדקדוק, וסימן סוף הקלט). מחסנית: תוכנה מייצג את התבנית הפסוקית שראינו עד עתה. הניתוח ייעצר כאשר תוכנה יהיה רק S – שורש עץ הגזירה. טבלת ניתוח התלויה בדקדוק (action ו- goto).

  4. מבנהמנתח LR • שלבי בניית המנתח: • בניית אוטומט פרפיקסי לפי הדקדוק הנתון • בניית טבלת הניתוח ע"פ האוטומט הפרפיקסי • הרצת המנתח על קלט: • בכל צעד המנתח יכול: • להכניס תו מהקלט למחסנית • או: • לצמצם תבנית פסוקית בראש המחסנית למשתנה הגוזר אותה

  5. מנתח LR(0) • במנתח LR(0)אין lookahead, כלומר: • מצפים מהאלגוריתם לזהות כל כלל לאחר קריאת כל החלק הימני שלו, בלי קריאת ההמשך. • LR(0) הוא הפשוט ביותר מבין מנתחי LR. • קיימים דקדוקים רבים שהוא לא יצליח לנתח. • אלגוריתם LR(1) מסוגל להתמודד עם רב שפות התכנות הקיימות.

  6. מנתח LR(0) – בניית האוטומט • פריט LR(0) הוא (A→α●β) כאשר • פריט מסמל את מצבו של המנתח. • משמעותו: זיהינו את מה שנמצא לפני הנקודה, וכעת אנו מצפים למצוא את מה שנמצא מימינה. • כל אחד ממצבי אוטומט המנתח הוא קבוצת פריטי LR(0). • שאלה: אילו פריטים אפשר לקבל עבור הכלל: A  ε ?

  7. מנתח LR(0) – בניית האוטומט • פריט LR(0) הוא (A→α●β) כאשר A→αβ P • כל אחד ממצבי אוטומט המנתח הוא קבוצת פריטי LR(0). • סגור (closure) על קבוצת פריטים I מוגדר באופן אינדוקטיבי: • בסיס: closure(I)=I • צעד: אם (A→α●Bβ)closure(I) אז • לכל B→γ P גם (B→●γ)closure(I) • פונקצית המעברים של האוטומט: קבוצת פריטי LR(0)

  8. מנתח LR(0) – בניית האוטומט

  9. דוגמא - LR (0) 0) S’  S 1) S  aA 2) S  aB 3) A  a 4) B  b • בניית אוטומט פרפיקסי: 0 S` ●S S ●aA S ●aB • I0 = closure({S’→●S}) • closure(I)=I • If (A→α●Bβ)closure(I), then for allB→γ P, add (B→●γ) to closure(I)

  10. דוגמא - LR (0) 0) S’  S 1) S  aA 2) S  aB 3) A  a 4) B  b • בניית אוטומט פרפיקסי: 0 S` ●S S ●aA S ●aB 2 S a●A S a●B A  ●a B  ●b a S S’  S● 1

  11. דוגמא - LR (0) 0) S’  S 1) S  aA 2) S  aB 3) A  a 4) B  b • בניית אוטומט פרפיקסי: b 0 S` ●S S ●aA S ●aB 2 S aB● B A a 3 S a●A S a●B A  ●a B  ●b a S aA● 4 S A  a● 5 S’  S● 1 B  b● 6 הערה: מדוע מוסיפים את כלל 0 ? על מנת שהמשתנה ההתחלתי יופיע בחוקי הגזירה רק באגף שמאל. כך בצמצום למשתנה ההתחלתי אכן יובטח שאין עוד סימנים במחסנית ונדע שהסתיימה הגזירה.

  12. מנתח LR(0) – בניית טבלת הניתוח

  13. מנתח LR(0) – בניית טבלת הניתוח אינדקס של מצב באוטומט הגדרת טבלת action למנתח LR(0): הגדרת טבלת goto למנתח LR(0):

  14. דוגמא – בניית טבלת הניתוח b 0 S` ●S S ●aA S ●aB 2 S aB● B A a 3 S a●A S a●B A  ●a B  ●b actions goto 0) S’  S 1) S  aA 2) S  aB 3) A  a 4) B  b a S aA● 4 S A  a● 5 S’  S● 1 B  b● 6

  15. פעולות אפשריות בטבלת ה Action • נסמן ב- t הוא הטרמינל בראש הקלט. • shift(k) - (בצע shift אל מצב k) : • דחוף למחסנית את (k,t). • קדם את הראש הקורא את הקלט צעד אחד ימינה. • reduce(j) - (בצע reduce לפי כלל הגזירה A→α שמספרו הוא j): • הוצא |α| זוגות מהמחסנית. סמן ב k’ את המצב שהתגלה בראש המחסנית. • דחוף למחסנית את (goto[k’,A],A) . • ניתן להוציא כפלט את j (מספר כלל הגזירה בו השתמשנו). הדפסת כללי הגזירה בסדר הפוך תיתן את הגזירה הימנית ביותר. • accept – קבל את המילה. (הערה: שקול לפעולה reduce(0) ). • error – הודע על שגיאה.

  16. אלגוריתם הניתוח

  17. 0) S’  S 1) S  aA 2) S  aB 3) A  a 4) B  b דוגמא LR (0) - הרצה רצף האסימונים בקלט: ab$ [goto(2,B)=3] [goto(0,S)=1] בכל שלב, תוכן המחסנית הוא רישא של תבנית פסוקית חוקית

  18. מנתח SLR • יכול לזהות יותר דקדוקים לעומת LR(0) ללא קונפליקטים. • השינוי לעומת LR(0) : • לכל מצב עם פריט A α● , מוסיפים reduce מתאים בשורה של A בטבלת הaction, רק לעמודות שהאסימון שבראשן שייך ל- follow(A). • ב- SLR בונים את טבלת הניתוח על סמך אוטומט פרפיקסי המשתמש בפריטי LR(0). • הגדרת טבלת action למנתח SLR:

  19. דוגמא - SLR 0) S’  S 1) S  aA 2) S  aB 3) A  a 4) B  b • אוטומט פרפיקסי – נשאר אותו דבר: b B A a 0 S` ●S S ●aA S ●aB 2 a S aB ● 3 S a●A S a●B A  ● a B  ● b S aA ● 4 S A  a ● 5 S’  S● 1 B  b ● 6

  20. 0) S’  S 1) S  aA 2) S  aB 3) A  a 4) B  b • דוגמא - SLR • בניית טבלת הניתוח: follow(S) = follow(A) = follow(B) = {$} actions goto

  21. קונפליקטים אפשריים במנתחי LR • קונפליקט נוצר בטבלת הניתוח כאשר יש 2 פעולות שונות או יותר באותה משבצת בטבלה. • קיימים 2 סוגי קונפליקטים: • קונפליקט shift/reduce : • האם להמשיך לקרוא את הקלט או לצמצם ? • קונפליקט : reduce/reduce • לפי איזה כלל גזירה לצמצם ? • שאלה: מדוע אין קונפליקט shift/shift ?

  22. מתי מתקבלים קונפליקטים ?

  23. דוגמא - קונפליקט R\R 0. S`  S$ 1. S  Aa 2. S  Bb 3. A  b 4. B  b LR(0) S`  ●S$ S  ●Aa S  ●Bb A  ●b B  ●b b A  b● B  b● 0 1

  24. דוגמא - קונפליקט R\R 0. S`  S$ 1. S  Aa 2. S  Bb 3. A  b 4. B  b Follow(A)={a} Follow(B)={b} SLR S`  ●S$ S  ●Aa S  ●Bb A  ●b B  ●b b A  b● B  b● 0 1 נשים לב כי מעבר ל SLR פותר את הקונפליקט במקרה זה.

  25. דוגמא - קונפליקט R\R 0. S`  S$ 1. S  Aa 2. S  Ba 3. A  b 4. B  b • אבל עבור הדקדוק הבא: Follow(A)={a} Follow(B)={a} SLR S`  ●S$ S  ●Aa S  ●Ba A  ●b B  ●b b A  b● B  b● 0 1 בדוגמא זו מעבר ל SLR אינו פותר את הקונפליקט.

  26. דוגמא - קונפליקט R\S 0. S`  S$ 1. S  A 2. S  aAa 3. A  a LR(0) S`  ●S$ S  ●A S  ●aAa A  ●a a a A  a● S  a●Aa A  a● A  ●a 2 0 1

  27. דוגמא - קונפליקט R\S 0. S`  S$ 1. S  A 2. S  aAa 3. A  a LR(0) SLR Follow(A)={a, $} S`  ●S$ S  ●A S  ●aAa A  ●a a a A  a● S  a●Aa A  a● A  ●a 2 0 1

  28. דוגמא - קונפליקט R\S 0. S`  S$ 1. S  A 2. S  aAa 3. A  a LR(0) SLR Follow(A)={a, $} S`  ●S$ S  ●A S  ●aAa A  ●a a a A  a● S  a●Aa A  a● A  ●a 2 0 1 בדוגמא זו, הקונפליקט קיים גם ב LR(0) וגם ב SLR.

  29. שאלה 1 G דקדוק LR(0) שבריצת מנתח ה- LR(0) שלו התקבל תוכן המחסנית: [0],[x,a],[y,b],[z,S],[w,b] א ) הוכח/הפרך: G יכול להכיל כלל: S->a ב) ענו על א' כאשר הפעם G הוא SLR

  30. שאלה 1 G דקדוק LR(0) שבריצת מנתח ה- LR(0) שלו התקבל תוכן המחסנית: [0],[x,a],[y,b],[z,S],[w,b] א ) הוכח/הפרך: G יכול להכיל כלל: S->a תשובה: G לא יכול להכיל כלל זה. אם נניח בשלילה שקיים כלל כזה ב- G, אז נקבל שבמצב x באוטומט יש קונפליקט s/r אם האסימון הבא בקלט הוא b, וזו סתירה לכך ש- G הוא LR(0). ב) ענו על א' כאשר הפעם G הוא SLR תשובה: G לא יכול להכיל כלל זה. הנימוק דומה לסעיף הקודם, אך כעת כיוון שמדובר ב- SLR, צריך גם להתקיים ש- b נמצא ב- follow(S). ע"פ הנתון על תוכן המחסנית זה אכן מתקיים.

  31. שאלה 2 נתון ש- G הוא דקדוק SLR. הוכח/הפרך: אם V={S} אז טבלת הפעולות עבור האוטומט הפרפיקסי למנתח LR(0) עבור Gאינה מכילה קונפליקט R/R . תשובה: הטענה נכונה. אם נניח בשלילה שיש קונפליקט R/R, אז יש מצב באוטומט שבו יש שני פריטים מהצורה: S  α● , S  β●, אך זה גורר ש- G הוא גם לא ב- SLR בסתירה לנתון. (יש לשים לב שמדובר באותו אוטומט גם עבור מנתח LR(0) וגם עבור מנתח SLR עבור הדקדוק G).

  32. שאלה 3 האם יש יחסי הכלה בין המחלקות: LL(1) , LR(0) , SLR? • LR(0)מוכלת ב- SLR • לכל דקדוק G שאין בו כללי אפסילון, אם הוא ב- LL(1) אז הוא גם ב- LR(0) . • דוגמא לדקדוק ב- LL(1) שאינו ב- LR(0): S  a| ε • דוגמא לדקדוק ב- LL(1) שאינו ב- SLR: S  AaAb | BbBa • A  ε • B  ε • דוגמא לדקדוק ב- LR(0) שאינו ב- LL(1): S  aA | aB • A  a • B  b

More Related