תורת הקומפילציה

מסמכים קשורים
מהוא לתכנות ב- JAVA מעבדה 3

אוניברסיטת בן גוריון בנגב תאריך המבחן: שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות מס' הקורס : מיועד לתלמידי : הנד

Microsoft PowerPoint - rec3.ppt

PowerPoint Presentation

משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק

PowerPoint Presentation

מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב

סדנת תכנות ב C/C++

אוניברסיטת בן גוריון בנגב תאריך המבחן: שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: מס' הקורס : הנדסת תעשיה וניהול מ

תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

2013/14 אוניברסיטת חיפה מבוא למדעי מחשב, מעבדה מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מ

מדריך להתקנת Code Blocks מדריך זה נועד לתאר את תהליך התקנת התוכנה של הקורס "מבוא למחשב שפת C". בקורס נשתמש בתוכנת Code::Blocks עם תוספת )אשף( המתאימה

PowerPoint Presentation

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

PowerPoint Presentation

מצגת של PowerPoint

Microsoft Word - Ass1Bgu2019b_java docx

הגשה תוך שבוע בשעת התרגול

Slide 1

מבוא לתכנות ב- JAVA תרגול 7

שאלהIgal : מערכים דו מימדיים רקורסיה:

מבוא למדעי המחשב

מקביליות

Microsoft PowerPoint - Lecture1

תרגול 1

מבוא למדעי המחשב

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

שאלהIgal : מערכים דו מימדיים רקורסיה:

PowerPoint Presentation

מבוא למדעי המחשב

מבוא לתכנות ב- JAVA תרגול 11

מבוא למדעי המחשב - חובלים

יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן

Slide 1

Slide 1

PowerPoint Presentation

Slide 1

תשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(

Microsoft PowerPoint - 10_threads.ppt

Microsoft PowerPoint - L01-n.ppt

שאלהIgal : מערכים דו מימדיים רקורסיה:

תרגיל בית מספר 1#

PowerPoint Presentation

Microsoft Word B

Microsoft Word - pitaron222Java_2007.doc

Slide 1

WinZIP תוכנה לדחיסת קבצים ספטמבר 2007

מבוא לאסמבלי

מבוא למדעי המחשב

BIG DATA תיאור הקורס המונח Big Data הולך וצובר תאוצה בשנים האחרונות, הוא הופך למגמה רווחת בתעשייה. המשמעות הפרקטית של המונח Big Data הינה טכנולוגיות נ

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

Microsoft PowerPoint - lec10.ppt

שבוע 4 סינטקס של HACK ASSEMBLY ניתן להשתמש בשלושה אוגרים בלבד:,A,D,M כולם בעלי 16 ביטים. M אינו אוגר ישיר- הוא מסמן את האוגר של ה RAM שאנחנו מצביעים ע

מתכונת עיצוב 3013

Microsoft PowerPoint - 07_tdd.ppt

תוכנה 1 1 אביב תשע"ג תרגיל מספר 5 מערכים, מחרוזות, עיבוד טקסט ומבני בקרה הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגש

ייבוא וייצוא של קבצי אקסל וטקסט

אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג, משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם

תרגול מס' 1

מבוא למדעי המחשב - חובלים

בס"ד תרגיל 3 מועד אחרון ל כללי בתרגיל זה עליכם לכתוב תוכנה שמדמה מאגר נתונים של חנות. את מוצרי החנות תייצגו באמצעות עצים ורשימות מקושרות יהיה עליכם לנ

T01-1page

Slide 1

Microsoft Word - c_SimA_MoedB2005.doc

מבוא למדעי המחשב

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

Homework Dry 3

Microsoft PowerPoint - lec2.ppt

PowerPoint Presentation

ex1-bash

עוצמת ההורשה מה הופך את ההורשה לכלי כל כך עוצמתי? מעבר לכך שהוא מקל בהגדרת מחלקות חדשות על סמך מחלקות קיימות, יש לנו אפשרות להתייחס לאובייקט מסויים בכ

PowerPoint Presentation

Slide 1

המשימה תרגול מס' 5: קלט-פלט במערכות הפעלה שונות יש סימונים שונים עבור ירידת שורה :)newline( ב- UNIX/Linux )Line Feed( \n ב- Windows )Carriage Return +

Comp. Arch. Lecture 1

שעור 6

PowerPoint Presentation

Slide 1

Microsoft PowerPoint - T-10.ppt [Compatibility Mode]

תאריך פרסום: תאריך הגשה: מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש לה

Microsoft PowerPoint - rec8.ppt

Tutorial 11

תכנות מונחה עצמים א' – תש"ע

Microsoft Word Viewer - Winter0708-MoedC.doc

<4D F736F F D20FAF8E2E9EC203220E0F7E520EEE020FAF9F2E1>

הטכניון מכון טכנולוגי לישראל תורת הקומפילציה , סמסטר חורף תשע"ו מבחן סוף סמסטר מועד א' מרצה אחראי: מתרגלים: ד ר אוהד שחם אבנר אליזרוב

Slide 1

Microsoft PowerPoint - 07_tdd.ppt

Slide 1

פייתון

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

תמליל:

תורת הקומפילציה תרגיל בית 2 הוראות לתרגיל 2 בשפת MINI-PASCAL הפרוייקט המצורף הינו קוד שלד של מהדר לשפת mini-pascal עליכם לממש בסביבת (Eclipse (Java את הפונקציות המתאימות לפי החומר שנלמד בהרצאה ע"מ שהמהדר הנוצר יוכל לייצר קוד עבור: 1. Symbol table (define your own symbol table gradually) 2. Assignments (e.g. a = w * (e + 6)) 1

3. IF-THEN-ELSE 4. WHILE 5. CASE 6. SSP (hint: it s equal to 5+Number of allocated variables) 7. SEP (hint: add new abstract function to the class Node, call it public abstract int getmaxneededspace(), and implement it in sub-classes like Expr ) 8. Semantic errors: detect uninitialized variables and print a proper warning message to console, e.g. System.out.println( Warning Error: uninitialized variable + var_name). Hint: add new abstract method to class Node, call it public abstract void boolean detectuninitializedvars(), make advantage of your Symbol Table to indicate which variables have been initialized and which have not. And call that method from Main.java just before root.code(pw) as a preprocessing step. 9. Error recovery (add new rules to Parser.cup that handle errors) התוכנית הנתונה שאותה תרחיבו מפעילה למעשה את המנתח הלקסיקלי ואת המנתח התחבירי על תוכנית הקלט עבורה תרצו לייצר קוד מכונה, כמו שראיתם בתרגול על.JLex_CUP_tools לשים לב שתחילת ההרצה של הקומפיילר היא הקובץ Main.java (שם אני מעביר לכם את השורש של העץ ;(root.code(out_pw ולכן תתחילו לעשות Debug מנקודה זו. אבל לפני שמריצים את הקומפיילר מ eclipse צריך לספק שם של קובץ קלט, הסבר איך לעשות זאת בהמשך מסמך זה). יהיה עליכם לממש בכל מחלקה מתוך Node.java (המשמשת צומת בעץ הגזירה הנוצר על סמך הדקדוק) בהתאם לצורך, את הפונקציות הוירטואליות (כל המחלקות יורשות מ (class Node public abstract void code(printwriter pw); public abstract void codel(printwriter pw); public abstract void coder(printwriter pw); כמו כן תוכלו להוסיף מחלקות ופונקציות נוספות כרצונכם. הנכם רשאים (ואף מתבקשים) להשתמש במבני הנתונים הסטנדרטיים של Java כמו למשל: protected static HashMap<String, VarDetails> symboltable = new HashMap<String, ;()<VarDetails כאשר VarDetails זה מחלקה שאתם מגדירים (בקובץ Java חדש או בתור מחלקה פנימים בתוך (Node.java בהמשך תוכלו לראות כיצד ליצור פרויקט. בנוסף למספר דוגמאות. רשימה של בונוסים הוספת תמיכה בלולאת for כמו בשפת C++/Java הפצת קבועים constant-propagation copy-propagation invariant expression motion strength reduction deleting unused IF-THEN statements וקוד המתרגם אותן..1.2.3.4.5.6 בהצלחה 2

הגדרות משתנים בשפת MINI var1 XED; ( integer type ) var2 FLOAT; ( real type ) var3 BOOLEAN; ( boolean type ) משתנה פשוט type simple הידור והרצה בסביבת עבודה Eclipse את סביבת הפיתוח של (Eclipse (Java ניתן להוריד מהאתר www.eclipse.org או ישירות מהקישור: http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/r-3.6.2-201102101200/eclipse-sdk-3.6.2-win32.zip לאחר שנכנסתם ל Eclipse יש לייבא את הפרוייקט המצורף בעבודת בית זו: Compiler.zip כך: File -> import -> General -> Existing Projects into Workspace -> next -> Select archive file ->.Browse (choose the compiler project) -> Finish ואז יופיע לכם הפרוייקט בתוך eclipse כך: איך לספק פרמטר לפונקציה main בתוך המחלקה? Main.java תעשו right-click על הקובץ Main.java תבחרו ב Run As -> Run Configurations ותוסיפו שם של קובץ שלכם שאותו רוצים להדר. וללחוץ על.Run 3

ההגשה: 1. יש לארוז את הפרוייקט (לאחר שהוספת את הקוד שלכם) כך: Right-click on the project (compiler) -> Export -> General -> Archive file -> (give a name) -> finish 2. יש לייצר קובץ ריצה (שזה בעצם הקומפיילר שלכם) 4

Right-click on Main.java -> Export -> under Java, choose Runnable JAR file -> next -> choose Lunch configuration & destination -> finish לסיכום: אתם צריכים להגיש בדואר אלקטרוני 1) קוד מקור של קומפיילר ארוז (compiler.zip) 2) קובץ ריצה (compiler.jar) 3) לציין במייל את מספרי ת.ז. שלכם + אילו בונוסים ממשתם במידה ויש 4) בנושא של המייל יש לכתוב: comp2_id1_id2_id3 5

דוגמא לעץ הגזירה הנוצר 6

דוגמאות לקוד הנוצר PROGRAM IfExample a XED; b XED; c XED; a= 5; b=150+a*88; c= b; IF (a==5) THEN a=b+99; IF (c == b) THEN b= 2222; ELSE c=888888; ELSE a=0; p code: דוגמא : 1 עבור התוכנית הנתונה נקבל את הפלט הבא: ssp 8 sep 4 ldc i 5 ldc i 150 ldc i 88 mul i add i 7

ldc i 5 equ i fjp L0 ldc i 99 add i equ i fjp L1 ldc i 2222 ujp L2 L1 ldc i 888888 L2 ujp L3 L0 ldc i 0 L3 דוגמא : 2 עבור התוכנית הנתונה PROGRAM WhileExample a XED; b XED; c XED; x XED; a= -5; b= a+10; c= b; x=a+1; WHILE(a<=1) WHILE((c<=b) (c<=x)) 8

IF (a==-5) THEN b=12345; c=12346; a=a+10; p code: נקבל את הפלט הבא: ssp 9 sep 3 ldc i 5 neg i ldc i 10 add i ldc a 8 ldc i 1 add i L0 ldc i 1 leq i fjp L1 L2 leq i ldc a 8 9

leq i or fjp L3 ldc i 5 neg i equ i fjp L4 ldc i 12345 ldc i 12346 L4 ujp L2 L3 ldc i 10 add i ujp L0 L1 דוגמא : 3 עבור התוכנית הנתונה (תשימו לב, כאן ה case תמיד מתחיל מ 1 ולא מאפס כמו שראיתם בתרגול) PROGRAM CaseExample a XED; b XED; c XED; a = 1; b = 2; c = 1; CASE a OF 1:CASE b OF 2:c=4; 1:c=3; 2:c=4; 10

p code: נקבל את הפלט הבא: ssp 8 sep 2 ldc i 1 ldc I 2 ldc i 1 neg i ixj L0 L1 neg i ixj L2 L3 ldc i 3 ujp L2 L4 ldc i 4 ujp L2 ujp L4 ujp L3 L2 ujp L0 L5 ldc i 4 Sto i ujp L0 ujp L5 ujp L1 L0 11

PROGRAM IfExample a XED; b XED; c XED; x XED; a= 5; b=150*(a+88; c= b; IF (a==x+) THEN a=b+99; IF (c == b) THEN b= 2222; ELSE c=888888; ELSE a=0; דוגמאה לתוכנית שלא עוברת קומפילציה דוגמאה לתוכנית שעוברת קומפילציה אבל עם warning מהסוג uninitialized variable PROGRAM IfExample a XED; b XED; c XED; x XED; a= b; b=150*(a+88); c= b; IF (a==x+6) THEN a=b+99; IF (c == b) THEN b= 2222; ELSE c=888888; ELSE a=0; 12

עבור טיפול בשגיאות ברמת המנתח התחבירי הוספתי דוגמה בקובץ Parser.cup הערות: 1. אתם יכולים לשתמש במילה error במקום משתנים ולא במקום טרמינלים. 2. כל שינוי לקובץ parser.cup או Yylex.lex ידרוש קומפילציה מחדש לקבצים אלו כמו שראיתים בתרגול. 13