ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי...

37
( ייייי ייייייParsing יייי- )
  • date post

    20-Dec-2015
  • Category

    Documents

  • view

    275
  • download

    1

Transcript of ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי...

Page 1: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

( - המשךParsingניתוח תחבירי )

Page 2: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

תזכורת: סוגי הניתוח התחבירי

top-down – "מהשורש לעלים )נקרא גם – "ניתוח תחזית – predictive)

bottom-up מהעלים לשורש – מעבירים למחסנית, או מחליפים צד – (shift reduceימין בסימן מהצד השמאלי של חוק הדקדוק )

x y

s

x y

s

Page 3: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

LR אלגוריתם

Page 4: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

LR(k)אלגוריתם

הוא אלגוריתם:LR(k)אלגוריתם bottom-up,,מבוסס טבלאות( סורק את הקלט משמאלL,לימין )( מניב את הגזירה הימניתR,ביותר )-וזקוק לlookahead בגודל k.

המקרה הפשוט ביותר הוא אלגוריתם LR(0).

Page 5: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

LL(k), LR(k)שפות

אם אפשר לגזור אותה LR(k)שפה נקראת .LR(k) parserבעזרת

– אבל לא LR(n) היא גם LL(n)כל שפה להיפך.

.LL מכיל ממש את LRכלומר,

Page 6: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

LR(0)אלגוריתם

מחסנית

Parser

קלט

פלט

פעולות טבלת

gotoטבלת

Page 7: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

דקדוק פשוט לדוגמא...

נשתמש בדקדוק הבא לצורך הדגמה:

E → E * B | E + B | BB → 0 | 1

ממוספר, בצורה מסודרת:

(1) E → E * B(2) E → E + B(3) E → B(4) B → 0(5) B → 1

Page 8: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

