מנתח ll(1)
DESCRIPTION
מנתח LL(1). נכתב ע"י אלכס קוגן ( (sakogan@cs סמסטר חורף, תשס"ח. S. A. תזכורת. ניתוח Top-Down : מתחילים מ- S , מפעילים כללי גזירה עד שמגיעים למילת הקלט. A α A β ?. שיטת Recursive Descent שיפור מנגנון ההחלטה - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/1.jpg)
LL(1)מנתח
sakogan@cs(נכתב ע"י אלכס קוגן (סמסטר חורף, תשס"ח
![Page 2: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/2.jpg)
תזכורת
, מפעילים S: מתחילים מ-Top-Downניתוח •כללי גזירה עד שמגיעים למילת הקלט
S
A
A αA β ?
Recursive Descentשיטת •
שיפור מנגנון ההחלטה•כדי להחליט איזה כלל להפעיל על סמך טרמינל –
selectהבא בקלט, הגדרנו פונקצית
![Page 3: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/3.jpg)
תזכורת (המשך)
•select(Aα) טרמינלים שיגרמו לבחור בכלל זה :Aכאשר רוצים להפעיל כלל של
first, הגדרנו פונקציות עזר selectלצורך חישוב של •followו-
•first(A) טרמינלים שיכולים להופיע בתחילת מילה :Aשנגזרת מ-
•first(α) ההרחבה של :firstלתבניות פסוקיות
•follow(A) אחרי: טרמינלים שיכולים להופיע A בגזירה כלשהי
![Page 4: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/4.jpg)
LL(1)מנתח
קורא קלט משמאל לימין, מייצר ניתוח שמאלי • של טרמינל אחדlookaheadביותר ונעזר ב-
בעת ניתוחselectמסתמך על פונקצית • אם ורק אם לא LL(1) קיים מנתח Gלדקדוק •
קיים קונפליקט בדקדוק, כלומר לכל שני כללים Aα-ו Aβבדקדוק
select(Aα) ∩ select(Aβ) = Ø
הרעיון: לחקות בעזרת מחסנית את תכנית •Recursive Descentה-RDשקול בכוח הניתוח ל-–
![Page 5: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/5.jpg)
מבני נתונים של המנתח
•Q שרוצים עדיין : מחסנית הניתוח שמחזיקה את מהלראות
בראש המחסנית - מה שרוצים לראות מייד–Sאיתחול: –pop, push, topתומכת בפעולות –
•M טבלה שאומרת איזה כלל גזירה להפעיל בהינתן :משתנה וטרמינל
M(X,t) =X α t select(X α)
error otherwise X Vt T
מכיל איבר אחד בלבדMכאשר אין קונפליקטים, כל תא של
![Page 6: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/6.jpg)
דוגמה
נתון דקדוק הבא:•S Ab | bC
A a
C cALL(1) של מנתח Mנבנה טבלת • עבור כל כלל גזירהselectלצורך כך, נחשב תחילה •
![Page 7: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/7.jpg)
דוגמה (המשך)
select(SAb) = {a}
select(SbC) = {b}
select(Aa) = {a}
select(CcA) = {c}
abc$
SSAb SbC
AAa
CCcA
בניית הטבלה
errorהמקומות הריקים מכילים
M:
![Page 8: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/8.jpg)
פעולות המנתח
•SHIFTהוצאת טרמינל מהקלט :
•REPLACE X,t החלפת משתנה :X בצד ימין של כלל גזירה מתאים
איזה כלל גזירה להפעילM(X,t)חפש ב-–, עצור עם הודעת שגיאהerrorאם מצאת •
X. הוצא את X Y1Y2…Ynאחרת, נניח שזהו כלל • בראש Y1למחסנית כאשר Y1Y2…Ynמהמחסנית ודחוף
המחסנית
A
b
B
C
d
bREPLACE A,eכאשר
M(A,e) = A BCd
ראש
ראש
![Page 9: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/9.jpg)
אלגוריתם הניתוח
Init: push(Q,S), t holds next terminal in input1. 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
![Page 10: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/10.jpg)
דוגמה (המשך)
:bcaריצת המנתח על המילה •
פעולהקלטמחסנית
Sbca$
![Page 11: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/11.jpg)
דוגמה (המשך)
:bcaריצת המנתח על המילה •
פעולהקלטמחסנית
Sbca$replace S,b
Cbbca$
ראשהמחסנית
![Page 12: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/12.jpg)
דוגמה (המשך)
:bcaריצת המנתח על המילה •
פעולהקלטמחסנית
Sbca$replace S,b
Cbbca$shift
Cca$replace C,c
Acca$shift
Aa$replace A,a
aa$shift
<empty>$success
![Page 13: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/13.jpg)
שאלה לדוגמה
אשר מקיים: Gתנו דוגמה לדקדוק ח"ה •L(G).מכילה לפחות שתי מילים •G אינו דקדוק LL(1).•G הינו דקדוק LL(k) עבור k>1.מספר המשתנים, הטרמינלים וכללי הגזירה •
הוא המינימלי שניתן לבחור כך Gב- יתקיימו.1-3שהדרישות
הסבירו מדוע הדקדוק מקיים את הדרישות.
![Page 14: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/14.jpg)
פתרון השאלה
הדקדוק חייב להכיל לפחות •שני כללי גזירה מאותו משתנה
מדוע?–
חייב להיות לפחות משתנה אחד•מדוע?–
חייב להיות לפחות טרמינל אחד•מדוע?–
לפיכך, נציע:•
S aa | a
.1L(G) מכילה לפחות שתי מילים.
.2G אינו דקדוק LL(1).
.3G הינו דקדוק LL(k) עבור k>1 .
.4 G 1 מינימלי עבור-3
![Page 15: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/15.jpg)
שאלה ממבחן (מועד א', אביב, תשס"ז)
נתון הדקדוק הבא:•
S AAB
A a
B bעבור כל אחת מהאפשרויות הבאות, קבעו האם •
תוכן המחסנית הנתון יכול להתקבל בריצה של עבור הדקדוק על מילת קלט LL(1)המנתח
כלשהי (שאינה בהכרח בשפה). הסבירו
![Page 16: מנתח LL(1)](https://reader036.vdocument.in/reader036/viewer/2022081804/5681319e550346895d980e9e/html5/thumbnails/16.jpg)
שאלה ממבחן - המשך
S AABA aB b
הסימן הימני ביותר הוא בראש המחסנית•BAא.Baב.bAג. Aaד.