שאלת מבחן בשפות תכנות - האוניברסיטה הפתוחה 2023 - מפרשים
שאלה זו עוסקת בשדרוג של שפת "יורמוז" (שפת IMPLICIT-REFS המתוארת בספר הלימוד בעמודים 113–120) כך שתאפשר עבודה עם משתנים מסוג
להזכירכם, בשפה זו, משתנים נוצרים ומתווספים לסביבה בביטויי
נרצה לאפשר למשתמש לסמן במקרים כאלה את המשתנה שמדובר עליו שהוא
ביטויים חדשים:
ייצוג פנימי:
ייצוג פנימי:
סמנטיקה:
- אם
- אם
- בביטויי
- בביטויי
משימה: ממשו את השינויים הדרושים בשפת "יורמוז" בתוך שפת IMPLICIT-REFS.
הנחיות לפתרון:
1. הקפידו על כתב ברור, ועל קוד מבני ומסודר.
2. הקפידו על פתיחת וסגירת סוגריים במקומות הנכונים.
3. הפתרון אמור לשמור על הגדרות השפה המקוריות (כגון אופן ניהול הסביבה וסוגי הערכים בה, אופן ניהול הסביבה וכדומה).
4. על מנת לפשט קוד ארוך, כדאי ורצוי להיעזר בכתיבת פרוצדורות עזר (מחוץ ל-
5. בפתרונכם, הקפידו על אבחנה ושימוש נכון בין ביטויי (expression) לבין תוצאת חישוב ביטויי (expval) לבין identifier.
6. ניקוד יורד על אי ניתוח ומימוש נכון של הדקדוק הנתון בשאלה.
ייתכנו מספר דרכי פתרון שונים — הסבירו בנוסף בקצרה את הדרך בה בחרתם.
יש לשים לב ולבדוק מקרים של שימוש לא תקין בתחביר. ולהדפיס הודעת שגיאה מתאימה.
const, כלומר לאחר קביעת ערכם, הם לא ניתנים לשינוי.להזכירכם, בשפה זו, משתנים נוצרים ומתווספים לסביבה בביטויי
let ומגדירים במסגרתו מתחדש בתוך הפרוצדורה, שבו הפעלת הפרוצדורה בתהליך ההפעלה מתווסף פרמטר הפרוצדורה לסביבה עמה מחשבים את גוף הפרוצדורה, ובה הוא מקבל את ערכו של הארגומנט הנשלח בביטויי ההפעלה.נרצה לאפשר למשתמש לסמן במקרים כאלה את המשתנה שמדובר עליו שהוא
const, כלומר, רק אם המתכנת שהשתמש במתכונת המוגדרת בשפה יהיה כ-const אז לא ניתן יהיה לשנות את ערכו. אך אם לא היה שימוש באופציה של const אזי המשתנה ניתן לשינוי יותר.ביטויים חדשים:
Expression ::= let option Identifier = Expression
in Expression
ייצוג פנימי:
let-exp (opt id exp1 body)Expression ::= ( Expression option Expression )
ייצוג פנימי:
call-exp (rator opt rand)option ::= ε | const
סמנטיקה:
- אם
option היא הריקה, let-exp ו-call-exp מתנהגים כרגיל.- אם
option היא const:- בביטויי
let-exp: לא ניתן יהיה לשנות את ערכו של id במסגרת ה-body של ה-let; אם יהיה ניסיון כזה יש להדפיס שגיאה מתאימה.- בביטויי
call-exp: לפני הארגומנט הנשלח (rand) ניתן לציין את המילה const או לא לציין דבר; אם כן, לא ניתן יהיה לשנות את ערכו של פרמטר הפרוצדורה המופעלת במסגרת ביצוע גוף הפרוצדורה, וגם אם יהיה ניסיון שינוי שם יש להדפיס שגיאה מתאימה.משימה: ממשו את השינויים הדרושים בשפת "יורמוז" בתוך שפת IMPLICIT-REFS.
הנחיות לפתרון:
1. הקפידו על כתב ברור, ועל קוד מבני ומסודר.
2. הקפידו על פתיחת וסגירת סוגריים במקומות הנכונים.
3. הפתרון אמור לשמור על הגדרות השפה המקוריות (כגון אופן ניהול הסביבה וסוגי הערכים בה, אופן ניהול הסביבה וכדומה).
4. על מנת לפשט קוד ארוך, כדאי ורצוי להיעזר בכתיבת פרוצדורות עזר (מחוץ ל-
value-of או כאלה המוטמעות בתוכו).5. בפתרונכם, הקפידו על אבחנה ושימוש נכון בין ביטויי (expression) לבין תוצאת חישוב ביטויי (expval) לבין identifier.
6. ניקוד יורד על אי ניתוח ומימוש נכון של הדקדוק הנתון בשאלה.
ייתכנו מספר דרכי פתרון שונים — הסבירו בנוסף בקצרה את הדרך בה בחרתם.
יש לשים לב ולבדוק מקרים של שימוש לא תקין בתחביר. ולהדפיס הודעת שגיאה מתאימה.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחה2023סמסטר ב
★★★★★
מפרשיםמצבמודל הסביבהSchemeתכנות פונקציונלי
הוסיפו לכל תא בחנות (store) דגל בוליאני המציין האם הוא
const. בעת ניסיון ביצוע assign-exp, בדקו את הדגל ואם true הדפיסו שגיאה. בביטויי let-exp עם const, יצרו את התא עם הדגל מסומן; בביטויי call-exp עם const, העבירו את הדגל ליצירת התא של הפרמטר.גישה: נוסיף לכל תא בחנות (store location) שדה נוסף המציין האם הוא
שינויים בחנות:
`value-of` עבור `let-exp` המעודכן:
`value-of` עבור `call-exp` המעודכן:
`apply-procedure` המעודכנת:
הסבר: בכל יצירת משתנה (דרך
const. נשנה את מבנה החנות כך שכל תא יכיל זוג (value, is-const).שינויים בחנות:
`value-of` עבור `let-exp` המעודכן:
`value-of` עבור `call-exp` המעודכן:
`apply-procedure` המעודכנת:
הסבר: בכל יצירת משתנה (דרך
let או קריאה לפרוצדורה), אנו יוצרים תא חנות חדש ומסמנים אותו כ-const אם ה-option היה const. בכל ניסיון לשנות ערך (assign-exp), בודקים את הדגל ואם true מדפיסים שגיאה. כך משתנים רגילים נותרים ניתנים לשינוי, ומשתנים שהוגדרו כ-const אינם.