1 / 46

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

236360 תורת הקומפילציה *. * הידור, למהדרין. שקפי הקורס מבוססים על שקפים מאת פרופ' מיכאל רודה. תורת הקומפילציה. מרצה מר טל כהן ctal@cs.technion.ac.il לכלול את המלה " compilation " בכותרת ההודעה אחרת אין לכם סיכוי לעבור את מסנני הזבל שלי. שעת קבלה – בתיאום מראש בלבד, בחדר 507 מתרגלים

ornice
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 236360תורת הקומפילציה* * הידור, למהדרין. שקפי הקורס מבוססים על שקפים מאת פרופ' מיכאל רודה.

  2. תורת הקומפילציה • מרצה • מר טל כהן • ctal@cs.technion.ac.il • לכלול את המלה "compilation" בכותרת ההודעה • אחרת אין לכם סיכוי לעבור את מסנני הזבל שלי. • שעת קבלה – בתיאום מראש בלבד, בחדר 507 • מתרגלים • סיוון ברקוביץ, מתרגל אחראי • שחר דג • אלכס קוגן

  3. לוגיסטיקה • 25% - תרגילי בית • 5% תרגילים "יבשים", רשות (מגן) • 20% תרגילים "רטובים", חובה • 75% -- מבחן סוף הקורס • ציון נכשל בתרגילים הרטובים גורר כשלון בקורס, ללא קשר לציון המבחן. • ציון נכשל במבחן גורר כשלון בקורס, ללא קשר לציון התרגילים.

  4. ספרות • ספר עיקרי A.V. Aho, R. Sethi, and J.D. Ullman – “Compilers – Principles, Techniques, and Tools”, Addison-Wesley, 1985 • ספר משני R. Wilhelm, and D. Maurer – “Compiler Design”, Addison-Wesley, 1995

  5. ספרות-המשך • ספר נוסף K.D.Cooper and L.Torczon “Engineering A Compiler”, Morgan Kaufmann, 2004

  6. שפות תכנות מבני נתונים הנדסת תכנה קומפילציה אלגוריתמים מבנה מחשבים שפות פורמליות מערכות הפעלה הידור – נושא מורכב

  7. הידור – מושגי יסוד • זמן קומפילציה • זמן ריצה compiler source program target program target program input output

  8. יעד קוד מכונה: SPARC, P690, IA32 שפת אסמבלי קוד עבור אינטרפרטר: Java Virtual Machine, P-Code, … שפות עבוד טקסט: PostScript, TeX, html, RTF, … תוכנה למכשור קלט שפות תכנות:C, Pascal, Assembler,... שפות לעיבוד טקסט:PostScript, TeX, html, RTF,… שפות scripting: C-shell, emacs, perl, Hypercard,… שפות שאילתה לעבוד נתונים (SQL) שפות לתאור חומרה (VHDL) שפות בקרה שיטות הידור – שימושים

  9. ההקשר הרחב – דוגמא Skeletal source program Preprocessor Source program Target assembly program Assembler Relocateable machine code Loader/Link-editor Absolute machine code שרשרת כלים compiler Library, releasable, object files

  10. אינטרפרטציה = פרשנות source program interpreter output input

  11. הידור / אינטרפרטציה – הכללות • Just In Time -- תוך כדי פרשנות התכנית, ה-interpreter מבצע קומפילציה של חלקי תוכנית על מנת שהמשך הביצוע יהיה מהיר יותר. דוגמא: Java • Source to Source • Virtual Machine • Pre-processors translator C program Eiffel program compiler Java program Java bytecode program with embedded pre-pocessing statements (e.g., #include, macros) preprocessor “pure” program

  12. קומפילציה – חשיבות התחום • לפיתוח שמושים מתקדמים • ניצול של כלים לפיתוח קומפיילרים להקלת מאמץ הפיתוח • כל מה שצריך לקרוא קובץ קלט (קבצי קונפיגורציה ואילך) • למפתחי תוכנה • הבנה מעמיקה של האבחנה בין זמן קומפילציה לזמן ריצה • הבנה מעמיקה מה יעשה קומפיילר עם התוכנה שלכם(שיפור ריצתה, התראת שגיאותיה) • שימוש נכון במבנים שונים של שפות התכנות • ניצול נכון של ארכיטקטורת המחשב

  13. קומפילציה – חשיבות התחום • לאנשי שפות תכנות • תמיכה יעילה בשפה חדשה • לאנשי ארכיטקטורה של מחשבים • הבנה טובה של האיזון העדין שבין חומרה לתכנה • הבנה מעמיקה מה יעשה קומפיילר (כלומר:מה תעשה כל תוכנה) עם החומרה שלכם • לסטודנטים בפקולטה למדעי המחשב • חובה להשלמת התואר

  14. תורת הקומפילציה – תכנים עיקריים • עקרונות • מבנה הקומפיילר • ניתוח מילוני (lexical analysis) • ניתוח תחבירי (parsing) • ניתוח סמנטי • יצירת קוד • נושאים מתקדמים: • אופטימיזציה • ניתוח סטטי • Data-flow analysis • קומפיילרים Just-In-Time ו-Virtual Machines • קומפיילרים "פתוחים"

  15. קומפיילר של... סקירה זריזה של שפות תכנות עיקריות

  16. שיקולים בבחירת שפה למימוש • תחום השימוש • הכלי הנכון למשימה המתאימה • אין "השפה הכי טובה" • יעילות התוכנה • משך הפיתוח • כתיבת התכנית • הידור, בדיקה, וניפוי טעויות • (לימוד, אימון) • תחזוקה • קריאות התכנית • זמינות מימושים קודמים • אינרציה (עצלות?)

  17. FORTRAN, 1954-58, John Backus (IBM) • תחום: חישוב מדעי • אפיונים • ביטויים אריתמטיים • מערכים חסומים • פרוצדורות • common blocks • call by reference • קלט / פלט • מודל מימוש • דרישות שטח קבועות מראש • דגש על אופטימיזציה של חישובים נומריים • עדיין בשימוש

  18. ALGOL 60, 57-60 Committee (Backus, McCathy, Naur, …) • תחום: חישוב נומרי • אפיונים • הוגדר בקפידה – התחביר הוגדר ע"י BNF • מבנה בלוקים • פרוצדורות רקורסיביות • הגדרה מפורשת של טיפוסים • חוקי scoping • העברת פרמטרים by value & ו-by name • dynamic array bounds • שימושים • מעט, בעיקר באירופה • השפעה רבה על התחום (על שפות מאוחרות יותר)

  19. Pascal etc., 1971 (Niklaus Wirth) • תחום: חישובים כללים, חינוך • אפיונים • פשטות במימוש ובשפה • הגדרות של טיפוסים רבים • מתודולוגיה של תכנות מובנה • מתאים להוכחת נכונות של תכניות • דיאלקטים שונים • Modula-2 1970-81 • Oberon, Oberon-2 1988-90, 1992 • Modula-3 1988-89

  20. COBOL, 1959-61(DoD-led committee) • תחום: עבוד נתונים • אפיונים • תיאור ניפרד לנתונים • מבנה נתונים של records • תיאור קבצים ופעולות עליהם • תחביר דמוי אנגלית • עדיין בשימוש נרחב

  21. C, 1972-1974, Dennis Ritchie (Bell Labs) • תחום: תכנות מערכות (תכנות ה- Unix kernel והשירותים הנלווים) • אפיונים • כר נרחב של פעולות • תחביר תמציתי • תמיכה בגישה למשאבי המכונה • בשימוש נרחב בכל תחום כמעט • שפה פופולרית מאוד

  22. C++, 1980-, Bjarne Stroustrup • תחום: תכנות מערכות אבל גם פיתוח יישומים • אפיונים • הרחבה של C • תמיכה עבור טיפוסים אבסטרקטיים (abstract data types) • מונחת עצמים • שפה עשירה ומסובכת • בשימוש נרחב • יותר נזק מתועלת?

  23. Java, 1995-, Arnold & Gosling (Sun) • תחום: מגוון רחב של שימושים, עם דגש על ניצול תשתיות תקשורת • אפיונים • ניהול אוטומטי של הזכרון (garbage collection) • אי-תלות בחומרה (JVM) • בשימוש נרחב

  24. LISP, 1959-60, John McCarthy (MIT) • תחום: בינה מלאכותית וחישובים סימבוליים • אפיונים • עיבוד רשימות (list processing) • תחביר פשוט • תכניות יכולות בקלות לנתח תכניות אחרות • טיפוסים דינאמיים • יכולות מאקרו אמיתיות • וריאציות רבות (Common Lisp, Scheme)

  25. Prolog, 1972, Colmerauer and Kowalski • שפת תכנות "לוגית" • היוותה בסיס למחקר נרחב • פרוייקט "הדור החמישי"ביפן • מסדי נתונים רלציוניים, SQL • בשימוש מועט • הובילה לשפות לוגיות אחרות – כגון Datalog • פרויקט טכניוני: שפת JTL

  26. מבנה הקומפיילר – תמונה כללית Wilhelm and Maurer – Chapter 6 Aho, Sethi, and Ullman – Chapter 1 Cooper and Torczon – Chapter 1

  27. קומפיילר – כקופסא שחורה int a, b; a = 2; b =a*2+ 1; source code target code SET R1,2 STORE #0,R1 SHIFT R1,1 STORE #1,R1 ADD R1,1 STORE #2,R1

  28. קומפילר – מבנה סכמתי תוכנית מקור תוכנית מטרה החלק ה"קשה" לסטודנטים בקורס analysis ייצוג ביניים +טבלת סמלים code optimization החלק הקשה בעולם האמיתי ייצוג ביניים code generation

  29. ייצוג ביניים • הניתוח מייצר קוד בשפה נמוכה מאוד • מכילה בד"כ רק השמה, אריתמטיקה (פעולה אחת בשורה!), קפיצה (goto) וקפיצה מותנית • משמשת כבסיס לייצור קוד מכונה • כל שורה מכילה פקודה אחת • אין ביטויים מורכבים

  30. טבלת הסמלים • כוללת שורה עבור כל סמל בתוכנית • שמות משתנים, מחלקות, פונקציות, פרוצדורות, מתודות, וכו' – תלוי בשפת התכנות • מידע רלוונטי לכל סמל • טיפוס (עבור משתנים, פונקציות) • ערך (עבור קבועים) • פרמטרים וטיפוסיהם (עבור פונקציות, פרוצדורות, מתודות) • וכו' • קיים בעיקר בזמן הקומפילצייה • קיים בזמן ריצה רק למטרות de-bugging, או • בשפות עם מנגנוני Reflection (כגון Java, C#, Eiffel) יש חלק מהמידע גם בזמן ריצה "רגילה"

  31. למשל... int a, b; a = 2; b =a*2+ 1; a = 2 temp1 = a*2 b = temp1 + 1

  32. machine dependent optimization machine dependent optimization code generation code generation שימוש חוזר במרכיבי הקומפיילר שפה ב שפה n שפה א analysis 2 analysis n analysis 1 machine independent optimization … מכונה m מכונה 1

  33. Cfront end C++front end Fortranfront end Javafront end Adafront end ... Optimizer ('middle end') i386back end s390back end rs6000back end sparcback end armback end ... שימוש חוזר במרכיבי הקומפיילר – לדוגמא בקומפיילר GCC

  34. שימוש חוזר ברכיבים של מישהו אחר • כיום, שפות רבות "חוסכות" את הצורך לכתוב optimizers טובים במיוחד לפלטפורמות שונות. • פשוט מתרגמים את הקוד ל-C, ומניחים שלכל פלטפורמה יש קומפיילר C ראוי לשמו. • "cross-platform assembly" • גם תרגום לשפת C הוא תהליך קומפילציה... • גם כאן יש מקום לאופטימיזציות.

  35. קומפילר – מבנה סכמתי תוכנית מקור תוכנית מטרה front end analysis back end machine independent optimization machine dependent optimization code generation

  36. front end – שלב הניתוח תוכנית מקור Back End scanner lexical analysis token stream parser syntax analysis syntax tree semantic analysis decorated syntax tree

  37. אנליזה של ביטוי

  38. Abstract Syntax Tree – AST

  39. Decorated/Annotated AST

  40. כפל משמעות • איך נראה ה-AST של הביטוי: 9-5+2 ?

  41. כפל משמעות + - ?? 2 - + 9 9 5 5 2

  42. דקדוקים ומשמעויות • המשמעות ה"נכונה" נבחרת בהתאם לדקדוק • פעמים רבות ניתן לכתוב את אותם הכללים בעזרת דקדוקים חד-משמעיים או דו-משמעיים • נחשו מה עדיף. • לשפות מורכבות מאוד (קרי:מציאותיות) בדרך-כלל אין דקדוק חד-משמעי • או שהוא מורכב להחריד. • יש פתרונות אחרים לדו-משמעויות...

  43. שלב האופטימיזציה Decorated Syntax Tree Decorated Syntax Tree • דוגמאות • constant propogation • common subexpressions • dead code elimination • איזון בין זמן קומפילציה לזמן ריצה machine independent optimization

  44. שלב הסינתזה ((back-end decorated syntax tree decorated syntax tree target program target program address assignment code generation machine dependent optimization peephole optimizer

  45. ה- back-end, דוגמא int a, b; a = 2; b =a*2+ 1; (front end) a = 2 temp1 = a*2 b = temp1 + 1 address assignment a0 temp1 1 b2 code generation a = 2 temp1 = a << 1 b = temp1 + 1 machine indep. optimization SET R1,2 STORE #0,R1 LOAD R1,#0 SHIFT R1,1 STORE #1,R1 LOAD R1,#1 ADD R1,1 STORE #2,R1 SET R1,2 STORE #0,R1 SHIFT R1,1 STORE #1,R1 ADD R1,1 STORE #2,R1 machine-dependent optimization

More Related