1 / 14

Fall 2013-2014 Compiler Principles Extending Sethi-Ullman for a Ternary Operator

Fall 2013-2014 Compiler Principles Extending Sethi-Ullman for a Ternary Operator. Roman Manevich Ben-Gurion University. הנתונים.

Download Presentation

Fall 2013-2014 Compiler Principles Extending Sethi-Ullman for a Ternary Operator

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Fall 2013-2014Compiler PrinciplesExtending Sethi-Ullmanfor a Ternary Operator Roman Manevich Ben-Gurion University

  2. הנתונים היזכרי באלגוריתם של Sethi-Ullman להקצאת אוגרים לביטויים חסרי side-effects הניתנים ע"י עצי ביטוי (AST) בעלי דרגה קטנה או שווה ל-2. האלגוריתם עובד בשני שלבים: בשלב הראשון מתבצע מעבר bottom-up על העץ שבו מחשבים לכל צומת את מספר האוגרים הנדרשת לה, ובשלב השני מקצים אוגרים ע"י מעבר על תתי העצים ה"כבדים" לפני ה"קלים". לשפת התכנות הוסיפו אופרטור חדש לשפה בעל שלושה אופרנדים: x?y:z. המשמעות שלו היא שכאשר x שונה מאפס ערך הביטוי הוא ערכו של y ואחרת הוא ערכו של z. נרצה להרחיב את אלגוריתם הקצאת האוגרים לטפל באופרטור החדש. נניח שנתונה לנו שפת ביניים הכוללת את הפקודות הבאות: השמהmovx,y אשר מעתיקה את x לתוך y חיבורadd x,y מחברת את x מ-y ומאחסנת את התוצאה ב-y (y := y + x) בחירה ע"י הפקודה itex,y,z שמשמעותה זהה לאופרטור שהוגדר למעלה, כאשר התוצאה מאוחסנת ב-z (z:=x?y:z) כמו-כן, קיימים האילוצים הבאים על האופרנדים של כל פקודה בשפת הביניים. לפקודות השמה וחיבור, לפחות אחד מהאופרנדים חיי להיות אוגר. בפקודת ite, כל האופרנדים חייבים להיות אוגרים.

  3. סעיף א' • לכל אחד מהביטויים הבאים מצאי הקצאת אוגרים אופטימאלית וסמני את מספר האוגרים הדרוש בכל צומת ואת האוגר שבו מאוחסנת תוצאת הביטוי.

  4. סעיף א' – חלק 1 (a?b:c) ? (d?e:f) : (g?h:i) ? ? ? ? a b c d e f g h i

  5. סעיף א' – חלק 1 - תשובה 5 R1 (a?b:c) ? (d?e:f) : (g?h:i) ? R1 R2 R3 3 3 3 ? ? ? R1 R2 R3 R2 R3 R4 R3 R4 R5 a b c d e f g h i

  6. סעיף א' – חלק 2 (a?b:c) ? (d?e:f) : g ? ? ? g a b c d e f

  7. סעיף א' – חלק 2 - תשובה 4 R1 (a?b:c) ? (d?e:f) : g ? R1 R2 R3 3 3 ? ? g R1 R2 R3 R2 R3 R4 a b c d e f

  8. סעיף א' – חלק 3 ? (a?b:c) ? ((d+e)+(f+g)) : h ? + h a b c + + d e f g

  9. סעיף א' – חלק 3 - תשובה 3 R1 ? (a?b:c) ? ((d+e)+(f+g)) : h R2 3 2 R3 R1 ? + h R1 R2 R3 a b c R2 1 R3 1 + + R2 R3 d e f g

  10. סעיף א' – הסבר כללי לתשובה • ההקצאות מתקבלות ע"י מספר קטן של ניסויים למציאת תת-העצים הכבדים. דואגים להקצות לכל אופרנד המשתתף בפעולת ite אוגר (לפי האילוץ שבשאלה), ולפעולות חיבור מעל משתנים מקצים לאחד מהמשתנים אוגר (ומשתמשים שהפעולה מרשה אופרנד יחיד שאינו אוגר).

  11. סעיף 2 • נניח ביטוי A?B:C כאשר A ו-B ו-C תתי-ביטויים הדורשים מספר אוגרים כמצוין במקרים הבאים. מהו מספר האוגרים הנדרש לכל הביטוי? (רמז, היעזר במה שלמדת מהסעיף הקודם כדי להכליל.) • |A|=k, |B|=k, |C|=k • |A|=k, |B|=k, |C|<|B| • |A|=k, |B|<|A|, |C|<|B|

  12. סעיף 2 • נניח ביטוי A?B:C כאשר A ו-B ו-C תתי-ביטויים הדורשים מספר אוגרים כמצוין במקרים הבאים. מהו מספר האוגרים הנדרש לכל הביטוי? (רמז, היעזר במה שלמדת מהסעיף הקודם כדי להכליל.) • |A|=k, |B|=k, |C|=kk+2 • |A|=k, |B|=k, |C|<|B|k+1 • |A|=k, |B|<|A|, |C|<|B|k

  13. סעיף 3 • מצאי את החוק הכללי (המכסה את כל המקרים האפשריים) להקצאת אוגרים אופטימאלית.

  14. סעיף 3 - תשובה מסדרים את הענפים מהגדול לקטן, לפי המשקלות שלהם: a>b>c. עכשיו מחשבים max(a,b+1,c+2). הרעיון הוא כדלהלן: • הענף הכבד ביותר דורש a אוגרים לפי ההגדרה, למשל R1,…,Ra ומאחסן את התוצאה באוגר מסוים – נניח R1. • הענף השני דורש b אוגרים, ויכול להשתמש לשם קח בכל אוגר מלבד R1, מכיוון שהוא מכיל את תוצאת החישוב של הענף הראשון שעדיין דרושה לפעולת ה-ite. נניח שהענף משתמש באוגרים R2,…,Rb, ומאחסן את התוצאה ב-R2. • הענף השלישי דורש c אוגרים, ויכול להשתמש לשם קח בכל אוגרים מלבד R1 ו-R2, מכיוון שהם מכילים את תוצאות החישוב של שני הענפים הכבדים. נניח שהענף משתמש באוגרים R3,…,Rc, ומאחסן את התוצאה ב-R3. • הפעולה ite משתמשת ב-R1,R2,R3 ומאחסנת את התוצאה ב-R1, דבר שאינו דורש אוגרים נוספים.כעת ניתן לראות שהאינדקס המקסימאלי שהשתמשנו בו לצורך הפעולה, אשר שווה למספר האוגרים הכולל, הינו max(a,b+1,c+2). • ניסיון להקצות אוגרים לענפים בסדר שונה (למשל, קודם ל-b ואח"כ ל-a ואז ל-c) נותן מספר אוגרים שווה או גדול יותר.

More Related