המחסנית

)מזוהים על-ידי מצבים מכילה LRהמחסנית ב-מספר(.

לצורך קריאות, נכלול במחסנית גם משתנים אין בכך צורך אמיתיואסימונים. למעשה, מבחינת האלגוריתם.

" שנמצא בתחתית המחסנית, 0למעט מצב "כל שאר המחסנית תהיה מורכבת מזוגות של

מצב+משתנה או מצב+אסימון.

".0 מכילה רק את מצב "המחסנית ההתחלתית

Page 9: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

טבלת הפעולות

טבלה זו מכתיבה את הפעולה לביצוע בכל שלב.

מצבים )על-פי מספרים(. שורות הטבלה:

עמודות הטבלה: אסימונים אפשריים בקלט.

.הוראות ביצועתוכן הטבלה:

Page 10: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

הוראות ביצוע

הוראות הביצוע בטבלת הפעולות יכולות להיות:

shift n מסומנתsn למשל( s1, s2)'וכו פירושה: העברת תו הקלט הבא למחסנית, ומעבר למצבn

reduce m מסומנתrm למשל( r1, r2)'וכו 'פירושה: זיהינו כלל גזירה מסm

accept מסומנתacc.פירושה: הקלט נגזר בהצלחה

.שגיאה בקלטתאים ריקים –

Page 11: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

Gotoטבלת

טבלת העזר השנייה משמשת במקרים בהם זיהינו גזירה של כלל.

שורות הטבלה: מצבים

עמודות הטבלה: משתנים

תוכן הטבלה: מצבים.

היות שלשתי הטבלאות אותן שורות, מקובל להציג אותן זו-לצד-זו.

Page 12: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

E → E * B )1(למשל...)2( E → E + B

)3( E → B)4( B → 0)5( B → 1 gotoטבלת טבלת הפעולות

*+01$EB

0s1s234

1r4r4r4r4r4

2r5r5r5r5r5

3s5s6acc

4r3r3r3r3r3

5s1s27

6s1s28

7r1r1r1r1r1

8r2r2r2r2r2

Page 13: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

שאלה...

m, מדובר בכלל גזירה rmעבור כל כלל אבל מה מסמנים המספרים עבור כללי

sn?

?nמהו טווח הערכים של

Page 14: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

האלגוריתם

"0 "אתחול המחסנית:

אסימון הקלט הבא(:t ראש המחסנית, i )action[t, i]מצא את אם מצאתshift n:

הסר את האסימוןt,מהקלט את הוסףt ואח"כ את n.למחסנית

אם מצאתreduce m: יהיw מספר התווים בצד ימין של כלל הגזירה מספר m .

ערכים מהמחסנית.2wהסר יהיM המשתנה שגוזר כלל m הוסף את .M.למחסנית מצא אתgoto[s, M]( s והוסף החדש ראש המחסנית )

אותו למחסנית. אם מצאתacc:.סיום בהצלחה :סיום בשגיאה.אחרת

המשך עד לעצירה.

Page 15: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

בניית הטבלה

... למרבה הצער, הפעם לא בתרגול אלא בהרצאה.

ראשית, כמה הגדרות.

Page 16: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

LR(0)פריטי

( item, ובעברית פריט )או בקיצור LR(0)פריט הגדרה:הוא כלל גזירה עם "נקודה" מיוחדת בתוכו.

n+1 רכיבים מצד ימין ניתן לקבל nמכלל גזירה עם פריטים.

רכיבים מימין( נקבל את 3 )E → E + Bלמשל, עבור הכלל הפריטים הבאים:4

E → ∙ E + BE → E ∙ + BE → E + ∙ BE → E + B ∙

ניתן לקבל A → ε, לכן מהכלל 0 נחשב לכלל באורך εכלל רק את הפריט:

A → ∙

Page 17: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

מה משמעותו של פריט?

פריט אינו באמת כלל גזירה )בכללים האמיתיים אין את הנקודה(.

.parserפריט מסמל את מצבו של ה-

משמעותו: זיהינו את מה שנמצא לפני )משמאל( הנקודה; אנו מצפים כעת למצוא את מה שנמצא אחריה )מימינה(.

למשל, הפריט:

E → E ∙ + B בקלט, E זיהה מחרוזת המתאימה ל-parserמסמן כי ה-

והוא כעת מצפה למצוא "+" ואחר-כך מחרוזת המתאימה .Bל-

Page 18: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

קבוצות של פריטים

למרבה הצער, בדרך-כלל לא ניתן לתאר את מצב בעזרת פריט יחיד.parserה-

, אנו עשויים Eלמשל, אם זיהינו מחרוזת המתאימה ל-להיות במצב

E → E ∙ + B... אבל מצד שני, אולי אנו במצב

E → E ∙ * Bקבוצה של בעזרת parserלכן מציינים את מצבו של ה-

.פריטים

למשל,

{E → E ∙ + B , E → E ∙ * B}

Page 19: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

סגור של קבוצת פריטים

אם קבוצת הפריטים הנוכחית כוללת מצב שבו הנקודה נמצאת לפני משתנה, קשה לדעת מה צריך להיות הפריט

הבא בקלט.

של קבוצת הפריטים.קבוצת הסגורלשם כך בונים את

קבוצת הסגור של קבוצת פריטים: קבוצת הגדרה:פריטים שבה, עבור כל פריט בקבוצה מהצורה

A → α ∙ B β בדקדוק, גם הפריטB → δועבור כל כלל מהצורה

B → ∙ δנמצא בקבוצה.

עשוי δבניית קבוצת הסגור היא איטרטיבית, משום שגם להתחיל במשתנה.

Page 20: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

סגור של קבוצת פריטים – דוגמא

למשל, עבור קבוצת הפריטים:

C = { E → E + ∙ B }ובהנתן הדקדוק מהדוגמאות הקודמות,

קבוצת הסגור היא:

clos(C) = { E → E + ∙ B , B → ∙ 0 , B → ∙ 1 }

Page 21: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

דקדוק מורחב הוא דקדוק שהוסיפו לו כלל יחיד, דקדוק מורחב הגדרה:

המבטיח שהגזירה האחרונה היא חד-משמעית בהיותה אחרונה.

, S → Eנרחיב את הדקדוק על-ידי הוספת כלל גזירה כאשר:

S משתנה שלא היה קיים בדקדוק לפני-כן, והוא כעת המשתנה הראשון,

E.המשתנה הראשון המקורי של הדקדוק ".0נהוג למספר את הכלל החדש "

(0) S → E(1) E → E * B(2) E → E + B(3) E → B(4) B → 0(5) B → 1

Page 22: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

מכונת המצבים והמצב ההתחלתי

בבניית הטבלאות, אנו בונים למעשה מכונת מצבים שלה מסומן על-ידי קבוצת סגור מצבדטרמיניסטית שכל כלשהי של פריטים.

המצב ההתחלתי הוא הסגור של הפריט הראשון מהכלל .S → ∙ Eשהוספנו בבניית הדקדוק המורחב:

S → ∙ E.בדוגמא שלנו :המצב ההתחלתי בדוגמא שלנו הוא

clos({S → ∙ E }) ={S → ∙ E , E → ∙ E * B , E → ∙ E + B , E → ∙ B , B → ∙ 0 , B → ∙ 1}

0זוהי "קבוצת פריטים."

Page 23: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

המצבים הבאים

איך מוצאים לאילו מצבים ניתן להגיע ממצב נתון?

א. מצא את כל הפריטים במצב הנוכחי, שבהם הנקודה .xנמצאת לפני סימן נתון כלשהו

x.יכול להיות אסימון או משתנה נסמן קבוצת פריטים זוS תת-קבוצה של המצב(

הנוכחי(.

.Sב. הזז את הנקודה צעד אחד ימינה עבור כל הפריטים ב-ג. מצא את הסגור של הקבוצה שהתקבלה.

שנמצא בעזרת הכללים הללו הוא מצב חדש clos(S)כל .xשניתן להגיע אליו מהמצב הנוכחי, כאשר בקלט מופיע

Page 24: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

0למשל: מצבים שניתן להגיע אליהם ממצב בדוגמא

:1מצב

x = 0S1 = { B → ∙ 0 }

S1 = { B → 0 ∙ }

clos(S1) = { B → 0 ∙ }

:2מצב

x = 1S2 = { B → ∙ 1 }

S2 = { B → 1 ∙ }

clos(S2) = { B → 1 ∙ }

:3מצב

x = ES3 = {S → ∙ E , E → ∙ E * B , E → ∙ E + B}

S3 = {S → E ∙ , E → E ∙ * B , E → E ∙ + B}

clos(S3) ={S → E∙, E → E∙*B , E → E ∙ + B}

:4מצב

x = BS4 = { E → ∙ B }

S4 = { E → B ∙ }

clos(S4) = {E →B∙}

Page 25: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

ממשיכים...

ממשיכים למצוא את כל המצבים שניתן להגיע אליהם מכל אחד מהמצבים שמצאנו עד כה.

בדוגמאות עד כה אין מצבי המשך )משום 4 ו-2, 1ממצבים כל פריט בקבוצת סגור אלה(.סוףשהנקודה תמיד נמצאת ב

ניתן להגיע למצבים חדשים:3ממצב

:5מצב

x = *S5 = { E → E ∙ * B }

S5 = { E → E * ∙ B }

clos(S5) = { E → E * ∙ B , B → ∙ 0 , B → ∙ 1 }

:6מצב

clos(S6) = { E → E + ∙ B , B → ∙ 0 , B → ∙ 1 }

Page 26: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

וממשיכים...

(.x )כערכים עבור B ו-1, 0 ניתן להתקדם בעזרת הסימנים 5ממצב

, בהתאמה.2 ו-1 נגיע שוב למצבים x = 1 ועבור x = 0אבל עבור

:x=Bעבור

, נקבל את:x=B, עבור 6באופן דומה, ממצב

למצבים אלה אין מצבי המשך )מדוע?(

:7מצב

clos(S7) = { E → E * B ∙ }

:8מצב

clos(S7) = { E → E + B ∙ }

Page 27: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

בניית הטבלאות: טבלת המעברים הראשונית

שורה עבור כל מצב.

מתייחסים לטבלאות כאל טבלת מעבריםשל האוטומט.

בשורה של מצב a בעמודה ,

xשהיא ה-ששימש לבניית

, רושמים bמצב .bאת

gotoטבלת טבלת הפעולות

*+01$EB

01234

1

2

356

4

5127

6128

7

8

Page 28: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

בניית הטבלאות: מצבי הסיום

accמוסיפים בעמודה $ עבור

כל מצב, שקבוצת

הפריטים שלו כוללת את

הפריט

S → E ∙

gotoטבלת טבלת הפעולות

*+01$EB

01234

1

2

356acc

4

5127

6128

7

8

Page 29: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

shiftבניית הטבלאות: פעולות

כל ערך מספרי n בטבלת

הפעולות הופך .snלהוראת

gotoטבלת טבלת הפעולות

*+01$EB

0s1s234

1

2

3s5s6acc

4

5s1s27

6s1s28

7

8

Page 30: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

reduceבניית הטבלאות: פעולות

עבור כל מצב, שקבוצת

הפריטים שלו כוללת את

A → α ∙כך שקיים בדקדוק

כלל

A → α mשמספרו

(m>0):

ממלאים את השורה של מצב זה

)בטבלת הפעולות( בערך

rm.

gotoטבלת טבלת הפעולות

*+01$EB

0s1s234

1r4r4r4r4r4

2r5r5r5r5r5

3s5s6acc

4r3r3r3r3r3

5s1s27

6s1s28

7r1r1r1r1r1

8r2r2r2r2r2

Page 31: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

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

מכילה מספרי מצב parserאמרנו שמחסנית ה-וסמלים לסירוגין.

.סמל = אסימון או משתנה

אמרנו גם שלמעשה, האלגוריתם זקוק רק למספרי המצב שבמחסנית.

לקרוא את הסמלים במחסנית מאפשרים לנו כמסלול באוטומט של האלגוריתם.המחסנית

הסמלים שבין המצבים מסמנים את הקשתותדרכן עברנו.

Page 32: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

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

למשל, אם המחסנית ברגע נתון היא:

216+3E0

03

6

2E+ 1

Page 33: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

LRסוגי

.LR(0)הטבלה שבנינו היא טבלה עבור

נוצרו רק על-ידי הפיכת reduceזאת משום שכללי .reduce לשורה של הוראות שורה שלמה

כלומר, מבצעיםreduce ללא תלות באסימון .lookaheadשבקלט – או במילים אחרות, אפס

ישנם שיפורים לאלגוריתם הבנייה... אלגוריתםCLR (Cannonic LR) או LR(1) חזק –

אבל "כבד" אלגוריתםLALR (Look Ahead LR) פשרה –

סבירה.

Page 34: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

קונפליקטים בטבלאות

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

קיים בשורה זו.

לכן ייתכן שבתאים מסוימים בטבלה יש )או יותר(.שני ערכים

.קונפליקטיםמקרים כאלה נקראים

Page 35: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

reduce/reduceקונפליקט

נוצר כשבתא אחד reduce/reduceקונפליקט .reduceיש כמה אפשרויות שונות ל-

למשל, נסו ליצור את הטבלה עבור הדקדוק הבא:

E → A 1E → B 1A → 1B → 1

Page 36: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

shift/reduceקונפליקט

וגם הוראת reduceכשבתא אחד יש גם הוראת shift קונפליקט , מקבליםshift/reduce.

למשל, עבור הדקדוק הבא:

E → 1 EE → 1

Page 37: ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית "

קונפליקטים

מה הפירוש הסמנטי של קונפליקט המתקבל בדקדוק?

כיצד ניתן להתגבר על קונפליקטים?