מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו 4 דפי נוסחאות. בדקו שכל העמודים ברשותכם. ב. משך המבחן שלוש שעות (180 דקות). ג. אסור כל חומר עזר פרט לדף הנוסחאות המצורף לבחינה. ד. במבחן 5 שאלות. כל השאלות הינן חובה. משקל כל שאלה מופיע בראשיתה. (חלוקת המשקל בין הסעיפים בכל שאלה אינה בהכרח אחידה) ה. ניתן לציין לגבי סעיף או שאלה לא יודע/ת. תשובה זו תזכה ב 20% מהניקוד של הסעיף או השאלה. תשובות שגויות לא יזכו בניקוד. ו. קראו את כל המבחן לפני שאתם מתחילים לענות על השאלות. ז. את התשובות לשאלות יש לרשום במחברת המבחן בלבד. בהצלחה! 1
שאלה 1 (15 Bison נק ) נתונה תוכנית ה Bison הבאה: %{ #include <ctype.h> #include <iostream> using namespace std; int yylex(); void yyerror(const char*); % %token NUM; %left '*' '+' %right '-' '/' %% p : exp '\n' {cout < < $1 < < endl; ; exp : exp '+' exp {$$ = $1 + $3; exp '-' exp {$$ = $1 - $3; exp '*' exp {$$ = $1 * $3; exp '/' exp {$$ = $1 / $3; NUM {$$ = $1; ; %% int yylex(){ char c = getchar(); if(c == '\n')return c; while(isspace(c))c = getchar(); if(isdigit(c)){ yylval = c - '0'; return NUM; return c; void yyerror(const char* e){ cout < < e < < endl; int main(){ return yyparse(); 1 + 2 3 4 2 א. מה יהיה פלט התוכנית על הקלט הבא (הקלט מסתיים בתו n\): ב. שנו את האסוציאטיביות והקדימויות של האסימונים כך שפלט התוכנית יהיה: 1 I 7 II 2
שאלה 2 דיקדוקים (35 נק ) א. לפניכם שלושה מצבים מתוך מכונת המצבים של אוטומט.LR(1) עבור כל אחד מהמצבים קבעו האם יתכן דקדוק LR(1) שבמכונת המצבים שלו קיים מצב כזה. אם התשובה חיובית הביאו דוגמה לדקדוק כזה, אחרת נמקו בצורה משכנעת מדוע לא יתכן כזה דקדוק. הערה: כאשר אתם נותנים דוגמה לדקדוק אין צורך להוכיח שיכות ל LR(1) ואין צורך לבנות מכונת מצבים עבורו. 1. 2. 3. A ab c, d A b c, d A ab c, d A b c, e A ab c, d A a bc, e ב. הוכיחו או הפריכו את הטענות הבאות. 1. קיים דקדוק G LALR כך שמספר המצבים במנתח LR(1) עבור G גדול ממספר המצבים במנתח LALR עבור G. 2. קיים דקדוק LR(0) G כך שמספר המצבים במנתח LALR עבור G גדול ממספר המצבים במנתח LR(0) עבור G. 3. אם לשני מצבים במנתח LR(1) יש את אותו הגרעין אזי המצבים זהים. 4. אם שני מצבים במנתח LR(1) זהים אז יש להם את אותו הגרעין. 3
שאלה 3 שפת ביניים ו (25 Backpatching נק ) S do first E L end L L S S בשאלה זאת נדון במבנה בקרה חדש שהתחביר שלו כלהלן: משמעות המבנה: אם הערך של E שלילי או גדול ממספר הפקודות ב L (מספר הפקודות ב L הוא מספר ה Statements ש L גוזר) אין לבצע דבר. אחרת יש לבצע את k הפקודות הראשונות (כאשר k הוא הערך של E) א. הציעו פריסת קוד, מתאימה לשיטת backpatching עבור מבנה הבקרה הנ ל. על הקוד הנוצר להיות יעיל ככל האפשר. ב. כתבו סכימת תרגום בשיטת backpatching המייצרת את פריסת הקוד שהצעתם בסעיף הקודם. על הסכימה להיות יעילה ככל האפשר, הן מבחינת זמן הריצה שלה והן מבחינת המקום בזכרון שנדרש עבור התכונות הסמנטיות. שימו לב: אין להשתמש בכללים סמנטיים באמצע כלל גזירה. אין להשתמש במשתנים גלובליים בזמן קומפילציה. המשתנים S ו E הם המשתנים הסטנדרטיים המופיעים בדף הנוסחאות, ויש להם כללי גזירה בנוסף לכלל המופיע בשאלה. למשתנה L אין כללי גזירה פרט לכללים המוצגים בשאלה. 4
שאלה 4 סביבת זמן ריצה (10 נק ) נתונה התוכנית הבאה בשפת פסקל: program p; var x:integer; procedure a var y:integer; function b var z:integer; procedure c begin... c... end procedure d begin... d... end begin... b... end begin... a... end begin... p... end p a b c d c d א. נתונה סדרת קריאות אפשריות בפסקל שרטטו באופן סכמתי את המחסנית לאחר הקריאה האחרונה ל d, כאשר בכל רשומת הפעלה פרטו רק את המצביעים לרשומות ההפעלה האחרות. בסעיפים ב ו ג נניח שעומק הקינון הסטטי המקסימלי הינו d, מספר הפרוצדורות/פונקציות השונות מאותה רמת קינון הוא n, עומק המחסנית המקסימלי הינו e וכל פעולת חיפוש אחרת מתבצעת ב (1)O זמן. ב. בהנחה שעושים שימוש ב display 1. מהי סבוכיות זמן חיפוש מקום המשתנים בזמן קומפלציה? 2. מהי סבוכיות זמן מציאת המשתנים בזמן ריצה? ג. בהנחה שלא נעשה שימוש ב display 1. מהי סבוכיות זמן חיפוש מקום המשתנים בזמן קומפלציה? 2. מהי סבוכיות זמן מציאת המשתנים בזמן ריצה? 5
שאלה 5 15) DF A נק ) נאמר שדרכיהם של משתנים x ו y נפרדות בנקודה p בתוכנית אם לא קיים מסלול היוצא מנקודה p שבו נעשה שימוש בערכים של x ו y כמו שהם בנקודה p. כלומר אם בכל מסלול היוצא מ p ובו שימוש ב y לפני הגדרה מחדש של y אין שימוש ב x לפני הגדרה מחדש שלו ולהיפך/ למשל עבור קטע הקוד הבא: 196 : x = 3 197 : y = 5 198 : if z > x goto 200 199 : x = 4 200 : y = 6 בנקודה שבין כתובת 196 לכתובת 197 דרכיהם של x ו y נפרדות ואילו דריכהם של x ו z לא. בהינתן שני משתנים x ו y, הציעו אלגוריתם מבוסס DFA הבודק האם דרכיהם נפרדות ביציאה ובכניסה לכל בלוק ב.CFG 6