Transcript
Page 1: ניתוח תחבירי  Top-Down

Top-Downניתוח תחבירי

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

1

Page 2: ניתוח תחבירי  Top-Down

תזכורת מתרגול אחרון

ראינו מהו המבנה הסכמתי של קומפיילר•

לקסמות, אסימונים, וביטויים רגולריים.•דנו בתכונות המנתח הלקסיקלי.•.Flexראינו את הכלי •

ניתוחלקסיקלי

ניתוחתחבירי

ניתוחסמנטי

backend

2

Page 3: ניתוח תחבירי  Top-Down

ניתוח תחביריהיום נתרכז בשלב הניתוח התחבירי•

ניתוחתחבירי

רצף אסימונים

עץ גזירה או הודעת (syntax error)שגיאה

שפת כל התכניות החוקיות מוגדרת ע"י דקדוק חופשי הקשר:•

3

G=)V,T,P,S(

V ,קבוצת המשתנים – T קבוצת הטרמינלים )א"ב השפה(: האסימונים –

המתקבלים מהניתוח הלקסיקלי,P ,קבוצת כללי הגזירה – S.משתנה התחלתי –

חוקית )נכתבה שלמהרצף האסימונים המתאים לתוכנית •באופן חוקי על פי כללי הדקדוק( מהווה מילה שצריכה

להתקבל בשפה.

Page 4: ניתוח תחבירי  Top-Down

דרישת מהמנתח התחבירי

מילה בשפה:כל המנתח צריך לזהות שלמות:•אם התכנית היא חוקית,–

עץ גזירה.המנתח יצליח לזהות אותה ויבנה

: אסור למנתח לקבל מילים שאינן נאותות•בשפה:

אם התכנית אינה חוקית,–שגיאה.המנתח לא יצליח לזהותה ויודיע על

4

Page 5: ניתוח תחבירי  Top-Down

Top-Downניתוח

(.Sהניתוח מתחיל מהמשתנה התחילי ) •מפעילים רצף של כללי גזירה.•עוצרים כאשר:•

המילה מגיעים למילת הקלט )התוכנית כולה( –בשפה.

המילה )לא ניתן להפעיל אף כלל גזירה( נתקעים–אינה בשפה.

5

Page 6: ניתוח תחבירי  Top-Down

דוגמה

+ x = yבקוד המקור: •1

id assign id opאחרי ניתוח לקסיקלי: •num

Top-Down:Eניתוח תחבירי •

id assign id op num

S

6

שימוש בכללS id assign E

טרמינל טרמינל משתנה

Page 7: ניתוח תחבירי  Top-Down

דוגמה

+ x = yבקוד המקור: •1

id assign id opאחרי ניתוח לקסיקלי: •num

Top-Down:Eניתוח תחבירי •

EE

id assign id op num

שימוש בכללE E op E

7

S

Page 8: ניתוח תחבירי  Top-Down

דוגמה

+ x = yבקוד המקור: •1

id assign id opאחרי ניתוח לקסיקלי: •num

Top-Down:Eניתוח תחבירי •

EE

id assign id op num

E idE num

8

Sשימוש בכללים

Page 9: ניתוח תחבירי  Top-Down

Top-Downניתוח

הבעיה העיקרית: איזה כלל להפעיל בכל צעד?•

S

A

A αA β ?

הסיטואציה: •(, Aיודעים איזה משתנה רוצים לגזור )

להשתמש.A כלל של באיזהאבל השאלה היא

9

Page 10: ניתוח תחבירי  Top-Down

Recursive Descentשיטת

נכתוב לכל משתנה פונקציה שיודעת הרעיון: •"לגזור" את כל המילים שניתן לקבל ממנו.

נבחר את כלל הגזירה לפי הסדר הבא:•, tכאשר הטרמינל הבא בקלט הוא –

:Aמבין כל הכללים של המשתנה , בחר בו.t יש כלל שמתחיל גם כן ב-Aאם ל-•, בחר בו.משתנה יש כלל יחיד שמתחיל בAאחרת, אם ל-•שגיאה.אחרת, החזר הודעת •

זאת רק דוגמה אפשרית לקביעת סדר שימו לב: •הכללים.

10

Page 11: ניתוח תחבירי  Top-Down

Recursive Descent דוגמה -

נתון הדקדוק:•

S aSa | B

B dB | e

Page 12: ניתוח תחבירי  Top-Down

דוגמה - המשך} ()S:function Sפונקציה ל"גזירת" המשתנה •

