Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "מנתח LL(1) נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח."— Presentation transcript:

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

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

5 מבני נתונים של המנתח 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} $cba S  bCS  AbS AaAaA C  cAC בניית הטבלה המקומות הריקים מכילים error M:

8 פעולות המנתח SHIFT: הוצאת טרמינל מהקלט REPLACE X,t: החלפת משתנה X בצד ימין של כלל גזירה מתאים –חפש ב-M(X,t) איזה כלל גזירה להפעיל אם מצאת error, עצור עם הודעת שגיאה אחרת, נניח שזהו כלל X  Y 1 Y 2 …Y n. הוצא את X מהמחסנית ודחוף Y 1 Y 2 …Y n למחסנית כאשר Y 1 בראש המחסנית A b B C d b REPLACE A,e כאשר M(A,e) = A  BCd ראש

9 אלגוריתם הניתוח Init: push(Q,S), t holds next terminal in input 1.if isEmpty(Q) –if t == $, report success // $ - end of input –else, report error 2.else –X = top(Q) –if X is terminal if X ≠ t, report error else, SHIFT and pop(Q) –if X is variable if M[X,t] == error, report error else, REPLACE X,t 3.goto 1

10 דוגמה (המשך) ריצת המנתח על המילה bca: פעולהקלטמחסנית bca$S

11 דוגמה (המשך) ריצת המנתח על המילה bca: פעולהקלטמחסנית replace S,bbca$S Cb ראש המחסנית

12 דוגמה (המשך) ריצת המנתח על המילה bca: פעולהקלטמחסנית replace S,bbca$S shiftbca$Cb replace C,cca$C shiftca$Ac replace A,aa$A shifta$a success$

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

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

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

16 שאלה ממבחן - המשך S  AAB A  a B  b הסימן הימני ביותר הוא בראש המחסנית א.BA ב.Ba ג.bA ד.Aa


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

Similar presentations


Ads by Google