מנתח ll(1)

Post on 01-Jan-2016

35 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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ד.

top related