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

Slides:



Advertisements
Similar presentations
ממיבחניםC שאלות ++.
Advertisements

Backpatching: The syntax directed definition we discussed before can be implemented in two or more passes (we have both synthesized attributes and inheritent.
Lecture 08a – Backpatching & Recap Eran Yahav 1 Reference: Dragon 6.2,6.3,6.4,6.6.
Generation of Intermediate Code Compiler Design Lecture (03/30//98) Computer Science Rensselaer Polytechnic.
Compiler Construction Sohail Aslam Lecture Boolean Expressions E → E 1 and M E 2 {backpatch(E 1.truelist, M.quad); E.truelist = E 2.truelist; E.falselist.
Backpatching 1. מה בתרגול ? שלבים בפתרון Backpatch דוגמא : SWITCH שאלה ממבחן 2.
Compiler Designs and Constructions
Three Address Code Generation Backpatching-I Prepared By: Siddharth Tiwary 04CS3010.
טבלאות סמלים נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח.
צורה נורמלית של גרייבך הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 11.
מבוא כללי למדעי המחשב תרגול 1. כתיבת התוכנה כתיבת התוכנית עצמה נעשית ע " י כתיבת קובץ טקסט רגיל אשר תוכנו מקיים את כללי שפת C כתיבת התוכנית עצמה נעשית.
נכתב ע"י קירה רדינסקי תרגום לקוד ביניים נכתב ע"י קירה רדינסקי סמסטר אביב, תשס"ט.
Backpatching דוגמא : switch. דוגמא switch : הדקדוק.
Theory of Compilation Erez Petrank Lecture 7: Intermediate Representation Part 2: Backpatching 1.
Theory of Compilation Erez Petrank Lecture 6: Intermediate Representation 1.
מתמטיקה בדידה תרגול 3.
Lecture 15 Control Flow Topics Review Positional Encoding of Booleans Short Circuit Evaluation Control Flow Statements Readings: 8.4, 8.6 March 13, 2006.
מבוא כללי למדעי המחשב שיעור 4 מרצה: שי גוטנר. חזרה - משתנים מסוג char משתנים אלו מיצגים תווים. משתנים אלו מיצגים תווים. לכל תו יש קוד מספרי שמייצג אותו.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 2 שבוע : שבוע שעבר כתבו תוכנית המגדירה שלושה משתנים מאתחלת אותם ל 1 2 ו 3 ומדפיסה את המכפלה שלהם את ההפרש שלהם ואת הסכום שלהם.
תרגום לקוד ביניים 1. מבנה סכמתי של קומפיילר עד כה ראינו: בפועל: ניתוח לקסיקלי ניתוח תחבירי ניתוח סמנטי backend ניתוח לקסיקלי ניתוח תחבירי ניתוח סמנטי.
שפות ביניים – Intermediate Languages/Representations Aho, Sethi and Ullman – Chapter 8 Cooper and Torczon – Chapter 5.
מבוא למדעי המחשב תרגול 4 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב © אריק פרידמן 1 מצביעים כמערכים דוגמה.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
צורות נורמליות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 10.
Backpatching 1. תזכורת מתרגול קודם קוד ביניים - שפת הרביעיות שיטות לייצור קוד ביניים –שימוש בתכונת code –כתיבה ישירה ל-buffer של פקודות שיטות לתרגום מבני.
תכנות תרגול 2 שבוע : צור קשר מתרגל – שי גוטנר, ביה " ס למדעי המחשב. מתרגל – שי גוטנר, ביה " ס למדעי המחשב. דואר אלקטרוני : דואר.
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
מבוא כללי למדעי המחשב שיעור רביעי: לולאות
מבני בקרה לולאות. פקודת CASE Module Module1 Sub Main() Dim input As Char input = Console.ReadLine() Select Case (input) Case "A" Console.WriteLine("A.
הקדמה. תנועת גל בחומר. קריסת הגל. משוואת ברגר (Burgers’ equation) ופתרונה. גלי הלם. סיכום.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
תכנות תרגול 4 שבוע : לולאות for לולאות for for (counter=1 ;counter
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
מודל הלמידה מדוגמאות Learning from Examples קלט: אוסף של דוגמאות פלט: קונסיסטנטי עם פונקציה f ב- C ז"א קונסיסטנטי עם S ז"א.
מתמטיקה בדידה תרגול 2.
Test Yourself #2 Test Yourself #3 Initial code: a := x ** 2 b := 3 c := x d := c * c e := b * 2 f := a + d g := e * f.
בנייה ופישוט דקדוקים הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 9.
תכנות תרגול 1 שבוע : צור קשר מתרגל – ליעם רודיטי, ביה " ס למדעי המחשב. מתרגל – ליעם רודיטי, ביה " ס למדעי המחשב. דואר אלקטרוני :
1 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים עוברים לג ' אווה.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
Topic #7: Intermediate Code EE 456 – Compiling Techniques Prof. Carl Sable Fall 2003.
1 Intermediate Code Generation Abstraction at the source level identifiers, operators, expressions, statements, conditionals, iteration, functions (user.
Boolean expressions 1 productionsemantic action E  E1 or E2E1.trueLabel = E.trueLabel; E1.falseLabel = freshLabel(); E2.trueLabel = E.trueLabel; E2.falseLabel.
לולאות- Loops שני סוגי לולאות:
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
Chap. 4, Intermediate Code Generation
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
Theory of Compilation Erez Petrank Lecture 6: Intermediate Representation and Attribute Grammars 1.
1 February 28, February 28, 2016February 28, 2016February 28, 2016 Azusa, CA Sheldon X. Liang Ph. D. Computer Science at Azusa Pacific University.
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
IF-ELSE כתוב תוכנית הקולטת שלושה מספרים ומדפיסה אותם בסדר עולה(ממיינת אותם)  קלט:7,2,4 ,פלט:2,4,7 .
Subject Name:COMPILER DESIGN Subject Code:10CS63
Intermediate Code Generation Part II
מבוא ל Maven אליהו חלסצ'י תכנות מתקדם תרגול מספר 3
Intermediate Code Generation Part II
מבוא כללי למדעי המחשב תרגול 4
טבלאות מדומות (Views).
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Intermediate Code Generation Part II
Three Address Code Generation – Backpatching
It’s Time for a Break!!!.
Intermediate Code Generation Part II
Boolean Expressions Lecture 25 Fri, Apr 22, 2005.
Compiler Construction
Intermediate Code Generation Part II
Presentation transcript:

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

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

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

תרגום פקודת switch Case Case List 4 S → switch ( E ) { CL } CL → C CL | C C → case num : S ; break ;

שלב I: פריסת קוד ציור סכימטי של הקוד שיווצר : 1. מיקום יחסי של הקוד הנפלט ( קבוע ). 2. פקודות goto שנרצה לתפור. 3. הקוד המאחה. 5 S → switch ( E ) { CL } CL → C CL | C C → case num : S ; break ;

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

7 S: nextlist. E: place. C: value, quad, nextlist. CL:value_list (stack), quad_list (stack), nextlist. תכונות סמנטיות למשתני הדקדוק הנחה : כל נקודות היציאה מהקוד המתאים למשתנה הן בפקודת goto ___. nextlist היא רשימה המכילה את כלל הכתובות של נקודות היציאה הללו.

מרקרים שימושיים 8 M → ε { M.quad = nextquad(); } N → ε { N.nextlist = makelist (nextquad()); emit (“goto ___”); }

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 | C C → case num : M S ; break ; פריסת הקוד :

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 | C C → case num : M S ; break ;

11 CL → C CL 1 { CL.quad_list = CL 1.quad_list; CL.quad_list.push(C.quad); CL.value_list = CL 1.value_list; CL.value_list.push(C.value); CL.nextlist=merge(CL 1.nextlist,C.nextlist); } S → switch ( E N ) { CL } CL → C CL | C C → case num : M S ; break ;

S → switch ( E N ) { CL } CL → C CL | C C → 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 ___”); }

שאלה ממבחן 13

Lisp style loops 14 1) S  loop COND_LIST do S 1 2) COND_LIST  COND_LIST 1 COND 3) COND_LIST  COND 4) COND  while B 5) COND  until B הלולאה מכילה מספר משתנה של תנאים, וממשיכה להתבצע כל עוד כולם מתקיימים. הלולאה תתבצע כל עוד התנאי הבוליאני B מתקיים הלולאה תתבצע עד אשר התנאי הבוליאני B יתקיים