if (lookahead == ‘a’) {// S aSa

match(‘a’);S();match(‘a’);

} else {// S B

B();}

}

12

S aSa | B

B dB | e

משתנה עזר שמחזיקאת הטרמינל הבא

בקלט

function match (token t) {if (lookahead == t)

lookahead = next_token();else

error();}

פונקצית עזר:•

Page 13: ניתוח תחבירי  Top-Down

דוגמה - המשךפונקציה ל"גזירת" המשתנה •

B:

function B() {if (lookahead == ‘d’) {

// B dB

match(‘d’); B();} else if (lookahead == ‘e’) {

// B e

match(‘e’);} else

error();} מדוע כאן יש קריאה מפורשת

)( אין?S)( ובפונקציה errorל-13

S aSa | B

B dB | e

Page 14: ניתוח תחבירי  Top-Down

RDבעיות בשיטת לא ניתן לטפל בכל הדקדוקים•

( אם יש שני כללים או יותר שמתחילים במשתנה כלשהו.1 טרמינל.אותו( אם יש שני כללים או יותר שמתחילים ב2

המנתח לא שלם - הוא לא מזהה את כל המילים •בשפה

, Sa | Bb, Ba: עבור דקדוק עם כללי הגזירה: דוגמה–”, נשמח אם המנתח יבחר בכלל abעבור מילת קלט “

SBb , וייתקע.Saאבל לצערנו הוא יבחר בכלל

רקורסיה שמאלית תגרום לריצה אינסופית•b.14 , כאשר התו הבא בקלט אינו S Sa | b: דוגמה–

Page 15: ניתוח תחבירי  Top-Down

פתרונות אפשרייםשינוי הדקדוק לדקדוק שקול:1.

אם יש שני כללים המתחילים באותו טרמינל ניתן לבטל –A αβ1 | αβ2 | … | αβnרישות משותפות:

A αA’

A’ β1 | β2 | … | βn

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

15

A Aα | β

A βB

B αB | α

.RDבחירת שיטה אחרת מאשר 2.

Page 16: ניתוח תחבירי  Top-Down

1חסרונות של פתרון

לא מובטח שהבעיות ייפתרו:• במשתנהלא נותן מענה לשני כללים המתחילים –

שונה.

קיבלנו דקדוק "מכוער" ולא אינטואיטיבי.•

16

Page 17: ניתוח תחבירי  Top-Down

שיפור מנגנון ההחלטה לבחירת כלל

select: P 2Tנגדיר פונקציה: •קבוצת , איזו P ב כללשמגדירה לכל

)ליטרלים( בקלט יגרמו לבחירת טרמינליםהכלל הזה.

?Aαאז מתי ייבחר הכלל

17

: A tβ [ tT, β)VT(* ]א( אם זהו כלל מהצורה

הוא הטרמינל הבא בקלט:tהכלל ייבחר כאשר S

A

t...

Page 18: ניתוח תחבירי  Top-Down

:A Bβ [ BV, β)VT(* ]אם זהו כלל מהצורה ב( יכול לגזור B , מקיים שהמשתנה t( כאשר הטרמינל הבא בקלט - 1

(:B* tαמילה המתחילה בו )כלומר,

, עבור כל משתנה בדקדוק:firstנגדיר פונקצית עזר –

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

גוזרBמילה ש-t first)B( =

נבחר בכלל הזה כאשר התבנית (: B*ε אפיס )Bאם ) 2 יכולה לגזור מילה המתחילה בטרמינל הבא בקלט βהפסוקית

-t:β)VT(: [ *A גם לתבניות פסוקיות [first– נגדיר

B β

t …

S

ε

AB β

t …

S

18

?Aαמתי ייבחר הכלל

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

גוזרתβמילה שהתבניתt first)β( =

Page 19: ניתוח תחבירי  Top-Down

: (Bβ*ε אפיס )כולואם הכלל (3, יכול tנבחר בכלל הזה כאשר רואים שהטרמינל הבא בקלט -

:Aאחרי להופיע מיד

:, עבור כל משתנה בדקדוק followנגדיר פונקצית עזר נוספת –

כל הטרמינלים שיכולים A להופיע מיד לאחר

בגזירה כלשהיt follow)A( =

AB β

ε t …

C

19

?Aαמתי ייבחר הכלל

:A Bβ [ BV, β)VT(* ]אם זהו כלל מהצורה ב(

Page 20: ניתוח תחבירי  Top-Down

הגדרות פורמאליות•First: )VT(* 2T –

גוזרת:αתבנית כל הטרמינלים שיכולים להופיע בתחילת מילה ש

First )α( = { t T | α * tβ }•Follow: V 2T –

:כלשהי בגזירה Aכל הטרמינלים שיכולים להופיע מיד לאחר המשתנה

Follow )A( = { t T{$} | S$ * αAtβ }S( אינו - משתנה תחילי של הדקדוק, $ - סימן סוף קלט.)חלק מאוסף הטרמינלים

α,β )VT(. *

•select: P 2T – לכל כלל בדקדוק, זו קבוצת הטרמינלים )אסימונים( האפשריים שיגרמו לכלל •

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

Select )Aα(=

first)α( follow)A( α * ε

first)α( otherwise 20

Page 21: ניתוח תחבירי  Top-Down

firstאלגוריתם לחישוב פונקצית – בודקים אילו משתנים הם אפיסים.0שלב • בדקדוק )X)VT עבור כל סימן first – חישוב 1שלב •

ע"פ האלגוריתם הבא:

אתחול:•first)t( := {t} בצע: tTלכל טרמינל –first)A( := Ø בצע: AVלכל משתנה –

AY1Y2…Ykצעד: כל עוד יש שינויים, לכל כלל • ]Yi )VT( עבורk ≥ i ≥ 1 :בצע ,[

–first)A( := first)A( first)Y1(

, בצע: Y1Y2…Yi -1*ε עבורו i > 1לכל –

first)A( := first)A( first)Yi(

יש כאן תלות מעגלית!: שימו לבהאלגוריתם הוא איטרטיבי

ופועל עד שאין יותר שינויים.

Page 22: ניתוח תחבירי  Top-Down

תבנית פסוקית עבור first – חישוב 2שלב •x1x2…xk=α:

כלומר:•–first)x1(איחוד עם ,

–first)x2(-במקרה ש x1אפיס, איחוד עם

–first)x3(-במקרה ש x1-ו x2... אפיסים, איחוד עם

x1x2…xj -1*εfirst)α( := first)xj(

22

firstאלגוריתם לחישוב פונקצית

Page 23: ניתוח תחבירי  Top-Down

firstדוגמה - חישוב

נתון דקדוק:•

.S,C,B – המשתנים האפיסים: 0שלב •

S aB | BC | CBdB b | εC c | ε

עבור המשתנים:first - חישוב 1שלב •

C B S

Ø Ø Ø 1

23

] , בצע:k ≥ i ≥ 1עבור )AY1Y2…Yk ]Yi)VTצעד: כל עוד יש שינויים, לכל כלל -first)A( := first)A( first)Y1(

)first)A( := first)A( first)Yi, בצע: Y1Y2…Yi -1 *ε עבורו i > 1- לכל

Page 24: ניתוח תחבירי  Top-Down

S aB | BC | CBdB b | εC c | ε

עבור המשתנים:first - חישוב 1שלב •

C B S

Ø Ø Ø 1

{c} {b} {a,d} 2

24

נתון דקדוק:•

.S,C,B – המשתנים האפיסים: 0שלב •

] , בצע:k ≥ i ≥ 1עבור )AY1Y2…Yk ]Yi)VTצעד: כל עוד יש שינויים, לכל כלל -first)A( := first)A( first)Y1(

)first)A( := first)A( first)Yi, בצע: Y1Y2…Yi -1 *ε עבורו i > 1- לכל

