29
Backpatching 1

Backpatching 1. מה בתרגול ? שלבים בפתרון Backpatch דוגמא : SWITCH שאלה ממבחן 2

Embed Size (px)

Citation preview

Backpatching

1

מה בתרגול?

Backpatchשלבים בפתרון •

SWITCHדוגמא: •

שאלה ממבחן•

2

שלבים בפתרון

פריסת קוד: ציור סכמאטי של הקוד שיווצר•כתיבת הכללים הסמנטיים סכימת תרגום:•

3

Switch: example

Switch (x) {

case 5: … break;

case 7: … break;

case 12: …break;

}

4

Translating Switch

CaseCaseCaseCase

Case ListCase ListCase ListCase List

5

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

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

6

פריסת קודS

7

סכימת תרגום

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

8

9

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

10

הכללית הסמנטיים

11

הכללית הסמנטיים

12

הכללית הסמנטיים

13

הכללית הסמנטיים

14

שאלה ממבחן

15

Lisp style loops

16

17

דוגמא:

18

פתרון

פריסת קוד•סכימת תרגום•

19

נניח, לרגע, דקדוק מצומצם

20

פריסת קוד

B1 (While)

S

Bn (While)

S1

nextlist

falselist

B2 (While)

nextlist

truelist

21

תכונותB: truelist, falselist

COND:

quadהיכן התנאי מתחיל

COND_LIST:

truelist, falselist

start_quadהיכן התנאי הראשון

22

סכימת תרגום

COND while M B

{

COND.quad = M.quad;

COND.truelist = B.truelist;

COND.falselist = B.falselist;

}

23

סכימת תרגום

COND_LIST COND{

COND_LIST.start_quad = COND.quad;COND_LIST.truelist = COND.truelistCOND_LIST.falselist = COND.falselist

}

24

סכימת תרגום

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(;

}

25

סכימת תרגום

S loop COND_LIST do M S1 N{

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

S.nextlist = COND_LIST.falselist;}

26

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

27

פריסת קוד

B1 (While)

nextlist

falselist

B2 (Until) truelist

truelist

B3 (While)falselist

falselist

28

בסכימת תרגום

COND until M B

{

COND.quad = M.quad;

COND.truelist = B.falselist;

COND.falselist = B.truelist;

}

29