מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. בדקו שכל העמודים ברשותכם. ב. משך המבחן שלוש שעות (180 דקות). ג. אסור כל חומר עזר פרט לדף הנוסחאות המצורף לבחינה. ד. במבחן 5 שאלות. כל השאלות הינן חובה. משקל כל שאלה מופיע בראשיתה. (חלוקת המשקל בין הסעיפים בכל שאלה אינה בהכרח אחידה) ה. ניתן לציין לגבי סעיף או שאלה "לא יודע/ת". תשובה זו תזכה ב 20% מהניקוד של הסעיף או השאלה. תשובות שגויות לא יזכו בניקוד. ו. קראו את כל המבחן לפני שאתם מתחילים לענות על השאלות. ז. את התשובות לשאלות יש לרשום במחברת המבחן בלבד. בהצלחה! 1
שאלה 1 Lex ו (15 Bison נק ) נתון קובץ ה Bison הבא: %{ #include <iostream> using namespace std; extern int yylex(); void yyerror(const char* e){} %} %token IF ELSE NOP B s: IF B s { cout << 1;} IF B s ELSE s { cout << 2;} NOP int main(){ return yyparse(); } 2
וקובץ ה Lex המתאים: %{ #include "main.tab.hpp" %} %option noyywrap if return IF; else return ELSE; nop return NOP; true false return B; [ \t\n] ; א. תנו דוגמה לקלט (קצר ככל האפשר) דו משמעי, כלומר תנו דוגמה לקלט שנגזר על ידי הדקדוק הנתון ביותר מדרך אחת, ציירו את עצי הגזירה האפשריים. ב. הגדירו קדימויות לאסימונים כך שעבור הקלט שנתתם בסעיף הקודם פלט המנתח יהיה 21. ג. האם אפשר להגדיר קדיומויות לאסימונים באופן כזה שפלט המנתח עבור הקלט שנתתם יהיה? 12 אם כן עשו זאת אחרת הסבירו מדוע אי אפשר. 3
שאלה 2 20) Recursive Descent נק ) בשאלה זאת נדון במנתח.RRD מנתח RRD זהה למנתח Recursive Descent שנלמד בכיתה למעט השינוי הבא: המנתח קורא את הקלט מימין לשמאל (ומייצר גזירה ימנית ביותר). א. הגדירו פונקציית Select מתאימה (הגדירו פונקציות עזר במקרה הצורך). יש לתת הגדרה פורמלית. ב. הוכיחו \ הפריכו את הטענה הבאה: 1. אם דקדוק שייך למחלקה RRD אזי הוא גם שייך למחלקה.RD 4
שאלה 3 שפת ביניים ו (25 Backpatching נק ) S do stmts E 1 to E 2 L end L L S S בשאלה זאת נדון במבנה בקרה חדש שהתחביר שלו כלהלן: משמעות המבנה: במקרים הבאים אין לבצע דבר: הערך של E 1 שלילי הערך של E 1 גדול מהערך של E 2 הערך של E 2 גדול ממספר הפקודות ב L אחרת יש לבצע את פקודות n עד m כאשר n הוא הערך של E 1 ו m הוא הערך של E 2 א. הציעו פריסת קוד, מתאימה לשיטת backpatching עבור מבנה הבקרה הנ"ל. על הקוד הנוצר להיות יעיל ככל האפשר. ב. כתבו סכימת תרגום בשיטת backpatching המייצרת את פריסת הקוד שהצעתם בסעיף הקודם. על הסכימה להיות יעילה ככל האפשר, הן מבחינת זמן הריצה שלה והן מבחינת המקום בזכרון שנדרש עבור התכונות הסמנטיות. שימו לב: אין להשתמש בכללים סמנטיים באמצע כלל גזירה. אין להשתמש במשתנים גלובליים בזמן קומפילציה. המשתנים S ו E הם המשתנים הסטנדרטיים המופיעים בדף הנוסחאות, ויש להם כללי גזירה בנוסף לכלל המופיע בשאלה. למשתנה L אין כללי גזירה פרט לכללים המוצגים בשאלה. 5
שאלה 4 דקדוקים (25 נק ) יהי (S Gדקדוק =,V),T,P SLR(1) שבריצת מנתח ה SLR(1) שלו התקבל תוכן המחסנית הבא: [0],[x,a],[y,b],[z,S],[w,b] כאשר x,y,z,w הם מספרי מצבים באוטומט ו,a b T הוכיחו \ הפריכו את הטענות הבאות:.1 יכול להיות ש LR(0) G S a להכיל כלל Gיכול.2 SLR(1) Gהוא = (V {X}, T, P {S ax, X bsb}, S).3 S b להכיל כלל Gיכול.4 5. אם {S} V = אז טבלת הפעולות עבור האוטומט הפרפיקסי למנתח LR(0) עבור G אינה מכילה קונפליקט S/R 6. אם {S} V = אז טבלת הפעולות עבור האוטומט הפרפיקסי למנתח LR(0) עבור G אינה מכילה קונפליקט R/R 6
שאלה 5 15) DF A נק ) נאמר ששני משתנים X ו Y הם צמודים בנקודה P אם בכל מסלול היוצא מ P מתקיים: כל פקודה המשתמשת בערכו של X ב P משתמשת גם בערכו של Y ב P. למשל, עבור קטע הקוד הבא: x = 5 y = 3 p1: w = x p2: z = x + y w = x - y המשתנים X ו Y לא צמודים בנקודה p1 אבל צמודים בנקודה p2. הצג אלגוריתם DFA המוצא את זוגות המשתנים הצמודים בכניסה וביציאה של כל בלוק בסיסי. 7