המצגת נטענת. אנא המתן

המצגת נטענת. אנא המתן

נכתב ע"י אלכס קוגן ((sakogan@cs מנתח LL(1) נכתב ע"י אלכס קוגן ((sakogan@cs סמסטר חורף, תשס"ח.

מצגות קשורות


מצגת בנושא: "נכתב ע"י אלכס קוגן ((sakogan@cs מנתח LL(1) נכתב ע"י אלכס קוגן ((sakogan@cs סמסטר חורף, תשס"ח."— תמליל מצגת:

1 נכתב ע"י אלכס קוגן ((sakogan@cs
מנתח LL(1) נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח

2 תזכורת מהתרגול הקודם ניתוח Top-Down: מתחילים מ-S, מפעילים כללי גזירה עד שמגיעים למילת הקלט. S A A  α A  β ? שיטת Recursive Descent שיפור מנגנון ההחלטה כדי להחליט איזה כלל להפעיל על סמך הטרמינל הבא הנצפה בקלט, הגדרנו את פונקצית select

3 תזכורת (המשך) select(Aα): קבוצת כל הטרמינלים אשר יגרמו לבחור בכלל הזה עבור המשתנה A. לצורך חישוב select, הגדרנו את פונקציות העזר first ו-follow first(A): כל הטרמינלים שיכולים להופיע בתחילת מילה שנגזרת מ-A. first(α): ההרחבה של first לתבניות פסוקיות. follow(A): כל הטרמינלים שיכולים להופיע אחרי המשתנה A בגזירה כלשהי.

4 select(Aα) ∩ select(Aβ) = Ø
מנתח LL(1) קורא קלט משמאל לימין, מייצר ניתוח שמאלי ביותר ונעזר ב-lookahead של טרמינל אחד. מסתמך על פונקצית select בעת הניתוח. לדקדוק G קיים מנתח LL(1) אם ורק אם לא קיים קונפליקט בדקדוק, כלומר לכל שני כללים בדקדוק עבור אותו המשתנה- Aα , Aβ: select(Aα) ∩ select(Aβ) = Ø הרעיון: לחקות בעזרת מחסנית את תכנית ה - Recursive Descent שקול בכוח הניתוח ל-RD

5 מבני נתונים של המנתח X  α t  select(X  α) M (X,t) = error otherwise
Q: מחסנית הניתוח שמחזיקה את מה שרוצים עדיין לראות בראש המחסנית - מה שרוצים לראות מיד אתחול: בראש המחסנית יהיה S תומכת בפעולות pop, push, top M: טבלה שאומרת איזה כלל גזירה יש להפעיל בהינתן המשתנה הבא לגזירה והטרמינל הבא בקלט M (X,t) = X  α t  select(X  α) error otherwise X  V t  T כאשר אין קונפליקטים, כל תא של M מכיל איבר אחד בלבד

6 דוגמה נתון דקדוק הבא: S  Ab | bC A  a C  cA
נבנה טבלת M של מנתח LL(1). לצורך כך, נחשב תחילה את פונקציית select עבור כל כלל גזירה.

7 דוגמה (המשך) select(SAb) = {a} select(SbC) = {b} select(Aa) = {a}
select(CcA) = {c} בניית הטבלה M: $ c b a SbC SAb S Aa A CcA C המקומות הריקים מכילים error

8 פעולות המנתח MATCH t,t: הוצאת טרמינלים תואמים מהקלט ומהמחסנית. אם הם לא תואמים עוצרים עם הודעת שגיאה. PREDICT X,t: החלפת משתנה X בצד ימין של כלל גזירה מתאים חפש ב-M(X,t) איזה כלל גזירה להפעיל אם מצאת error, עצור עם הודעת שגיאה אחרת, נניח שזהו כלל X  Y1Y2…Yn. הוצא את X מהמחסנית ודחוף Y1Y2…Yn למחסנית בסדר הפוך כאשר Y1 בראש המחסנית A b B C d b ראש ראש PREDICT A,e כאשר M(A,e) = A  BCd

9 אלגוריתם הניתוח Init: push(Q,S), t is the next terminal in input
If (isEmpty(Q)) if (t == $), report success // $ - end of input else, report error else X = top(Q) if (X is terminal) MATCH (X,t) if (X is variable) PREDICT (X,t) goto 1

10 המשך הדוגמה ריצת המנתח על המילה bca: פעולה קלט מחסנית bca$ S
X = top(Q) if (X is terminal) MATCH (X,t) if (X is variable) PREDICT (X,t) המשך הדוגמה ריצת המנתח על המילה bca: c b a S bC Ab S Aa A C cA C פעולה קלט מחסנית bca$ S

11 המשך הדוגמה ריצת המנתח על המילה bca: פעולה קלט מחסנית predict S,b bca$
X = top(Q) if (X is terminal) MATCH (X,t) if (X is variable) PREDICT (X,t) המשך הדוגמה ריצת המנתח על המילה bca: c b a S bC Ab S Aa A C cA C פעולה קלט מחסנית predict S,b bca$ S Cb ראש המחסנית

12 המשך הדוגמה ריצת המנתח על המילה bca: פעולה קלט מחסנית predict S,b bca$
X = top(Q) if (X is terminal) MATCH (X,t) if (X is variable) PREDICT (X,t) המשך הדוגמה ריצת המנתח על המילה bca: c b a S bC Ab S Aa A C cA C פעולה קלט מחסנית predict S,b bca$ S match b,b Cb predict C,c ca$ C match c,c Ac predict A,a a$ A match a,a a success $ <empty>

13 שאלה לדוגמה תנו דוגמה לדקדוק ח"ה G אשר מקיים:
L(G) מכילה לפחות שתי מילים. G אינו דקדוק LL(1). G הינו דקדוק LL(k) עבור k>1. מספר המשתנים, הטרמינלים וכללי הגזירה ב-G הוא המינימלי שניתן לבחור כך שהדרישות 1-3 יתקיימו.

14 פתרון השאלה הדקדוק חייב להכיל לפחות שני כללי גזירה מאותו משתנה
הדקדוק חייב להכיל לפחות שני כללי גזירה מאותו משתנה מדוע? חייב להיות לפחות משתנה אחד חייב להיות לפחות טרמינל אחד לפיכך, נציע: S  aa | a L(G) מכילה לפחות שתי מילים. G אינו דקדוק LL(1). G הינו דקדוק LL(k) עבור k>1. G מינימלי עבור 1-3

15 שאלה ממבחן (מועד א', אביב, תשס"ז)
נתון הדקדוק הבא: S  AAB A  a B  b עבור כל אחת מהאפשרויות הבאות, קבעו האם תוכן המחסנית הנתון בה, יכול להתקבל בריצה של המנתח LL(1) עבור הדקדוק הנ"ל על מילת קלט כלשהי (שאינה בהכרח בשפה). הסימן הימני ביותר הוא בראש המחסנית: א. BA ב. Ba ג. bA ד. Aa

16 שאלה ממבחן - המשך S  AAB A  a B  b b a S AAB S A  a A B  b B
שלב 1: נבנה את הטבלה: S  AAB A  a B  b b a S AAB S A  a A B  b B

17 S, BAA, BAa, BA, Ba, B, b --- ----- ----- ---- ---- --- --- ---
שלב 2: נבנה לפי הטבלה את המצבים האפשריים במחסנית: S, BAA, BAa, BA, Ba, B, b  BA and Ba are ok … b a S AAB S A  a A B  b B

18 שאלה ממבחן נתונים שני דקדוקים: 𝐺 1 = 𝑉 1 ,𝑇= 𝑎,𝑏 , 𝑃 1 , 𝑆 1
𝐺 1 = 𝑉 1 ,𝑇= 𝑎,𝑏 , 𝑃 1 , 𝑆 1 𝐺 2 = 𝑉 2 ,𝑇= 𝑎,𝑏 , 𝑃 2 , 𝑆 2 כך ש: 𝐺 1, 𝐺 2 ∈𝐿𝐿 1 , 𝑉 1 ∩ 𝑉 2 =∅ (שימו לב, קבוצת הטרמינלים משותפת) נגדיר:𝐺= 𝑉 1 ∪ 𝑉 2 ∪ 𝑆 ,𝑇, 𝑃 1 ∪ 𝑃 2 ∪ 𝑆→ 𝑆 1 ,𝑆→ 𝑆 2 ,𝑆 𝑉 1 ∪ 𝑉 2 ∪ 𝑆 ,𝑇, 𝑃 1 ∪ 𝑃 2 ∪ 𝑆→ 𝑆 1 ,𝑆→ 𝑆 2 ,𝑆 הוכח/הפרך: קיים k טבעי כך ש 𝐺∈𝐿𝐿 𝑘

19 שאלה ממבחן 𝐺 1 = 𝑉 1 ,𝑇= 𝑎,𝑏 , 𝑃 1 , 𝑆 1 𝐺 2 = 𝑉 2 ,𝑇= 𝑎,𝑏 , 𝑃 2 , 𝑆 2
𝐺 1 = 𝑉 1 ,𝑇= 𝑎,𝑏 , 𝑃 1 , 𝑆 1 𝐺 2 = 𝑉 2 ,𝑇= 𝑎,𝑏 , 𝑃 2 , 𝑆 2 𝐺= 𝑉 1 ∪ 𝑉 2 ∪ 𝑆 ,𝑇, 𝑃 1 ∪ 𝑃 2 ∪ 𝑆→ 𝑆 1 ,𝑆→ 𝑆 2 ,𝑆 לדקדוק G יש מנתח LL(k) אם ורק אם לא קיים קונפליקט בדקדוק עבור lookahead של k טרמינלים. או במילים אחרות, אין שני כללי גזירה המתאימים לאותו התא בטבלה M: 𝑉 1 ∪ 𝑉 2 ∪ 𝑆 × 𝑇 𝑘

20 שאלה ממבחן למשל עבור k=2 ( 𝑇= 𝑎,𝑏 ): M: $$ b$ bb ba a$ ab aa S
V1 variables V2 variables

21 שאלה ממבחן 𝐺= 𝑉 1 ∪ 𝑉 2 ∪ 𝑆 ,𝑇, 𝑃 1 ∪ 𝑃 2 ∪ 𝑆→ 𝑆 1 ,𝑆→ 𝑆 2 ,𝑆
𝐺= 𝑉 1 ∪ 𝑉 2 ∪ 𝑆 ,𝑇, 𝑃 1 ∪ 𝑃 2 ∪ 𝑆→ 𝑆 1 ,𝑆→ 𝑆 2 ,𝑆 לדקדוק G יש מנתח LL(k) אם ורק אם לא קיים קונפליקט בדקדוק עבור lookahead של k טרמינלים. במקרה זה הטענה אינה נכונה. נייצר דוגמא נגדית: 𝐺 1 = 𝑆 1 ,𝑇 ,𝑃 1 ={ 𝑆 1 →𝑎}, 𝑆 1 ∈𝐿𝐿(1) 𝐺 2 = 𝑆 2 ,𝑇 ,𝑃 2 ={ 𝑆 2 →𝑎}, 𝑆 2 ∈𝐿𝐿 1 למילה 𝑎 יהיו שתי גזירות שונות בG ולכן לכל k גדול/שווה ל-1 יהיה קונפליקט בתא M(S, 𝑎$ 𝑘−1 )


הורד את "ppt "נכתב ע"י אלכס קוגן ((sakogan@cs מנתח LL(1) נכתב ע"י אלכס קוגן ((sakogan@cs סמסטר חורף, תשס"ח.

מצגות קשורות


מודעות Google