תרגום לקוד ביניים 1. מבנה סכמתי של קומפיילר עד כה ראינו: בפועל: ניתוח לקסיקלי ניתוח תחבירי ניתוח סמנטי backend ניתוח לקסיקלי ניתוח תחבירי ניתוח סמנטי.

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.
©Silberschatz, Korth and Sudarshan4.1Database System Concepts סכימה לדוגמא.
תרגול 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 חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
חורף - תשס " ג 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 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.
מרצה: פרופסור דורון פלד
עיבוד תמונות ואותות במחשב אלכסנדר ברנגולץ דואר אלקטרוני : שיטות קידוד שיטות קידוד אורך מלת קוד ואנטרופיה אורך מלת קוד ואנטרופיה קידוד.
1 חלק XQuery :IV XML Query. 2 ביבליוגרפיה - DTD 3 ביבליוגרפיה – books.xml TCP/IP Illustrated Stevens W. Addison-Wesley Advanced Programming in.
תכנות תרגול 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 } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
נוצר ע " י ד " ר ארקדי שטיינבוק Visual Basic for Application VBA כדוגמה VBA ב - WORD.
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
Data Structures, CS, TAU, Perfect Hashing 1 Perfect Hashing בעיה : נתונה קבוצה S של n מפתחות מתחום U השוואה ל - Hash : * טבלה קבועה (Hash רגיל - דינאמי.
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
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Last time on Clang משתנה: "פתק" המשמש את המחשב לשמירת מידע. לכל משתנה יש שם וטיפוס כללים לשמות משתנים –חייבים להכיל רק אותיות, מספרים ו '_' –חייבים להתחיל.
תרגול 5: ביטויים לוגיים ומשפטי תנאי (חזרה והרחבה)
1 חישוב של אופרטורים רלציוניים Evaluation of Relational Operators.
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
מבוא לשפת C תרגול 4: ביטויים לוגיים ומשפטי תנאי מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב"
Data Structures, CS, TAU, RB-Tree 1 עץ אדום-שחור - עץ חיפוש בינארי - בכל צומת ביט אינפורמציה נוסף - צבע « עץ “ כמעט מאוזן ” « (O(log n במקרה גרוע ביותר.
תוכנה 1 - תרגול שיעור 10 Pointers (2) שולי לב יהודי
Safari On-line books. מה זה ספארי ספארי זו ספריה וירטואלית בנושא מחשבים היא כוללת יותר מ כותרים כל הספרים הם בטקסט מלא ניתן לחפש ספר בנושא מסוים.
(C) סיון טל גילוי מידע וזיהוי תבניות תרגול מס. 9 גילוי מידע וזיהוי תבניות תרגול מס. 9 דחיסת נתונים מהו קידוד תכונות של קידודים אי - שוויון קרפט.
1 ׃1998 Morgan Kaufmann Publishers פקודת ה- jump 4 bits 26 bits 2 bits 00 : כתובת קפיצה במילים : כתובת קפיצה בבתים … …
Structure. מה לומדים היום ? דרך לבנות מבנה נתונים בסיסי – Structure מייצר " טיפוס " חדש מתאים כאשר רוצים לאגד כמה משתנים יחד דוגמאות : עובד : שם, טלפון,
פיתוח מערכות מידע 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. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
Three Address Code Generation of Control Statements continued..
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Computer Architecture and Assembly Language
Formal Specifications for Complex Systems (236368) Tutorial #1
Subject Name:COMPILER DESIGN Subject Code:10CS63
SQL בסיסי – הגדרה אינדוקטיבית
ממשקים - interfaces איך לאפשר "הורשה מרובה".
תזכורת מתרגולים אחרונים
תכנות מכוון עצמים ושפת JAVA
Shell Scripts בסביבת UNIX
NG Interpolation: Divided Differences
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Computer Architecture and Assembly Language
Presentation transcript:

תרגום לקוד ביניים 1

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

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

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

דוגמה a = b + c + d t 1 := b + c t 2 := t 1 + d a := t 2 מדוע צריך את t 2 ? 5

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

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

שיטות לייצור קוד 1.לכל משתנה בדקדוק תהיה תכונה בשם code שתאגור את הקוד ש"מבצע מה שצריך" עבורו דוגמה: תרגום ביטויים אריתמטיים –נניח שלמשתנה E קיימות התכונות code ו-place (המשתנה הזמני אליו נשמר ערך הביטוי) E  E 1 + E 2 { E.place = newtemp(); E.code = E 1.code || E 2.code || E.place || “:=“ || E 1.place || “+” || E 2.place; } יצירת מקום לתוצאה יצירת קוד t 1  E 1 t 2  E 2 t 3 := t 1 + t 2 8

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

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

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

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

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 ':'); תרגום פשוט 13

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

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

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; המשתנה B יגזור ביטוי בוליאני. יש לו 2 יציאות אפשריות: אחת true ואחת false בהתאם לערך הביטוי 16

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; לקטע הקוד של המשתנה S צריכה להיות יציאה אחת (לפי תכונת next). אלא ש-S יכול לצאת גם אל הפקודה הבאה 17

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