מנתח ll(1)

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

Upload: ciaran-adams

Post on 01-Jan-2016

35 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(נכתב ע"י אלכס קוגן (סמסטר חורף, תשס"ח

Page 2: מנתח  LL(1)

תזכורת

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

S

A

A αA β ?

Recursive Descentשיטת •

שיפור מנגנון ההחלטה•כדי להחליט איזה כלל להפעיל על סמך טרמינל –

selectהבא בקלט, הגדרנו פונקצית

Page 3: מנתח  LL(1)

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

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

first, הגדרנו פונקציות עזר selectלצורך חישוב של •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שקול בכוח הניתוח ל-–

Page 5: מנתח  LL(1)

מבני נתונים של המנתח

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

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

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

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

error otherwise X Vt T

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

Page 6: מנתח  LL(1)

דוגמה

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

A a

C cALL(1) של מנתח Mנבנה טבלת • עבור כל כלל גזירהselectלצורך כך, נחשב תחילה •

Page 7: מנתח  LL(1)

דוגמה (המשך)

select(SAb) = {a}

select(SbC) = {b}

select(Aa) = {a}

select(CcA) = {c}

abc$

SSAb SbC

AAa

CCcA

בניית הטבלה

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

M:

Page 8: מנתח  LL(1)

פעולות המנתח

•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)

אלגוריתם הניתוח

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)

דוגמה (המשך)

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

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

Sbca$

Page 11: מנתח  LL(1)

דוגמה (המשך)

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

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

Sbca$replace S,b

Cbbca$

ראשהמחסנית

Page 12: מנתח  LL(1)

דוגמה (המשך)

: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)

שאלה לדוגמה

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

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

הסבירו מדוע הדקדוק מקיים את הדרישות.

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 AAB

A a

B bעבור כל אחת מהאפשרויות הבאות, קבעו האם •

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

כלשהי (שאינה בהכרח בשפה). הסבירו

Page 16: מנתח  LL(1)

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

S AABA aB b

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