ניתוח תחבירי top-down

34
ייייי ייייייTop-Down ( יייי י"י יייי יייי( sakogan@cs ייייי יייי, ייי"י1

Upload: cleave

Post on 06-Jan-2016

102 views

Category:

Documents


5 download

DESCRIPTION

ניתוח תחבירי Top-Down. נכתב ע"י אלכס קוגן ( (sakogan@cs סמסטר חורף, תשס"ח. backend. ניתוח סמנטי. ניתוח תחבירי. ניתוח לקסיקלי. תזכורת מתרגול אחרון. ראינו מהו המבנה הסכמתי של קומפיילר לקסמות, אסימונים, וביטויים רגולריים. דנו בתכונות המנתח הלקסיקלי. ראינו את הכלי Flex. ניתוח תחבירי. - PowerPoint PPT Presentation

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