תרגול 11: backpatching

24
ללללל11 : Backpatching ללללל ללללללBackpatch ללללל:SWITCH לללל ללללל1

Upload: ansel

Post on 23-Feb-2016

56 views

Category:

Documents


1 download

DESCRIPTION

תרגול 11: Backpatching. שלבים בפתרון Backpatch דוגמא: SWITCH שאלה ממבחן. שלבים בפתרון. פריסת קוד: ציור סכמאטי של הקוד שיווצר . סכימת תרגום: כתיבת הכללים הסמנטיים. Switch : example. Switch (x) { case 5: … break; case 7: … break; … case 12: …break; }. Case List. Case List. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: תרגול 11:  Backpatching

Backpatching: 11תרגול Backpatchשלבים בפתרון •

SWITCHדוגמא: •

שאלה ממבחן•

1

Page 2: תרגול 11:  Backpatching

שלבים בפתרון

פריסת קוד: •

ציור סכמאטי של הקוד שיווצר.–

סכימת תרגום:•

כתיבת הכללים הסמנטיים.–

2

Page 3: תרגול 11:  Backpatching

Switch: example

Switch (x) {case 5: … break;case 7: … break;…case 12: …break;

}

3

Page 4: תרגול 11:  Backpatching

switchתרגום פקודת

CaseCaseCaseCase

Case ListCase ListCase ListCase List

4

S → switch ( E ) { CL }

CL → C CL | C

C → case num : S ; break ;

Page 5: תרגול 11:  Backpatching

: פריסת קודIשלב

ציור סכימטי של •הקוד שיווצר:

מיקום יחסי של 1.הקוד הנפלט

)קבוע(. goto פקודות2.

שנרצה לתפור.הקוד המאחה.3.

5

S → switch ( E ) { CL }CL → C CL | CC → case num : S ; break ;

Page 6: תרגול 11:  Backpatching

: סכימת תרגוםIIשלב

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

6

Page 7: תרגול 11:  Backpatching

7

• S: nextlist .

• E: place .

• C: value, quad,

nextlist.

• CL: value_list (stack),

quad_list (stack),

nextlist .

תכונות סמנטיות למשתני הדקדוקהנחה: כל נקודות היציאה מהקוד

gotoהמתאים למשתנה הן בפקודת .___

nextlist היא רשימה המכילה את כלל הכתובות של נקודות היציאה הללו.

Page 8: תרגול 11:  Backpatching

מרקרים שימושיים

8

M → ε{

M.quad = nextquad();}

N → ε{

N.nextlist = makelist (nextquad());emit (“goto ___”);

}

Page 9: תרגול 11:  Backpatching

9

C → case num : M S ; break ; {

C.quad = M.quad;C.value = num.value;C.nextlist = S.nextlist;

}

S → switch ( E N ) { CL }CL → C CL | CC → case num : M S ; break ;

פריסת הקוד:

Page 10: תרגול 11:  Backpatching

10

CL → C{

CL.quad_list = newstack();CL.quad_list.push(C.quad);CL.value_list = newstack();CL.value_list.push(C.value);CL.nextlist = C.nextlist;

}

תזכורת: מכיל את התווית הראשונה של

Sn

S → switch ( E N ) { CL }CL → C CL | CC → case num : M S ; break ;

Page 11: תרגול 11:  Backpatching

11

CL → C CL1

{

CL.quad_list = CL1.quad_list;

CL.quad_list.push(C.quad);

CL.value_list = CL1.value_list;

CL.value_list.push(C.value);

CL.nextlist=merge(CL1.nextlist,C.nextlist);

}

S → switch ( E N ) { CL }CL → C CL | CC → case num : M S ; break ;

Page 12: תרגול 11:  Backpatching

S → switch ( E N ) { CL }CL → C CL | CC → case num : M S ; break ;S → switch ( E N ) { CL }

{backpatch(N.nextlist, nextquad());while (!CL.value_list.empty()) {

value = CL.value_list.pop();quad = CL.quad_list.pop();emit(“if” || E.place || ”=“ || value ||

”goto” || quad);}S.nextlist = merge ( CL.nextlist,

makelist(nextquad() );emit (“goto ___”);

}

Page 13: תרגול 11:  Backpatching

שאלה ממבחן

13

Page 14: תרגול 11:  Backpatching

Lisp style loops

14

1( S loop COND_LIST do S1

2( COND_LIST COND_LIST1 COND3( COND_LIST COND4( COND while B 5( COND until B

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

מתקייםBהתנאי הבוליאני כל עודהלולאה תתבצע

יתקייםB התנאי הבוליאני עד אשרהלולאה תתבצע

Page 15: תרגול 11:  Backpatching

דוגמא:

15

Page 16: תרגול 11:  Backpatching

פתרון - נניח, לרגע, דקדוק מצומצם

16

1( S loop COND_LIST do S1

2( COND_LIST COND_LIST1 COND3( COND_LIST COND4( COND while B

מתקייםBהתנאי הבוליאני כל עודהלולאה תתבצע

Page 17: תרגול 11:  Backpatching

פריסת קוד

17

B1 (While)

Bn (While)

S1

nextlist

falselist

B2 (While)

S

nextlist

truelist

truelist

truelist

Page 18: תרגול 11:  Backpatching

תכונות

COND_LIST: truelist, falselist,start_quad ( היכן התנאי

(הראשון

18

S: nextlist

B: truelist, falselist

COND: truelist, falselist, quad (היכן התנאי מתחיל)

Page 19: תרגול 11:  Backpatching

סכימת תרגום

COND while M B {

COND.quad = M.quad;COND.truelist = B.truelist;COND.falselist = B.falselist;

}

19

Page 20: תרגול 11:  Backpatching

סכימת תרגוםCOND_LIST COND{

COND_LIST.start_quad = COND.quad;

COND_LIST.truelist = COND.truelist;

COND_LIST.falselist = COND.falselist;

}

20

Page 21: תרגול 11:  Backpatching

COND_LIST COND_LIST1 COND

{

COND_LIST.start_quad = COND_LIST1.start_quad;

backpatch )COND_LIST1.truelist, COND.quad(;

COND_LIST.truelist = COND.truelist;

COND_LIST.falselist = merge )COND_LIST1.falselist,

COND.falselist(;

}

21

Page 22: תרגול 11:  Backpatching

S loop COND_LIST do M S1{

backpatch )COND_LIST.truelist, M.quad(;backpatch )S1.nextlist, COND_LIST.start_quad(;

S.nextlist = COND_LIST.falselist;

}

22

Page 23: תרגול 11:  Backpatching

נניח כעת דקדוק לא מצומצם

23

1( S loop COND_LIST do S1

2( COND_LIST COND_LIST1 COND3( COND_LIST COND4( COND while B 5( COND until B

מתקייםBהתנאי הבוליאני כל עודהלולאה תתבצע

יתקייםB התנאי הבוליאני עד אשרהלולאה תתבצע

Page 24: תרגול 11:  Backpatching

פריסת קוד

24

B1 (While)

nextlist

B2 (Until) truelist

truelist

B3 (While)

falselist

falselist

falselist

סכימת תרגוםCOND until M B

{COND.quad = M.quad;COND.truelist = B.falselist;COND.falselist = B.truelist;

}