פקולטה להנדסת תוכנה חורף תשע"ח תורת הקומפילציה 61763 מבחן סופי מועד א" 16.02.2018 7שאלות חובה ,יש לפתור את כל השאלות שים לב :את התשובות יש לכתוב אך ורק בטופס הבחינה. שים לב :יש לכתוב בכתב ברור ובאופן תמציתי .תשובות מסורבלות עלולות לגרור הורדת נקודות. 10( .1נקודות) נתבונן בהגדרות הבאות של הערות ב C-ו:C++- ב : C++-הערות מתחילות ב //-ונגמרות בשורה חדשה \n ב : C-הערות מתחילות ב /*-ונגמרות ב*/- נתבונן במימוש הבא של אוטומט שמזהה הערות ב C-ו . C++-נא להוסיף ערכי קלט לקשתות של האוטומט כך שהוא יזהה את הערות ב C-ו C++-נכון. 20( .2נקודות) נתבונן בדקדוק הבא S ,C ,B , A :הם משתני הדקדוק ו , , ,- הם טרמינאלים: S AC$ A AB A B C BC C )1 )2 )3 )4 )5 )6 8( נקודות) מה הקבוצות FIRSTו FOLLOW-של כל משתני הדיקדוק? }First(S) = {, }First(A) = {, }First(B) = { }First(C) = {, }{ = )Follow(S }Follow(A) = {, }Follow(B) = {, }Follow(C) = {, $ 8( נקודות) נא לבנות טבלת ניתוח LL1של הדקדוד: $ error error error error 1 3 error 6 error error error error error error 4 5 1 2 error error 4( נקודות) האם הדקדוק שייך ב?LL(1)- כן /לא נא לנמק את תשובתך .תשובה נכונה ללא נימוק נכון פוסלת את כל הנקודות. אין שני כללי גזירה לתוך משבצת אחת S A B C 15( .3נקודות) נתבונן בדקדוק הבא עם טרמינלים . , ,( , ), a :הדקדוק מתאים, למשל להגדרת רשימות בשפה .LISP )1 )2 )3 )4 )5 )6 ’S → ( S S→a ) → ’S ) S’ → A ’A → S A ’A’ → , S A 7) A’ → ε נא לכתוב פסאודו קוד למנתח תחבירי של הדקדוק הזה על ידי ירידה רקורסיבית . כל פתרון אחר נכון מתקבל. 21( .4נקודות) נתבונן בדקדוק הבא S ,B , A :הם משתני הדקדוק ו z, y ,x-הם טרמינאלים: S AA$ A xB Ay B Az )1 )2 )3 )4 9( נקודןת) נא להשלים את האוטמט הבא לניתוח הדקדוק בשיטת :LR0 2( נקודות) מה המצבים של reduceו shift-של האוטומט? המצבים של shift המצבים של reduce 0, 1, 2, 5, 6 3, 4, 7, 8 ( 10נקודות) נא לסמלץ ניתוח של xyzy$בעזרת האוטומט הנתון: 10( .5נקודות) ב , Pascal-ניתן להגדיר משתנים באופן הבא: var a, b : integer להגדרה ,ניתן בהשתמש בדקדוק הבא: ; decl → var id_list : types types → integer types → real id_list → id_list , id id_list → id כאשר id_list ,type ,declהם משתני הדקדוק ו id , , , ; , : , var-הם טרמינלים .כאשר id_listגוזר שמות משתנים בודדים או רשימות של שמות משתנים מופרדים בפסיקים types .גוזר טיפוס חוקי ב. Pascal- 6( נקודות) נתבונן בהגדרה וחישוב חלקיים של שתי תכונות type :ו- .valueתכונה typeנצמדת ל id_list-ו . id-תכונה valueנצמדת למשתנה הדקדוק .typesנא להשלים את ההגדרה והחישוב של שתי התכונות .אין צורך בנימוק. decl → var id_list : types ; id_list.type = types.value types.value = integer types → integer types.value = real types → real id_list1.type = id_list0.type id.type = id_list0.type id_list0 → id_list1 , id ;id.type = id_list0.type id_list0 → id 2( נקודות) האם תכונה typeהיא תכונה נורשת או נוצרת לפי ההגדרה והחישוב? נא לנמק את תשובתך .תשובה נכונה ללא נימוק נכון פוסלת את כל הנקודות. נורשת /נוצרת 2( נקודות) האם תכונה valueהיא תכונה נורשת או נוצרת לפי ההגדרה והחישוב? נא לנמק את תשובתך .תשובה נכונה ללא נימוק נכון פוסלת את כל הנקודות. נורשת /נוצרת 16( .6נקודות) נתבונן בשפת תכנות שמאפשרת תמיכה לפקודות של חזקה בצורה A=B^Cכאשר Aשווה Bבחזקה .C E → E1^E2 קוד לחישוב הביטוי של חזקה מוגדר באופן הבא: )(‖ t1 = newtemp )(t2 = newtemp E.place = t2 E.code=append(E1.code,E2.code, )'gen('if E2.place < 0 goto E.nexstat+7 )'gen('t1 = E2.place )'gen('t2 = 1 )'gen('if t1 = 0 goto E.nexstat+0 )gen('t2 = t2 * E1.place )'gen('t1 = t1 - 1 )'gen('goto E.nexstat+3 →E gen('trap') gen('E.place = t2') ) E1.nextstat = E.nexstat E2.nextstat = E1.laststat E.laststat = E2.laststat + 1 .? אין צורך במימוקx = a ^ b מה יהיה הקוד עבור ביטוי 00: 01: 02: 03: 04: 05: 06: 07: 08: if E2.place < 0 goto 07 t1 = b t2 = 1 if t1 = 0 goto 08 t2 = t2 * a t1 = t1 - 1 goto 03 trap x = t2 : נקודות) נתבונן בתוכנית הבאה16( .7 int n = 1; // global print_plus_n(int x) { cout << x + n; } increment_n() { n = n + 2; print_plus_n(n); } test() { int n; n = 200; print_plus_n(7); n = 50; increment_n(); cout << n; } נקודות) מה הפלט של התוכנית אם משתמשים בטווחים סטטיים8( תשובה נכונה ללא נימוק נכון.)? נא לנמק את תשובתךStatic Scoping( .פוסלת את כל הנקודות 8 6 50 8( נקודות) מה הפלט של התוכנית אם משתמשים בטווחים דינמיים ( ?)Dynamic Scopingנא לנמק את תשובתך .תשובה נכונה ללא נימוק נכון פוסלת את כל הנקודות. 207 104 52 בהצלחה