מנתח ll(1)
DESCRIPTION
מנתח LL(1). נכתב ע"י אלכס קוגן ( (sakogan@cs סמסטר חורף, תשס"ח. S. A. תזכורת. ניתוח Top-Down : מתחילים מ- S , מפעילים כללי גזירה עד שמגיעים למילת הקלט. A α A β ?. שיטת Recursive Descent שיפור מנגנון ההחלטה - PowerPoint PPT PresentationTRANSCRIPT
LL(1)מנתח
sakogan@cs(נכתב ע"י אלכס קוגן (סמסטר חורף, תשס"ח
תזכורת
, מפעילים S: מתחילים מ-Top-Downניתוח •כללי גזירה עד שמגיעים למילת הקלט
S
A
A αA β ?
Recursive Descentשיטת •
שיפור מנגנון ההחלטה•כדי להחליט איזה כלל להפעיל על סמך טרמינל –
selectהבא בקלט, הגדרנו פונקצית
תזכורת (המשך)
•select(Aα) טרמינלים שיגרמו לבחור בכלל זה :Aכאשר רוצים להפעיל כלל של
first, הגדרנו פונקציות עזר selectלצורך חישוב של •followו-
•first(A) טרמינלים שיכולים להופיע בתחילת מילה :Aשנגזרת מ-
•first(α) ההרחבה של :firstלתבניות פסוקיות
•follow(A) אחרי: טרמינלים שיכולים להופיע A בגזירה כלשהי
LL(1)מנתח
קורא קלט משמאל לימין, מייצר ניתוח שמאלי • של טרמינל אחדlookaheadביותר ונעזר ב-
בעת ניתוחselectמסתמך על פונקצית • אם ורק אם לא LL(1) קיים מנתח Gלדקדוק •
קיים קונפליקט בדקדוק, כלומר לכל שני כללים Aα-ו Aβבדקדוק
select(Aα) ∩ select(Aβ) = Ø
הרעיון: לחקות בעזרת מחסנית את תכנית •Recursive Descentה-RDשקול בכוח הניתוח ל-–
מבני נתונים של המנתח
•Q שרוצים עדיין : מחסנית הניתוח שמחזיקה את מהלראות
בראש המחסנית - מה שרוצים לראות מייד–Sאיתחול: –pop, push, topתומכת בפעולות –
•M טבלה שאומרת איזה כלל גזירה להפעיל בהינתן :משתנה וטרמינל
M(X,t) =X α t select(X α)
error otherwise X Vt T
מכיל איבר אחד בלבדMכאשר אין קונפליקטים, כל תא של
דוגמה
נתון דקדוק הבא:•S Ab | bC
A a
C cALL(1) של מנתח Mנבנה טבלת • עבור כל כלל גזירהselectלצורך כך, נחשב תחילה •
דוגמה (המשך)
select(SAb) = {a}
select(SbC) = {b}
select(Aa) = {a}
select(CcA) = {c}
abc$
SSAb SbC
AAa
CCcA
בניית הטבלה
errorהמקומות הריקים מכילים
M:
פעולות המנתח
•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
ראש
ראש
אלגוריתם הניתוח
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
דוגמה (המשך)
:bcaריצת המנתח על המילה •
פעולהקלטמחסנית
Sbca$
דוגמה (המשך)
:bcaריצת המנתח על המילה •
פעולהקלטמחסנית
Sbca$replace S,b
Cbbca$
ראשהמחסנית
דוגמה (המשך)
:bcaריצת המנתח על המילה •
פעולהקלטמחסנית
Sbca$replace S,b
Cbbca$shift
Cca$replace C,c
Acca$shift
Aa$replace A,a
aa$shift
<empty>$success
שאלה לדוגמה
אשר מקיים: Gתנו דוגמה לדקדוק ח"ה •L(G).מכילה לפחות שתי מילים •G אינו דקדוק LL(1).•G הינו דקדוק LL(k) עבור k>1.מספר המשתנים, הטרמינלים וכללי הגזירה •
הוא המינימלי שניתן לבחור כך Gב- יתקיימו.1-3שהדרישות
הסבירו מדוע הדקדוק מקיים את הדרישות.
פתרון השאלה
הדקדוק חייב להכיל לפחות •שני כללי גזירה מאותו משתנה
מדוע?–
חייב להיות לפחות משתנה אחד•מדוע?–
חייב להיות לפחות טרמינל אחד•מדוע?–
לפיכך, נציע:•
S aa | a
.1L(G) מכילה לפחות שתי מילים.
.2G אינו דקדוק LL(1).
.3G הינו דקדוק LL(k) עבור k>1 .
.4 G 1 מינימלי עבור-3
שאלה ממבחן (מועד א', אביב, תשס"ז)
נתון הדקדוק הבא:•
S AAB
A a
B bעבור כל אחת מהאפשרויות הבאות, קבעו האם •
תוכן המחסנית הנתון יכול להתקבל בריצה של עבור הדקדוק על מילת קלט LL(1)המנתח
כלשהי (שאינה בהכרח בשפה). הסבירו
שאלה ממבחן - המשך
S AABA aB b
הסימן הימני ביותר הוא בראש המחסנית•BAא.Baב.bAג. Aaד.