מנתח ll(1)

21
חחחחLL(1) ) חחחח ח"ח חחחח חחחח) sakogan@cs חחחחח חחחח, חחח"ח1

Upload: elijah-guerra

Post on 02-Jan-2016

60 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: מנתח  LL(1)

LL(1)מנתח

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

1

Page 2: מנתח  LL(1)

תזכורת מהתרגול הקודם

, מפעילים S: מתחילים מ-Top-Downניתוח •כללי גזירה עד שמגיעים למילת הקלט.

S

A

A αA β ?

Recursive Descentשיטת •שיפור מנגנון ההחלטה•

כדי להחליט איזה כלל להפעיל על סמך הטרמינל –select2הבא הנצפה בקלט, הגדרנו את פונקצית

Page 3: מנתח  LL(1)

3

תזכורת (המשך)

•select(Aα) קבוצת כל הטרמינלים אשר יגרמו :.Aלבחור בכלל הזה עבור המשתנה

, הגדרנו את פונקציות העזר selectלצורך חישוב •first-ו follow

•first(A) כל הטרמינלים שיכולים להופיע בתחילת :.Aמילה שנגזרת מ-

•first(α) ההרחבה של :first.לתבניות פסוקיות

•follow(A) אחרי: כל הטרמינלים שיכולים להופיע .כלשהי בגזירה Aהמשתנה

Page 4: מנתח  LL(1)

LL(1)מנתח ניתוח שמאלי ביותר, מייצר משמאל לימיןקורא קלט •

. של טרמינל אחדlookaheadונעזר ב- בעת הניתוח.selectמסתמך על פונקצית •

אם ורק אם לא קיים LL(1) קיים מנתח Gלדקדוק •קונפליקט בדקדוק, כלומר לכל שני כללים בדקדוק עבור

:Aα , Aβאותו המשתנה- select(Aα) ∩ select(Aβ) = Ø

הרעיון: לחקות בעזרת מחסנית את תכנית ה - •Recursive Descent

RDשקול בכוח הניתוח ל-–4

Page 5: מנתח  LL(1)

מבני נתונים של המנתח•Q שרוצים עדיין : מחסנית הניתוח שמחזיקה את מה

לראותבראש המחסנית - מה שרוצים לראות מיד–Sאתחול: בראש המחסנית יהיה –pop, push, topתומכת בפעולות –

•M טבלה שאומרת איזה כלל גזירה יש להפעיל בהינתן :המשתנה הבא לגזירה והטרמינל הבא בקלט

M (X,t) = X α t select(X α)

error otherwise X Vt T

5 מכיל איבר אחד בלבדMכאשר אין קונפליקטים, כל תא של

Page 6: מנתח  LL(1)

דוגמה

נתון דקדוק הבא:•S Ab | bC

A a

C cA.LL(1) של מנתח Mנבנה טבלת • selectלצורך כך, נחשב תחילה את פונקציית •

עבור כל כלל גזירה.

6

Page 7: מנתח  LL(1)

דוגמה (המשך)

select(SAb) = {a}

select(SbC) = {b}

select(Aa) = {a}

select(CcA) = {c}

$ c b a

SbC SAb S

Aa A

CcA C

בניית הטבלה

errorהמקומות הריקים מכילים

M:

7

Page 8: מנתח  LL(1)

פעולות המנתח•MATCH t,t : הוצאת טרמינלים תואמים מהקלט

ומהמחסנית.אם הם לא תואמים עוצרים עם הודעת שגיאה.

•PREDICT X,t : החלפת משתנהX בצד ימין של כלל גזירה מתאים

איזה כלל גזירה להפעילM(X,t)חפש ב-–, עצור עם הודעת שגיאהerrorאם מצאת • מהמחסנית X. הוצא את X Y1Y2…Ynאחרת, נניח שזהו כלל •

למחסנית בסדר הפוך Y1Y2…Ynודחוף המחסניתבראש Y1כאשר

A

b

B

C

d

bPREDICT A,eכאשר

M(A,e) = A BCd

ראש

ראש

8

Page 9: מנתח  LL(1)

אלגוריתם הניתוחInit: push(Q,S), t is the 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)

MATCH (X,t)– if (X is variable)

PREDICT (X,t)

3. goto 1

9

Page 10: מנתח  LL(1)

