Backpatching 1
מה בתרגול ? שלבים בפתרון Backpatch דוגמא : SWITCH שאלה ממבחן 2
שלבים בפתרון פריסת קוד : ציור סכמאטי של הקוד שיווצר סכימת תרגום : כתיבת הכללים הסמנטיים 3
Switch: example Switch (x) { case 5: … break; case 7: … break; … case 12: …break; } 4
Translating Switch Case Case 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.truelist COND_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 B3 (While) falselist 28
בסכימת תרגום COND until M B { COND.quad = M.quad; COND.truelist = B.falselist; COND.falselist = B.truelist; } 29