firstדוגמה - חישוב

Page 25: ניתוח תחבירי  Top-Down

S aB | BC | CBdB b | εC c | ε

עבור המשתנים:first - חישוב 1שלב •

C B S

Ø Ø Ø 1

{c} {b} {a,d} 2

{c} {b} {a,d,b,c} 3

25

נתון דקדוק:•

.S,C,B – המשתנים האפיסים: 0שלב •

firstדוגמה - חישוב

Page 26: ניתוח תחבירי  Top-Down

S aB | BC | CBdB b | εC c | ε

עבור המשתנים:first - חישוב 1שלב •

C B S

Ø Ø Ø 1

{c} {b} {a,d} 2

{c} {b} {a,d,b,c} 3

{c} {b} {a,d,b,c} 4

נתון דקדוק:•

.S,C,B – המשתנים האפיסים: 0שלב •

firstדוגמה - חישוב

Page 27: ניתוח תחבירי  Top-Down

:אגפי ימין לfirst - חישוב 2שלב •

first)aB( = {a}

first)BC( = first)B(first)C( = {b,c}

first)CBd( = first)C(first)B(first)d( = {c,b,d}

27

S aB | BC | CBdB b | εC c | ε

x1x2…xj-1*ε

first)α( := first)xj(

firstדוגמה - חישוב

Page 28: ניתוח תחבירי  Top-Down

followאלגוריתם לחישוב פונקצית

follow)A( = { t T{$} | S$ * αAtβ }רוצים לחשב •

אתחול:•:= {$})S: follow)Sלמשתנה התחילי –A ≠ S: follow)A(:= Øלכל משתנה –

בצע:AVצעד: כל עוד יש שינויים, לכל משתנה •בצע: מופיע איפשהו באגף ימין( A)כל כלל בו בדקדוק Y αAלכל כלל –

•follow)A( := follow)A( first)β()follow)A( := follow)A( follow)Y, בצע גם: β*εואם •

