שאלת מבחן בשפות תכנות - האוניברסיטה הפתוחה 2024 - מפרשים
בשאלה זו נוסיף לשפת IMPLICIT-REFS מרכיב חדש בשם event (אירוע) בהשראת שפת VisualBasic (IMPLICIT-REFS).
למשתנה ניתן לשייך מאפיין ממין event. המאפיינים של ה-event הם קבוצת פרוצדורות ורשימת המשתנים הרשומים לאירוע. בכל פעם שמופעל האירוע הוא מפעיל כל אחת מהפרוצדורות הרשומות אליו.
התחביר החדש:
עם בנאי:
עם בנאי:
התנהגות הביטויים החדשים:
- ביטוי event-create-exp: יוצר אירוע (event) חדש ומחזיר אותו.
- ביטוי event-add-exp: רושם פרוצדורות לאירוע שנמצא בזיהוי
להפעלת האירוע משתמשים ב-call-exp הקיים:
דוגמאות:
דוגמה 1:
הסבר: a מתחיל ב-1000. נרשמות 3 עותקי dec_x ל-OnClick. פעולת
דוגמה 2:
דוגמה 3:
דוגמה 4:
דוגמה 5:
דוגמה 6:
דוגמה 7:
ממשו והטמיעו את השינויים הדרושים כפי שהוגדרו והודגמו בתוך שפת IMPLICIT-REFS.
בתשובתכם, הקפידו להסביר היכן בדיוק נדרשים שינויים ותוספות בקבצי המפרש, ומהם השינויים והתוספות.
הנחיות כלליות לפתרון זהות לשאלה 1.
למשתנה ניתן לשייך מאפיין ממין event. המאפיינים של ה-event הם קבוצת פרוצדורות ורשימת המשתנים הרשומים לאירוע. בכל פעם שמופעל האירוע הוא מפעיל כל אחת מהפרוצדורות הרשומות אליו.
התחביר החדש:
Expression ::= event.create()
עם בנאי:
event-create-exp()Expression ::= <Identifier> += [ Expression ]+
עם בנאי:
event-add-exp(evt, procs)התנהגות הביטויים החדשים:
- ביטוי event-create-exp: יוצר אירוע (event) חדש ומחזיר אותו.
- ביטוי event-add-exp: רושם פרוצדורות לאירוע שנמצא בזיהוי
<Identifier>. מחזיר את ערך הארגומנט האחרון (המשתנה שרשמנו אליו). הדקדוק הנתון בשאלה — ניקוד יורד על אי ניתוח ומימוש נכון של הדקדוק, כלומר יש להפקיד על זיהוי וטיפול נכון ב- terminals, non-terminals ופעולות סגור ( ), { }*, { }+.להפעלת האירוע משתמשים ב-call-exp הקיים:
(OnClick 50) מפעיל את כל הפרוצדורות הרשומות ל-OnClick עם הארגומנט 50.דוגמאות:
דוגמה 1:
הסבר: a מתחיל ב-1000. נרשמות 3 עותקי dec_x ל-OnClick. פעולת
(dec_x 100) מורידה a ל-900. לאחר מכן (OnClick 50) מפעיל את dec_x שלוש פעמים עם 50, מוריד a ב-150, לכן a = 750... (ראה פרטים בדוגמה).דוגמה 2:
דוגמה 3:
דוגמה 4:
דוגמה 5:
דוגמה 6:
דוגמה 7:
ממשו והטמיעו את השינויים הדרושים כפי שהוגדרו והודגמו בתוך שפת IMPLICIT-REFS.
בתשובתכם, הקפידו להסביר היכן בדיוק נדרשים שינויים ותוספות בקבצי המפרש, ומהם השינויים והתוספות.
הנחיות כלליות לפתרון זהות לשאלה 1.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחהמועד ב2024סמסטר ב
★★★★★
מפרשיםמצבתכנות מונחה עצמיםSchemeהעברת מסרים
יש להוסיף expval חדש
event-val שמחזיק רשימת פרוצדורות. event-create-exp יוצר event ריק, event-add-exp מוסיף פרוצדורות לרשימה (עם בדיקות שגיאה), ו-call-exp צריך לזהות event ולהפעיל את כל הפרוצדורות הרשומות.מרכיב ה-event מוסיף לשפת IMPLICIT-REFS תמיכה בדפוס ה-observer: ניתן לרשום רשימת פרוצדורות לאירוע ולהפעיל את כולן בו-זמנית. הפתרון דורש שינויים ב-expval, דקדוק/פרסור, ו-value-of/apply.
א. הוספת expval חדש:
יש להוסיף לסוג
פרוצדורות עזר:
ב. שינויי דקדוק (פרסר):
ג. שינויי value-of:
ד. שינויי call-exp (apply):
במקום שגיאה כאשר ה-rator אינו
בדוגמה 1: נרשמות 3 פרוצדורות ל-OnClick. הפעלת
א. הוספת expval חדש:
יש להוסיף לסוג
expval ערך חדש:פרוצדורות עזר:
ב. שינויי דקדוק (פרסר):
ג. שינויי value-of:
ד. שינויי call-exp (apply):
במקום שגיאה כאשר ה-rator אינו
proc-val, יש לבדוק גם event-val:בדוגמה 1: נרשמות 3 פרוצדורות ל-OnClick. הפעלת
(dec_x 100) מורידה a ב-100. הפעלת (OnClick 50) מפעילה את dec_x שלוש פעמים עם 50, מורידה a ב-150 נוספות. סה"כ a = 1000 - 100 - 150 = 750... הדוגמה מחזירה 700, כנראה dec_x רשומה 3 פעמים ו-(dec_x 100) גם מחסרת.