המשך הדוגמה

:bcaריצת המנתח על המילה •

פעולה קלט מחסנית

bca$ S

10

c b a

S bC

S Ab

S

Aa A

C cA

C

X = top(Q) if (X is terminal)

MATCH (X,t) if (X is variable)

PREDICT (X,t)

Page 11: מנתח  LL(1)

:bcaריצת המנתח על המילה •

פעולה קלט מחסנית

predict S,b bca$ S

bca$ Cbראש

המחסנית

11

המשך הדוגמהX = top(Q) if (X is terminal)

MATCH (X,t) if (X is variable)

PREDICT (X,t)

c b a

S bC

S Ab

S

Aa A

C cA

C

Page 12: מנתח  LL(1)

:bcaריצת המנתח על המילה •

פעולה קלט מחסנית

predict S,b bca$ S

match b,b bca$ Cb

predict C,c ca$ C

match c,c ca$ Ac

predict A,a a$ A

match a,a a$ a

success $ <empty>12

המשך הדוגמה

c b a

S bC

S Ab

S

Aa A

C cA

C

X = top(Q) if (X is terminal)

MATCH (X,t) if (X is variable)

PREDICT (X,t)

Page 13: מנתח  LL(1)

שאלה לדוגמה

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

1-3הוא המינימלי שניתן לבחור כך שהדרישות יתקיימו.

13

Page 14: מנתח  LL(1)

פתרון השאלה

הדקדוק חייב להכיל לפחות •שני כללי גזירה מאותו משתנה

מדוע?–חייב להיות לפחות משתנה אחד•

מדוע?–חייב להיות לפחות טרמינל אחד•

מדוע?–לפיכך, נציע:•

S aa | a

.1L(G) מכילה לפחות שתי מילים.

.2G אינו דקדוק LL(1).

.3G הינו דקדוק LL(k) עבור k>1 .

.4 G 1 מינימלי עבור-3

Page 15: מנתח  LL(1)

S AABA aB b

עבור כל אחת מהאפשרויות הבאות, קבעו האם תוכן המחסנית הנתון

עבור הדקדוק הנ"ל על LL(1)בה, יכול להתקבל בריצה של המנתח

מילת קלט כלשהי (שאינה בהכרח בשפה). הסימן הימני ביותר הוא

בראש המחסנית:BAא.Baב.bAג. Aaד.

15

נתון הדקדוק הבא:

שאלה ממבחן (מועד א', אביב, תשס"ז)

Page 16: מנתח  LL(1)

שאלה ממבחן - המשך

BAא.

Baב.bAג.Aaד.

: נבנה את הטבלה: 1שלב

16

b a

S AAB S

A a A

B b B

S AABA aB b

Page 17: מנתח  LL(1)

BAא.

Baב.bAג.Aaד.

: נבנה לפי הטבלה את המצבים האפשריים במחסנית: 2שלב

S, BAA, BAa, BA, Ba, B, b --- ----- ----- ---- ---- --- --- ---

BA and Ba are ok …17

b a

S AAB S

A a A

B b B

Page 18: מנתח  LL(1)

שאלה ממבחןנתונים שני דקדוקים:

כך ש:

(שימו לב, קבוצת הטרמינלים משותפת)

נגדיר:

טבעי כך ש kהוכח/הפרך: קיים

18

Page 19: מנתח  LL(1)

שאלה ממבחן

אם ורק אם לא קיים LL(k) יש מנתח Gלדקדוק • טרמינלים.k של lookaheadקונפליקט בדקדוק עבור

או במילים אחרות, אין שני כללי גזירה המתאימים •לאותו התא בטבלה

M:

19

Page 20: מנתח  LL(1)

שאלה ממבחן ( ):k=2למשל עבור •

20

$$ b$ bb ba a$ ab aa

S

V1 variables

V2 variables

M:

Page 21: מנתח  LL(1)

שאלה ממבחן

אם ורק אם לא קיים LL(k) יש מנתח Gלדקדוק • טרמינלים.k של lookaheadקונפליקט בדקדוק עבור

במקרה זה הטענה אינה נכונה. נייצר דוגמא נגדית:•

k ולכן לכל Gלמילה יהיו שתי גזירות שונות בM(S,) יהיה קונפליקט בתא 1גדול/שווה ל-

21