שאלת מבחן בשפות תכנות - האוניברסיטה הפתוחה 2024 - מפרשים

בשאלה זו נוסיף לשפת IMPLICIT-REFS מרכיב חדש בשם event (אירוע) בהשראת שפת VisualBasic (IMPLICIT-REFS).

למשתנה ניתן לשייך מאפיין ממין 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 חדש:


יש להוסיף לסוג 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) גם מחסרת.
שאלת מבחן בשפות תכנות - האוניברסיטה הפתוחה 2024 | prepd