אתר הקורס http://www.cs.technion.ac.il/~cs236360 איתן אביאור תורת הקומפילציה 2 ספרות איתן אביאור תורת הקומפילציה 3 איתן אביאור תורת הקומפילציה 4 מהדר ( )Compiler • תוכנית תרגום ( )translation תוכניות משפת מקור ( )source language לשפת מטרה ( )target language • תוצר.
Download ReportTranscript אתר הקורס http://www.cs.technion.ac.il/~cs236360 איתן אביאור תורת הקומפילציה 2 ספרות איתן אביאור תורת הקומפילציה 3 איתן אביאור תורת הקומפילציה 4 מהדר ( )Compiler • תוכנית תרגום ( )translation תוכניות משפת מקור ( )source language לשפת מטרה ( )target language • תוצר.
אתר הקורס http://www.cs.technion.ac.il/~cs236360 איתן אביאור תורת הקומפילציה 2 ספרות איתן אביאור תורת הקומפילציה 3 איתן אביאור תורת הקומפילציה 4 מהדר ()Compiler • תוכנית תרגום ( )translationתוכניות משפת מקור ()source language לשפת מטרה ()target language • תוצר נוסף :הודעות שגיאה ()error messages תוכנית מטרה ()target program מהדר ()compiler תוכנית מקור ()source program הודעות שגיאה ()error messages איתן אביאור תורת הקומפילציה 5 מגוון • • • • שפות תכנות עיליות ,Fortran ,Pascal ,Java ,C++ ,C :ועוד ... שפות מטרה :שפות עליות אחרות ,שפות ביניים ,שפות סף ,שפות מכונה ,צורן ( ,)siliconועוד ... שיטות :חד-מעברי ( ,)one-passרב-מעברי (.)multi-pass ייעוד :טעינה והרצה ( ,)load-and-goניפוי (,)debugging אופטימיזציה ,ועוד ... הודעה משמחת: איתן אביאור לכולם טכניקות בסיסיות דומות תורת הקומפילציה 6 הקלט למהדר • שפות תכנותPerl ,Fortran ,Pascal ,C : • שפות לעיבוד הטקסטTeχ ,html ,Postscript : • שפות פקודותC-shell ,emacs : • שפות שאילתה (לעיבוד נתונים)SQL : • שפות לתיאור חומרהVHDL : • שפות בקרה איתן אביאור תורת הקומפילציה 7 פלט המהדר • קוד מכונהPDP/11 ,MIPS ,IA32 : • שפת סףPDP/11 ,MIPS ,IA32 : • שפת בינייםByte-code (java) ,P-code (Pascal) : • שפות עיבוד טקסטPostScript ,dvi (Teχ) : • תוכנה לשליטה ובקרה על מכשירים איתן אביאור תורת הקומפילציה 8 ניתוח וחיבור ()Analysis and Synthesis • ניתוח ( ─ )analysisפירוק תוכנית המקור לגורמים ויצירת ייצוג ביניים של התוכנית. • חיבור ( ─ )synthesisיצירת תוכנית המטרה מתוך ייצוג הביניים. איתן אביאור תורת הקומפילציה 9 תוצרי הניתוח • נתון הפסוק הבא: position := initial + rate * 60 • תוצר אפשרי של שלב הניתוח עשוי להיות עץ תחביר ()syntax tree המייצג את ניתוח התחביר של הפסוק: =: + * 60 איתן אביאור position initial rate תורת הקומפילציה 10 כלי תוכנה נוספים המבצעים ניתוח תוכניות .1עורך ()structure editor .2מדפיס מסודר ()pretty printer .3בודק סטטי ()static checker .4מפרש ()interpreter .5ניתוח חתימה .6ערבול איתן אביאור תורת הקומפילציה 11 מהדרים מיוחדים .1מעבד תמלילים ()text formatter .2מהדר צורן ()silicon compiler .3מפרש שאילתות ()query interpreter איתן אביאור תורת הקומפילציה 12 ההקשר של מהדר שלד תוכנית מקור קדם מעבד ()preprocessor תוכנית מקור מהדר ()compiler תוכנית סף -מטרה מאסף ()assembler קוד מכונה ספריות שגרות איתן אביאור קשר ()linker להרצה תורתתוכנית הקומפילציה 13 ניתוח תוכנית המקור • ניתוח לקסיקאלי ()lexical analysis • ניתוח תחביר ()syntax analysis • ניתוח משמעות ()semantic analysis איתן אביאור תורת הקומפילציה 14 ניתוח לקסיקאלי ()Lexical Analysis • ניתוח קווי ( )linear analysisהמפרק את התוכנית לזרם של תמניות ()stream of tokens • תמנית ( ─ )tokenהרחבה של מושג המלה בשפה: – מלת מפתח ()keyword – מזהה ()identifier – קבוע – אופרטור – מפריד ()separator – מסיים ()delimiler – ועוד ... איתן אביאור תורת הקומפילציה 15 דוגמה− ניתוח לקסיקאלי position := initial + rate 60 position := initial + rate 60 הפסוק :מתפרק ל (identifier) (assignment operator) (identifier) (operator) (identifier) (operator) (integer constant) נעלמים בד"כ− ' סוף שורה וכד, טבולטור, רווח:התווים הלבנים 16 תורת הקומפילציה איתן אביאור ניתוח התחביר ()Syntax Analysis • ניתוח היררכי ( )hirarchial analysisהמייצר או סורק מבנה נתונים (בד"כ עץ) המייצג את ניתוח הפסוק (או התוכנית כולה) לפי הגדרת השפה • נקרא גם פריסה ()parsing • אחד המבנים המקובלים לייצוג תוצר הניתוח הינו עץ פריסה ()parse tree • לא תמיד נוצר מבנה נתונים או עץ בפועל .לעיתים נוצר פלט הנראה כאילו נוצר מסריקה של מבנה נתונים כנ"ל איתן אביאור תורת הקומפילציה 17 דוגמה− ניתוח התחביר הפסוק position := initial + rate * 60 :ואשר פורק לזרם התמניות דלעיל מיוצג ע"י עץ הפריסה assignment statement identifier position 18 := expression + expression expression identifier expression initial identifier number rate 60 תורת הקומפילציה expression איתן אביאור ניתוח התחביר −המשך הדוגמה או ע"י עץ התחביר (:)syntax tree =: + * 60 איתן אביאור position initial rate תורת הקומפילציה 19 ניתוח לקסיקאלי וניתוח התחביר ניתוח התחביר משתמש בהגדרות שפה רקורסיביות ואילו הניתוח הלקסיקאלי משתמש בהגדרות יותר פשוטות. בד"כ הקו המפריד בין שני השלבים יהיה המקום בו נכנסות ההגדרות הרקורסיביות של השפה. איתן אביאור תורת הקומפילציה 20 ניתוח משמעות )Semantic Analysis( • הבנת המשמעות של התוכנית ובדיקת נכונותה )(עד רמה מסוימת כמובן )type checking( • חלק חשוב בשלב זה הינו בדיקת טיפוסים יתורגם באופן שונה ע"פ טיפוסי הנתוניםalpha += beta הביטוי .beta- וalpha של int alpha; int beta; add beta, alpha 21 float alpha; float beta; float alpha; int beta; addf beta, alpha cvtif beta, f0 addf f0, alpha תורת הקומפילציה int alpha[2]; int beta(int, float); error איתן אביאור דוגמה− ניתוח משמעות := position + initial := position rate + initial rate * 60 * inttoreal 60 22 תורת הקומפילציה איתן אביאור שלבים− מבנה המהדר lexical analyser מנתח לקסיקאלי syntax analyser מנתח תחביר semantic analyser מנתח משמעות מנהל סמלים symbol manager 23 מייצר קוד ביניים intermediate code generator code optimizer מייעל קוד code generator מייצר קוד תורת הקומפילציה מטפל שגיאות error handler איתן אביאור מבנה המהדר −צדדים צד קדמי front end מנתח לקסיקאלי lexical analyser מנתח תחביר syntax analyser כל מה שאיננו קשור או תלוי בשפת מטרה מנתח משמעות semantic analyser מייצר קוד ביניים intermediate code generator מטפל שגיאות error handler צד אחורי back end איתן אביאור מייעל קוד code optimizer מייצר קוד code generator תורת הקומפילציה מנהל סמלים symbol manager מה שקשור או תלוי בשפת מטרה 24 טבלת סמלים ()Symbol Table מכילה רשימה עבור כל סמל המוגדר בתוכנית המייצג ישות כגון: – משתנים – קבועים בעלי שם – פונקציות – אובייקטים – ועוד... הרשומה מכילה את כל המידע הנחוץ לגבי אותה ישות. הישויות מיוצגות במבני הנתונים האחרים של המהדר ע"י הפניה למיקום הסמל בטבלת הסמלים: … 1 position … 2 initial id1 position … 3 rate id2 initial id3 rate איתן אביאור תורת הקומפילציה 25 ניתוח וחיבור ניתוח ()analysis מנתח לקסיקאלי lexical analyser מנתח תחביר syntax analyser מנתח משמעות semantic analyser מייצר קוד ביניים intermediate code generator מייעל קוד חיבור ()synthesis איתן אביאור מייצר קוד code optimizer עשוי להכיל ניתוח נוסף code generator תורת הקומפילציה 26 תוצר שלב הניתוח =: + 60 id1 id2 =: id3 + num 60 איתן אביאור תורת הקומפילציה id 1 id 2 id 3 27 ייצור קוד ביניים ()Intermidiate Code Generation קוד הביניים עשוי להיות מיוצג בשיטות שונות. ביטויים אריתמטים עשוים להיות מיוצגים ע"י הוראות משולשות (.)three address code dest := src1 op src2 איתן אביאור תורת הקומפילציה 28 דוגמה− קוד ביניים position := initial + rate * 60 :הפסוק := :לעץ התחביר position + initial * rate inttoreal שנותח 60 temp1 temp2 temp3 id1 29 := := := := inttoreal(60) id3 * temp1 id2 + temp2 temp3 תורת הקומפילציה :ייוצג ע"י איתן אביאור ייעול ()Optimization מטרתו לפשט את התוכניות במספר מימדים: – גודל הקוד הנוצר – זמן הריצה – השימוש במשאבים (זיכרון ,אוגרים וכו') חלקו בלתי תלוי בשפת המטרה, וחלקו תלוי בשפת המטרה ו/או במכונת המטרה (:)target machine – מספר האוגרים – אוסף ההוראות – הוראות מיוחדות – צינור ()pipeline – ועוד ... לעיתים נעשה חלק מהאופטימיזציה גם לאחר שלב ייצור קוד המטרה איתן אביאור תורת הקומפילציה 30 דוגמה− ייעול temp1 temp2 temp3 id1 := := := := inttoreal(60) id3 * temp1 id2 + temp2 temp3 temp1 := id3 * 60.0 id1 := id2 + temp1 31 תורת הקומפילציה איתן אביאור ייצור קוד ()Code Generation מייצר את תוכנית המטרה באחד (או יותר) מאלה: – שפה עילית אחרת – שפת סף – שפת מכונה דוגמה בשפות סף מכונת 3כתובות עם פעולות אריתמטיות בין תאי זיכרון mulf3 #60.0, id3, r2 addf3 id2, r2, id1 איתן אביאור תורת הקומפילציה מכונת 2כתובות עם פעולות אריתמטיות בין אוגרים id3, r2 #60.0, r2 id2, r1 r2, r1 r1, id1 movf mulf movf addf movf 32 עזרים לבניית מהדר תוכניות עזר לבניית מהדרים מתוך הגדרות פורמאליות של שפת המקור ו/או שפת מטרה. נקראות בשמות כגון: • compiler−compile • compiler−generator • translator−writing system איתן אביאור תורת הקומפילציה 33 עזרים לבנית מהדר −המשך .1 .2 .3 .4 .5 מייצר פורס ( ─ )parser generatorמתוך דקדוק חסר הקשר מייצר סורק ( ─ )scanner generatorמתוך ביטויים רגולריים מנוע תרגום מונחה תחביר ( ─ )syntax directed translation engineמייצר שגרות העוברות על עץ הפריסה ומייצרות קוד מייצר קוד אוטומטי ( ─ )automatic code generatorמתוך אוסף כללים לתרגום ההוראות של קוד ביניים עושה שימוש בטכניקה של השוואת תבניות ()template matching מנוע זרימת מידע ( ─ )data-flow engineמנתח את זרימת המידע בתוכנית ע"מ לאפשר אופטימיזציות מתקדמות. איתן אביאור תורת הקומפילציה 34 תום פרק 1 איתן אביאור תורת הקומפילציה 35