1 / 21

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

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

talon
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. Canonical LR (CLR / LR(1) ) • אלגוריתם LR(1) מבוסס על מנתח LR בדומה לאלגוריתמים הקודמים שראינו. • הרעיון: • על מנת למנוע קונפליקטים, נפרק את מצבי LR(0) למצבים עדינים יותר, המכילים גם מידע על lookahead. • נגדיר מהו פריט LR(1) ונגדיר פונקצית סגור עבור פריטים אלו. • האוטומט הפרפיקסי עבור מנתח LR(1) יבנה בעזרת פריטי LR(1). • כל שאר האלגוריתם: כולל בניית האוטומט + יצירת הטבלה ממנו וניהול המחסנית נעשה באופן דומה ל LR(0).

  3. פריטי LR(1) • פריט LR(1) הוא (A→α●β,t) כאשר A→αβ∈ P, t∈T∪{$} • סגור (closure) על קבוצת פריטים I מוגדר באופן אינדוקטיבי: • בסיס: closure(I)=I • צעד: אם (A→α●Bβ,t)∈closure(I) אזלכל B→γ∈ P ולכל x∈ first(βt), • גם (B→●γ,x) ∈closure(I) • פונקצית המעברים של האוטומט: • פריט LR(0) הוא (A→α●β) כאשר A→αβ∈ P • סגור (closure) על קבוצת פריטים I מוגדר באופן אינדוקטיבי: • בסיס: closure(I)=I • צעד: אם (A→α●Bβ)∈closure(I) אזלכל B→γ∈ P גם (B→●γ) ∈closure(I) • פונקצית המעברים של האוטומט: • ההבדל בין פריטי LR(0) ו-LR(1) נעוץ רק ב-closure. משמעות פריט LR(1): זיהינו את מה שמשמאל לנקודה, אנו מצפים למצוא את מה שמימין לה, ולאחר מכן את האסימון המצורף לפריט.

  4. 0. S`  S$ 1. S  A 2. S  aAa 3. A  a דוגמא LR (1) 2 S` ●S, $ S  ●A, $ S  ●aAa, $ A  ●a, $ A  a●, a S  a●Aa, $ A  a●, $ A  ●a, a A a a a S  aA●a, $ S  aAa●, $ 1 3 4 0 A S S  A●, $ S`  S●, $ 5 6 • הדקדוק אינו ב- LR(0) ולא ב- SLR – בדקו!

  5. בניית טבלת הניתוח (A→α●,t)∈ Ii (S’→S●,$)∈ Ii

  6. 0. S`  S$ 1. S  A 2. S  aAa 3. A  a דוגמא LR (1)- הרצה actions goto S` ●S, $ S  ●A, $ S  ●aAa, $ A  ●a, $ מחסנית קלט A  a●, a S  a●Aa, $ A  a●, $ A  ●a, a a A a a aaa$ 2 (0, ) aa$ (0, )(1,a) S  aA●a, $ S  aAa●, $ 1 a$ (0, )(1,a)(2,a) 3 4 0 (0, )(1,a)(3,A) a$ A S (0, )(1,a)(3,A)(4,a) $ S  A●, $ S`  S●, $ (0, )(6,S) $ 6 5

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

  8. LALR • בניית אוטומט וטבלה כפי שעושה LR(1). • מאחד מצבים בעלי פריט LR(0)זהה. A → c*,a A → c*,b A → c*,(b,a) LR(1) LALR

  9. LALR דוגמא - נמצא דקדוק אשר שייך ל-LR(1) אך לא ל-LALR S → a A a | a B b | b A b | b B a A →a B →a S’ →• S, $ S →• a Aa, $ S →• a B b, $ S →• b A b, $ S →• b B a, $ S →b • A b, $ S →b • B a, $ A →• a, b B → • a, a S →a • A a, $ S →a • B b, $ A →• a, a B →• a, b a b a a LR(1): no conflict A →a •, a B →a •, b A →a •, b B →a •, a

  10. LALR דוגמא - נמצא דקדוק אשר שייך ל-LR(1) אך לא ל-LALR S → a A a | a B b | b A b | b B a A →a B →a S’ →• S, $ S →• a Aa, $ S →• a B b, $ S →• b A b, $ S →• b B a, $ S →b • A b, $ S →b • B a, $ A →• a, b B → • a, a S →a • A a, $ S →a • B b, $ A →• a, a B →• a, b a b a a LR(1): no conflict A → a •, (a,b) B → a •, (a,b) LALR: R\R conflict! LALR

  11. דקדוקים - סיכום

  12. שאלה 1 • נתון דקדוק G=(V,T,P,S) השייך למחלקה LR(1). • עבור כל אחד מהדקדוקים הבאים, רשמו האם הוא בהכרח ב LR(1) :

  13. שאלה 1 • הדקדוק בהכרח ב LR(1): • המשתנה X הוא משתנה חדש שאינו נגזר באגף ימין של אף כלל. • בזמן ביצוע closure במצבי האוטומט, הכלל t→X לעולם לא ייכנס. • האוטומט יהיה זהה לאוטומט של G, שהוא חסר קונפליקטים.

  14. שאלה 1 • אינו בהכרח ב LR(1). • הכלל החדש יכול להפוך את הדקדוק לדו משמעי. לדוגמא:

  15. הדקדוק בהכרח ב LR(1) : • לאוטומט מתווספים שני מצבים: • מצב אחד המכיל את הפריט S’→t●,$ בלבד. • מצב אחד מכיל את הפריט S’→S●,$ בלבד. • במצבים אלו יש רק פריט LR(1) בודד ואין מהם קשתות יוצאות, ולכן לא יגרמו לקונפליקט.

  16. הדקדוק בהכרח ב LR(1) : • בנוסף למצב התחילי מתווספים הפריטים S’→●t,$ ו- S’→●S,$ שאינם יכולים לגרום לקונפליקט: • קונפליקט R/R לא יתווסף כי הפריטים החדשים לא מובילים ל Reduce. • הפריט S’→●S,$ לא גרם להוספת קשת, וכל הפריטים שנמצאים ב closure שלו כבר היו לפני כן במצב התחילי של האוטומט. • הפריט S’→●t,$ גרם להוספת קשת המסומנת ב t, אך במצב התחילי של האוטומט אין אף פריט מהצורה A→α●,t מאחר ועבור כל פריט B→β●Aγ,r מתקיים t∉ first(γr) .

  17. שאלה 1 • אינו בהכרח ב LR(1). • הכלל החדש יכול להפוך את הדקדוק לדו משמעי. לדוגמא: • ההבדל העיקרי מהסעיף הקודם הוא שכעת המשתנה X יכול להשתתף בכללי דקדוק אחרים, ולכן ייתכן מצב בו יתווסף קונפליקט S/R במצב התחילי של האוטומט.

  18. שאלה 2 • קבעו האם ייתכן דקדוק LR(1) אשר באוטומט שלו קיים המצב המצויין בסעיף (המצב בדיוק- ללא פריטים נוספים):

  19. שאלה 2 • מצב כזה לא ייתכן: • אם נניח בשלילה שישנו מצב כזה, נקבל קונפליקט R/R במצב המתקבל ע"י מעבר על הקשת a. • התקבלה סתירה לכך שהדקדוק הוא LR(1).

  20. שאלה 2 • מצב כזה לא ייתכן: • נסתכל על המצב המוביל אליו על גבי קשת a: a A →a•aa, d A →•aa, e …. A→aa•a, d A →a•a, e • הפריט A → •aa,eאינו נמצא בגרעין המצב, ולכן יש במצב איזשהו פריט נוסף: B →α•Aβ,t . ולכן יש בו גם את הפריט A → •aaa,first(βt), ונקבל סתירה לכך שבמצב 2 יש רק את שני הפריטים המצויינים בסעיף.

  21. שאלה 2 • מצב כזה ייתכן: • לדוגמא הדקדוק: S→Ad|aAe A→aaa

More Related