נכתב ע"י קירה רדינסקי ((kirar@cs תרגום לקוד ביניים נכתב ע"י קירה רדינסקי ((kirar@cs סמסטר אביב, תשס"ט.

Slides:



Advertisements
Similar presentations
Completeness and Expressiveness. תזכורת למערכת ההוכחה של לוגיקה מסדר ראשון : אקסיומות 1. ) ) (( 2. )) ) (( )) ( ) ((( 3. ))) F( F( ( 4. ) v) ( ) v ((
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
1 Formal Specifications for Complex Systems (236368) Tutorial #4 Refinement in Z: data refinement; operations refinement; their combinations.
תרגול 11: Backpatching שלבים בפתרון Backpatch דוגמא : SWITCH שאלה ממבחן 1.
טבלאות סמלים נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח.
ניתוח לקסיקלי וכלי Lex.
מתמטיקה בדידה תרגול 3.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
משטר דינמי המשך – © Dima Elenbogen :55 חידה שכדאי לעבור עליה: 2011/ho/WCFiles/%D7%97%D7%99%D7%93%D7%94%20%D7%A2%D7%9D%20%D7%91%D7%95%D7%A0%D7%95%D7%A1.doc.
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
שאלות חזרה לבחינה. שאלה דיסקים אופטיים מסוג WORM (write-once-read-many) משמשים חברות לצורך איחסון כמויות גדולות של מידע באופן קבוע ומבלי שניתן לשנותו.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
רקורסיות נושאי השיעור מהן רקורסיות פתרון רקורסיות : שיטת ההצבה שיטת איטרציות שיטת המסטר 14 יוני יוני יוני 1514 יוני יוני יוני 1514.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
תרגום לקוד ביניים 1. מבנה סכמתי של קומפיילר עד כה ראינו: בפועל: ניתוח לקסיקלי ניתוח תחבירי ניתוח סמנטי backend ניתוח לקסיקלי ניתוח תחבירי ניתוח סמנטי.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
1 Data Structures, CS, TAU, Splay Tree Splay Tree  מימוש של עץ חיפוש בינארי  מטרה לדאוג ל- Amortized Time  פעולה בודדת יכולה לקחת O(N)  אבל כל רצף.
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
שפות ביניים – Intermediate Languages/Representations Aho, Sethi and Ullman – Chapter 8 Cooper and Torczon – Chapter 5.
עיבוד תמונות ואותות במחשב אלכסנדר ברנגולץ דואר אלקטרוני : שיטות קידוד שיטות קידוד אורך מלת קוד ואנטרופיה אורך מלת קוד ואנטרופיה קידוד.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
תורת הקבוצות חלק ב'. קבוצה בת מניה הגדרה: קבוצה אינסופית X היא ניתנת למניה אם יש התאמה חד-חד ערכית בין X לבין .
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
מבני בקרה מבוא לתכנות למנע " ס - שבוע מספר 3 - מאיר קומר - סמסטר ב ' - תשס " ו הסתעפות “ אם השמאל ואימנה ואם הימין ואשמאילה ”
Backpatching 1. תזכורת מתרגול קודם קוד ביניים - שפת הרביעיות שיטות לייצור קוד ביניים –שימוש בתכונת code –כתיבה ישירה ל-buffer של פקודות שיטות לתרגום מבני.
תהליכים  מהו תהליך ?  מבני הנתונים לניהול תהליכים.  החלפת הקשר.  ניהול תהליכים ע " י מערכת ההפעלה.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
1 Data Structures, CS, TAU, Perfect Hashing בעיה: נתונה קבוצה S של n מפתחות מתחום U השוואה ל- Hash : * טבלה קבועה (Hash רגיל - דינאמי) * רוצים זמן קבוע.
משטר דינמי – © Dima Elenbogen :14. הגדרת cd ו -pd cd - הזמן שעובר בין הרגע שראשון אותות הכניסה יוצא מתחום לוגי עד אשר אות המוצא יוצא מתחום.
עקרון ההכלה וההדחה.
תכנות תרגול 4 שבוע : לולאות for לולאות for for (counter=1 ;counter
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Last time on Clang משתנה: "פתק" המשמש את המחשב לשמירת מידע. לכל משתנה יש שם וטיפוס כללים לשמות משתנים –חייבים להכיל רק אותיות, מספרים ו '_' –חייבים להתחיל.
תרגול 5: ביטויים לוגיים ומשפטי תנאי (חזרה והרחבה)
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
מבוא לשפת C תרגול 4: ביטויים לוגיים ומשפטי תנאי מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב"
Data Structures, CS, TAU, RB-Tree 1 עץ אדום-שחור - עץ חיפוש בינארי - בכל צומת ביט אינפורמציה נוסף - צבע « עץ “ כמעט מאוזן ” « (O(log n במקרה גרוע ביותר.
תוכנה 1 - תרגול שיעור 10 Pointers (2) שולי לב יהודי
1 אופטימיזציה של קוד ASU פרק מה זה אופטימיזציה? שיפור ביצועי התוכנית. בניגוד למה שמשתמע מהשם, בדרך-כלל לא מגיעים לאופטימום.
Safari On-line books. מה זה ספארי ספארי זו ספריה וירטואלית בנושא מחשבים היא כוללת יותר מ כותרים כל הספרים הם בטקסט מלא ניתן לחפש ספר בנושא מסוים.
(C) סיון טל גילוי מידע וזיהוי תבניות תרגול מס. 9 גילוי מידע וזיהוי תבניות תרגול מס. 9 דחיסת נתונים מהו קידוד תכונות של קידודים אי - שוויון קרפט.
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 7 ISP דוגמא נוספת.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
1 ׃1998 Morgan Kaufmann Publishers פקודת ה- jump 4 bits 26 bits 2 bits 00 : כתובת קפיצה במילים : כתובת קפיצה בבתים … …
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
Practice session 3 תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי ) שיטות חישוב : Applicative & Normal Evaluation Partial Evaluation.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
Practice session 3.  תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי )  שיטות חישוב : Applicative & Normal Evaluation.
שיאון שחוריMilOSS-il מוטיבציה  python זה קל ו C זה מהיר. למה לא לשלב?  יש כבר קוד קיים ב C. אנחנו רוצים להשתמש בו, ולבסס מעליו קוד חדש ב python.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
1 חלק XQuery :IV XML Query. 2 ביבליוגרפיה - DTD 3 ביבליוגרפיה – books.xml TCP/IP Illustrated Stevens W. Addison-Wesley Advanced Programming in.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Object Oriented Programming
Object Oriented Programming
Computer Architecture and Assembly Language
Formal Specifications for Complex Systems (236368) Tutorial #1
SQL בסיסי – הגדרה אינדוקטיבית
ממשקים - interfaces איך לאפשר "הורשה מרובה".
תזכורת מתרגולים אחרונים
תכנות מכוון עצמים ושפת JAVA
NG Interpolation: Divided Differences
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Computer Architecture and Assembly Language
Presentation transcript:

נכתב ע"י קירה רדינסקי ((kirar@cs תרגום לקוד ביניים נכתב ע"י קירה רדינסקי ((kirar@cs סמסטר אביב, תשס"ט

מבנה סכמתי של קומפיילר עד כה ראינו: בפועל: Back-end Front-end ניתוח לקסיקלי תחבירי סמנטי backend ניתוח לקסיקלי תחבירי סמנטי backend אופטימיזציה שפת ביניים Back-end Front-end

שפת ביניים מדוע לא לתרגם ישר לשפת היעד? פיתוח מהיר יותר של קומפיילר למערכת חדשה נדרש לכתוב רק Back-end פיתוח אופטימיזציות כלליות שפת ביניים איתה נעבוד בקורס: שפת הרביעיות דומה מאד לשפת אסמבלר סדרה של פקודות מהצורה x := y OP z

שפת ביניים (המשך) נעבוד עם 4 סוגי פקודות בלבד: פעולה אריתמטית: t1 := t2 + t3 קפיצה לא-מותנית: goto label קפיצה מותנית: if t1 relop t2 goto label תווית: label: קיימות פקודות רבות נוספות

דוגמה a = b + c + d t1 := b + c t2 := t1 + d a := t2 מדוע צריך את t2?

טעויות נפוצות דברים שאינם קוד ביניים if … else … if (x > 1 && y > 1) goto … התנאי בקפיצה אינו מורכב x = 1000 goto x ניתן לקפוץ רק לתוויות קבועות

פונקציות לפריסת קוד נצטרך תכונות הבאות: פונקציות עזר: code: הקוד הנוצר place: לביטויים אריתמטיים, המשתנה הזמני שהוקצה לביטוי תכונות נורשות: תכונה לכל נקודת המשך אפשרית פונקציות עזר: newtemp(): יוצרת משתנה זמני חדש newlabel(): יוצרת תווית חדשה

שיטות לייצור קוד לכל משתנה בדקדוק תהיה תכונה code שתאגור את הקוד ש"מבצע מה שצריך" עבורו דוגמה: תרגום ביטויים אריתמטיים נניח שלמשתנה E קיימות התכונות code ו-place (המשתנה הזמני אליו נשמר ערך הביטוי) E  E1 + E2 { E.place = newtemp(); E.code = E1.code || E2.code || E.place || “:=“ || E1.place || “+” || E2.place; } יצירת מקום לתוצאה יצירת קוד t1  E1 t2  E2 t3 := t1 + t2

שיטות לייצור קוד (המשך) נחזיק buffer עם כל הקוד שנוצר עד כה ונדפיס את הקוד ישר לתוכו דוגמה: תרגום ביטויים אריתמטיים ל-E תכונה place (אין צורך בתכונת code) הפונקציה emit מדפיסה פקודה ל-buffer E  E1 + E2 { E.place = newtemp(); emit(E.place || “:=“ || E1.place || “+” || E2.place); } היכן הקוד של E1 ו-E2?

השוואה בין שתי השיטות בשיטה 1 ניתן לקבוע את הסדר של קטעי הקוד ובשיטה 2 - לא שיטה 2 פשוטה ומהירה יותר אין שרשורי קוד

תרגום במבני בקרה הבעיה: כאשר מתרגמים מבנה בקרה, יעדי הקפיצות לא תמיד ידועים דוגמה: if B then S1 else S2 כאשר מתרגמים את B, עדיין לא יודעים את הקוד (והיכן הוא ימוקם) של S1 ו-S2

תרגום פשוט הגדרה (תרגום פשוט): פיתרון לבעיה: לכל קטע קוד (המתאים למשתנה מסויום) נקודת כניסה אחת (בראשיתו) ונקודת יציאה בסופו התוצאה היא שבתום ביצוע קטע קוד, מבוצע קטע הקוד ששורשר אחריו פיתרון לבעיה: קטע הקוד של בדיקת התנאי יחשב את התנאי לתוך משתנה זמני (לקטע קוד זה יציאה אחת בסופו). קטע הקוד שאחריו יבדוק את המשתנה הזמני וימשיך לביצוע S1 או S2 לפי ערכו

תרגום פשוט E → E1 '>' E2 label tmplabel = newlabel(); E.place = newtemp(); E.code = E1.code || E2.code || gen(E.place '= 0') || gen('if' E1.place '<=' E2.place 'goto' tmplabel) || gen(E.place '= 1') || gen(tmplabel ':'); S → if E then S1 else S2 label falseLabel = newlabel(), endLabel = newlabel(); S.code = E.code || gen('if' E.place '== 0' 'goto' falseLabel) || S1.code || gen('goto' endLabel) || gen(falseLabel ':') || S2.code || gen(endLabel ':');

תרגום פשוט - חסרונות לא תמיד אפשר (או נוח) לדאוג ליציאה אחת מכל קטע קוד Break (בלולאה) Switch

שיטת התוויות הנורשות הרעיון: כמה יציאות מקטע הקוד של משתנה כלשהו מהיכן לצאת - חלק מסמנטיקת אותו המשתנה לאן ללכת - חלק מסמנטיקת האב נייצג כל נקודת יציאה בעזרת תכונה נורשת (מסוג תווית) לדוגמה: B.false, B.true פירוש: "היכן להמשיך אם נבחרה נקודת יציאה מסוימת" ברגע שנסיים לתרגם את כל המבנה, נדע לחשב את התכונות אין צורך לחשב את ערכי התנאים הבוליאניים

המשתנה B יגזור ביטוי בולאני. B → E1 '>' E2 B.code = E1.code || E2.code || gen('if' E1.place '>' E2.place 'goto' B.true) || gen('goto' B.false); B → B1 or B2 B1.true = B.true; B1.false = newlabel(); B2.true = B.true; B2.false = B.false; B.code = B1.code || gen(B1.false ':') || B2.code; S → if B then S1 else S2 B.true = newlabel(); B.false = newlabel(); S1.next = S.next S2.next = S.next S.code = B.code || gen(B.true ':') || S1.code || gen('goto' S.next) || gen(B.false ':') || S2.code; המשתנה B יגזור ביטוי בולאני. יש לו 2 יציאות אפשריות: אחת true ואחת false בהתאם לערך הביטוי Or is done in lazy-evaluation לקטע הקוד של המשתנה S צריכה להיות יציאה אחת (לפי תכונת next). אלא ש-S יכול לצאת גם אל הפקודה הבאה

חסרונות השיטה פיתרון: פיתרון לפיתרון: לא מתאימה לניתוח סמנטי בזמן bottom-up לא כל התכונות נוצרות צריך לבנות עץ גזירה, למיין טופולוגית את חישובי התכונות על פי התלויות ולחשב אותן במעבר נוסף פיתרון: להמנע מהורשת תוויות! אבל...משתנה לא יכול לדעת באופן עצמאי לאן לקפוץ פיתרון לפיתרון: במקום שהאבא יגיד לבן: נקודת היציאה שלך exit מופנית לתווית label הבן יגיד לאב: אם היתי יודע לאן exit מופנה היתי רושם ערך זה "כאן, כאן וכאן". אתה לא מספר לי כלום! לכן אני מעביר אליך את האחראיות למלא את החורים שהשארתי! וזה למה בבר-מיצווה אומרים "ברוך שפטרני מעונשו של זה" אבל זה כבר לשיעור הבא- מתרגשים?