. αAβ, אזי הוא יכול להופיע גם אחרי Y’ יכול להופיע אחרי t[ אם ... ]A’ בעצם יכול להופיע גם אחרי t אפיס, אזי βאבל אם

28

Page 29: ניתוח תחבירי  Top-Down

S aB | BC | CBdנתון דקדוק:•B b | εC c | ε

(:לכל משתנה דקדוק )followחישוב •

C B S

Ø Ø {$} 1

29בדקדוק בצע: Y αAלכל כלל

follow)A( := follow)A( first)β()follow)A( := follow)A( follow)Y, בצע גם: β*εואם

followהמשך דוגמה - חישוב

Page 30: ניתוח תחבירי  Top-Down

S aB | BC | CBdנתון דקדוק:•B b | εC c | ε

C B S

Ø Ø {$} 1

{b,d,$} {c,$,d} {$} 2

לא מופיעSמשתנה בצד ימין של אף כלל גזירה

SBCמתוך SCBdמתוך

30

(:לכל משתנה דקדוק )followחישוב •

בדקדוק בצע: Y αAלכל כלל follow)A( := follow)A( first)β(

)follow)A( := follow)A( follow)Y, בצע גם: β*εואם

followהמשך דוגמה - חישוב

Page 31: ניתוח תחבירי  Top-Down

S aB | BC | CBdנתון דקדוק:•B b | εC c | ε

C B S

Ø Ø {$} 1

{b,d,$} {c,$,d} {$} 2

{b,d,$} {c,$,d} {$} 3

31

(:לכל משתנה דקדוק )followחישוב •

followהמשך דוגמה - חישוב

Page 32: ניתוח תחבירי  Top-Down

נתון דקדוק:•

:לכל כלל בדקדוק selectחישוב קבוצת הטרמינלים •:תזכורת–

select)Aα(= first)α( follow)A(α * ε

first)α( otherwise

32

S aB | BC | CBdB b | εC c | ε

selectהמשך דוגמה - חישוב

Page 33: ניתוח תחבירי  Top-Down

S aB | BC | CBdB b | εC c | ε

:לכל כלל בדקדוק selectחישוב •

33

selectהמשך דוגמה - חישוב

select)SaB( = first)aB( = {a}select)SBC( = first)BC(follow)S( = {b,c,$}select)SCBd( =select)Bb( =select)Bε( =select)Cc( = select)Cε( =

select)Aα(=

first)α( follow)A( α * ε

first)α( otherwise

Page 34: ניתוח תחבירי  Top-Down

S aB | BC | CBdB b | εC c | ε

:לכל כלל בדקדוק selectחישוב •select)SaB( = first)aB( = {a}select)SBC( = first)BC(follow)S( = {b,c,$}select)SCBd( = first)CBd( = {b,c,d}select)Bb( = first)b( = {b}select)Bε( = first)ε)follow)B( = {c,d,$(select)Cc( = first)c( = {c}select)Cε( = first)ε(follow)C( = {b,d,$}

34

selectהמשך דוגמה - חישוב select)Aα(=

first)α( follow)A( α * ε

first)α( otherwise


Top Related