Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "תזכורת מתרגולים אחרונים"— Presentation transcript:

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

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

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

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

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

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

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

8 מנתח LR(0) – בניית טבלת הניתוח
הגדרת טבלת action למנתח LR(0): הגדרת טבלת goto למנתח LR(0):

9 דוגמא LR (0) בניית טבלת הניתוח: actions goto a b $ s2 1 acc 2 s5 s6 3
1) S  aA 2) S  aB 3) A  a 4) B  b דוגמא LR (0) בניית טבלת הניתוח: actions goto a b $ s2 1 acc 2 s5 s6 3 r2 4 r1 5 r3 6 r4 S A B 1 4 3

10

11 אלגוריתם הניתוח

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

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

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

15 דוגמא - SLR בניית טבלת הניתוח: follow(S) = follow(A) = follow(B) = {$}
0) S’  S 1) S  aA 2) S  aB 3) A  a 4) B  b דוגמא - SLR בניית טבלת הניתוח: follow(S) = follow(A) = follow(B) = {$} actions goto a b $ s2 1 acc 2 s5 s6 3 r2 4 r1 5 r3 6 r4 S A B 1 4 3

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

17 מתי מתקבלים קונפליקטים ?
LR(0) SLR S\R באותו מצב קיימים 2 פריטים מהצורה: A  α●tβ B δ● כמו LR(0), וגם נדרש: t נמצא ב- follow(B) R\R A  α● B β● החיתוך בין follow(A) ל- follow(B) אינו ריק

18 סוגי קונפליקטים ב-LR קונפליקט 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 a b $ S A B s1 s_ 1 r3,r4 b A  b* B  b* 1

19 סוגי קונפליקטים ב-LR קונפליקט 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 a b $ S A B s1 s_ 1 r3,r4 r3 r4 b A  b* B  b* 1 Notice that SLR now can solve it

20 סוגי קונפליקטים ב-LR קונפליקט 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 a b $ S A B s1 s_ 1 r3, r4 b A  b* B  b* 1 Notice that SLR now cannot solve it

21 סוגי קונפליקטים ב-LR קונפליקט R\S 0. S`  S$ 1. S  A 2. S  aAa
s1 s_ 1 r3, s2 r3 a S  a*Aa A  a* A  *a 1

22 סוגי קונפליקטים ב-LR קונפליקט R\S 0. S`  S$ 1. S  A 2. S  aAa
SLR Follow(A)={a, $} S` *S$ S  *A S  *aAa A  *a a $ S A s1 s_ 1 r3, s2 r3 a S  a*Aa A  a* A  *a 1

23 סוגי קונפליקטים ב-LR קונפליקט R\S 0. S`  S$ 1. S  A 2. S  aAa
SLR Follow(A)={a, $} S` *S$ S  *A S  *aAa A  *a a $ S A s1 s_ 1 r3, s2 r3 a S  a*Aa A  a* A  *a 1 Notice that neither SLR nor LR(0) can solve it


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

Similar presentations


Ads by Google