דוגמא : 15

פתרון - נניח, לרגע, דקדוק מצומצם 16 1) S  loop COND_LIST do S 1 2) COND_LIST  COND_LIST 1 COND 3) COND_LIST  COND 4)COND  while B הלולאה תתבצע כל עוד התנאי הבוליאני B מתקיים

פריסת קוד 17 B1 (While) Bn (While) S1 nextlist falselist B2 (While) S nextlist truelist

תכונות COND_LIST: truelist, falselist, start_quad ( היכן התנאי הראשון ) 18 S: nextlist B: truelist, falselist COND: truelist, falselist, quad ( היכן התנאי מתחיל )

סכימת תרגום COND  while M B { COND.quad = M.quad; COND.truelist = B.truelist; COND.falselist = B.falselist; } 19

סכימת תרגום COND_LIST  COND { COND_LIST.start_quad = COND.quad; COND_LIST.truelist = COND.truelist; COND_LIST.falselist = COND.falselist; } 20

COND_LIST  COND_LIST 1 COND { COND_LIST.start_quad = COND_LIST 1.start_quad; backpatch (COND_LIST 1.truelist, COND.quad); COND_LIST.truelist = COND.truelist; COND_LIST.falselist = merge (COND_LIST 1.falselist, COND.falselist); } 21

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

נניח כעת דקדוק לא מצומצם 23 1) S  loop COND_LIST do S 1 2) COND_LIST  COND_LIST 1 COND 3) COND_LIST  COND 4) COND  while B 5) COND  until B הלולאה תתבצע כל עוד התנאי הבוליאני B מתקיים הלולאה תתבצע עד אשר התנאי הבוליאני B יתקיים

פריסת קוד 24 B1 (While) nextlist B2 (Until) truelist B3 (While) falselist סכימת תרגום COND  until M B { COND.quad = M.quad; COND.truelist = B.falselist; COND.falselist = B.truelist; }