210 likes | 424 Views
backend. ניתוח סמנטי. ניתוח תחבירי. ניתוח לקסיקלי. תזכורת מתרגולים אחרונים. מבנה סכמתי של קומפיילר ניתוח תחבירי: Top Down : LL(1) RD Bottom up : LR(0) SLR LR(1) CLR LALR. אסימונים (tokens). Canonical LR (CLR / LR(1) ).
E N D
backend ניתוח סמנטי ניתוח תחבירי ניתוח לקסיקלי תזכורת מתרגולים אחרונים • מבנה סכמתי של קומפיילר • ניתוח תחבירי: • Top Down: LL(1)RD • Bottom up: • LR(0) • SLR • LR(1)\ CLR • LALR אסימונים (tokens)
Canonical LR (CLR / LR(1) ) • אלגוריתם LR(1) מבוסס על מנתח LR בדומה לאלגוריתמים הקודמים שראינו. • הרעיון: • על מנת למנוע קונפליקטים, נפרק את מצבי LR(0) למצבים עדינים יותר, המכילים גם מידע על lookahead. • נגדיר מהו פריט LR(1) ונגדיר פונקצית סגור עבור פריטים אלו. • האוטומט הפרפיקסי עבור מנתח LR(1) יבנה בעזרת פריטי LR(1). • כל שאר האלגוריתם: כולל בניית האוטומט + יצירת הטבלה ממנו וניהול המחסנית נעשה באופן דומה ל LR(0).
פריטי 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): זיהינו את מה שמשמאל לנקודה, אנו מצפים למצוא את מה שמימין לה, ולאחר מכן את האסימון המצורף לפריט.
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 – בדקו!
בניית טבלת הניתוח (A→α●,t)∈ Ii (S’→S●,$)∈ Ii
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
LR(1) סיכום • LR(1) יתרונות: • יכול להתמודד עם כמות הדקדוקים הגדולה ביותר. • LR(1) חסרונות: • צורך כמות זיכרון רבה בשל גודל הטבלה הנוצרת • נובע בעיקר מכמות המצבים המורחבת שנוצרת באוטומט. • נרצה למצוא פיתרון: • יותר חסכוני בזיכרון. • היעילות שלו תשאר גבוהה: יוכל להתמודד עם כמות דקדוקים גדולה (כמעט כמו של LR(1)).
LALR • בניית אוטומט וטבלה כפי שעושה LR(1). • מאחד מצבים בעלי פריט LR(0)זהה. A → c*,a A → c*,b A → c*,(b,a) LR(1) LALR
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
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
שאלה 1 • נתון דקדוק G=(V,T,P,S) השייך למחלקה LR(1). • עבור כל אחד מהדקדוקים הבאים, רשמו האם הוא בהכרח ב LR(1) :
שאלה 1 • הדקדוק בהכרח ב LR(1): • המשתנה X הוא משתנה חדש שאינו נגזר באגף ימין של אף כלל. • בזמן ביצוע closure במצבי האוטומט, הכלל t→X לעולם לא ייכנס. • האוטומט יהיה זהה לאוטומט של G, שהוא חסר קונפליקטים.
שאלה 1 • אינו בהכרח ב LR(1). • הכלל החדש יכול להפוך את הדקדוק לדו משמעי. לדוגמא:
הדקדוק בהכרח ב LR(1) : • לאוטומט מתווספים שני מצבים: • מצב אחד המכיל את הפריט S’→t●,$ בלבד. • מצב אחד מכיל את הפריט S’→S●,$ בלבד. • במצבים אלו יש רק פריט LR(1) בודד ואין מהם קשתות יוצאות, ולכן לא יגרמו לקונפליקט.
הדקדוק בהכרח ב LR(1) : • בנוסף למצב התחילי מתווספים הפריטים S’→●t,$ ו- S’→●S,$ שאינם יכולים לגרום לקונפליקט: • קונפליקט R/R לא יתווסף כי הפריטים החדשים לא מובילים ל Reduce. • הפריט S’→●S,$ לא גרם להוספת קשת, וכל הפריטים שנמצאים ב closure שלו כבר היו לפני כן במצב התחילי של האוטומט. • הפריט S’→●t,$ גרם להוספת קשת המסומנת ב t, אך במצב התחילי של האוטומט אין אף פריט מהצורה A→α●,t מאחר ועבור כל פריט B→β●Aγ,r מתקיים t∉ first(γr) .
שאלה 1 • אינו בהכרח ב LR(1). • הכלל החדש יכול להפוך את הדקדוק לדו משמעי. לדוגמא: • ההבדל העיקרי מהסעיף הקודם הוא שכעת המשתנה X יכול להשתתף בכללי דקדוק אחרים, ולכן ייתכן מצב בו יתווסף קונפליקט S/R במצב התחילי של האוטומט.
שאלה 2 • קבעו האם ייתכן דקדוק LR(1) אשר באוטומט שלו קיים המצב המצויין בסעיף (המצב בדיוק- ללא פריטים נוספים):
שאלה 2 • מצב כזה לא ייתכן: • אם נניח בשלילה שישנו מצב כזה, נקבל קונפליקט R/R במצב המתקבל ע"י מעבר על הקשת a. • התקבלה סתירה לכך שהדקדוק הוא LR(1).
שאלה 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 יש רק את שני הפריטים המצויינים בסעיף.
שאלה 2 • מצב כזה ייתכן: • לדוגמא הדקדוק: S→Ad|aAe A→aaa