1 / 16

מנתח LL(1)

מנתח LL(1). נכתב ע"י אלכס קוגן ( (sakogan@cs סמסטר חורף, תשס"ח. S. A. תזכורת. ניתוח Top-Down : מתחילים מ- S , מפעילים כללי גזירה עד שמגיעים למילת הקלט. A  α A  β ?. שיטת Recursive Descent שיפור מנגנון ההחלטה

Download Presentation

מנתח LL(1)

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. מנתח LL(1) נכתב ע"י אלכס קוגן ((sakogan@cs סמסטר חורף, תשס"ח

  2. S A תזכורת • ניתוח Top-Down: מתחילים מ-S, מפעילים כללי גזירה עד שמגיעים למילת הקלט 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. X  α t  select(X  α) M(X,t) = error otherwise X  V t  T מבני נתונים של המנתח • Q: מחסנית הניתוח שמחזיקה את מה שרוצים עדיין לראות • בראש המחסנית - מה שרוצים לראות מייד • איתחול: S • תומכת בפעולות pop, push, top • M: טבלה שאומרת איזה כלל גזירה להפעיל בהינתן משתנה וטרמינל כאשר אין קונפליקטים, כל תא של 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: המקומות הריקים מכילים error

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

  9. אלגוריתם הניתוח Init: push(Q,S), t holds 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 • 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 • goto 1

  10. דוגמה (המשך) • ריצת המנתח על המילה bca:

  11. דוגמה (המשך) • ריצת המנתח על המילה bca: ראש המחסנית

  12. דוגמה (המשך) • ריצת המנתח על המילה bca:

  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) עבור הדקדוק על מילת קלט כלשהי (שאינה בהכרח בשפה). הסבירו

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

More Related