45
236360 הההה הההההההההה* * ההההה, ההההה, ההההההה. הההה ההההה ההההההה הה ההההה ההה הההה' ההההה הההה.

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

  • View
    247

  • Download
    6

Embed Size (px)

Citation preview

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

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

הידור, מהדיר, למהדרין.*

שקפי הקורס מבוססים על שקפים מאת פרופ' מיכאל רודה.

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

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

מרצה•דר' איל זקס–

[email protected]לכלול את מספר הקורס בכותרת ההודעה•שעת קבלה – מיד בתום ההרצאה•

מתרגלים•, מתרגל אחראידני גז–רותם אושמן–

אתר הקורס •http://webcourse.cs.technion.ac.il/236360

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

בסיס לציונים

- שלושה תרגילים על יבש )מגן(10%•

- מספר תרגילי הרצה30%•

- מבחן סוף הקורס60%•

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

ספרות

ספר עיקרי•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

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

ספרות-המשךספר נוסף•

K.D.Cooper and L.Torczon

“Engineering A Compiler”, Morgan Kaufmann, 2004

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

הידור – נושא מורכב

קומפילציה

תכנות שפות

תכנה הנדסת

מחשבים מבנה

הפעלה מערכותפורמליות שפות

אלגוריתמים

נתונים מבני

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

הידור – מושגי יסוד

זמן קומפילציה•

זמן ריצה•

compilersource program target program

target program

outputinput

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

שיטות הידור – שימושים

יעד ,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שפות לתאור חומרה )•שפות בקרה•

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

ההקשר הרחב – שרשרת כלים( tool chain:לרוב ,)

Skeletal source program

Preprocessor

Source program

Target assembly program

Assembler

Relocateable machine code

Loader/Link-editor

Absolute machine code

compiler

Library, releasable, object files

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

אינטרפרטציה = פרשנות

interpreter

source program

input

output

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

הידור / אינטרפרטציה – הכללות

•Just In Time ,תוך כדי פרשנות התכנית -- מבצע קומפילציה של חלקי תוכנית על interpreterה-

Java מנת שהמשך הביצוע יהיה מהיר יותר. דוגמא: •Source to Source

•Virtual Machine

•Pre-processors

Eiffel program C programtranslator

Java bytecodeJava program compiler

“pure” programprogram with embeddedpre-pocessing statements(e.g., #include in C, macros)

preprocessor

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

קומפילציה – חשיבות התחוםלמפתחי תוכנה•

הבנה מעמיקה מה יעשה קומפיילר עם התוכנה שלכם–)שיפור ריצתה, התראת שגיאותיה(

שימוש יעיל בשפת תכנות, ובארכיטקטורת המחשב–ניצול כלים קיימים, כגון לקריאת קבצי קלט )קבצי –

קונפיגורציה ואילך(לאנשי שפות תכנות•

תמיכה יעילה בשפה חדשה–לאנשי ארכיטקטורה של מחשבים•

הבנה מעמיקה מה יעשה קומפיילר/תוכנה עם החומרה –שלכם

לסטודנטים בפקולטה למדעי המחשב•חובה להשלמת התואר–

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

תורת הקומפילציה – תכנים עיקריים

עקרונות•מבנה הקומפיילר•(lexical analysisניתוח מילוני )•(parsingניתוח תחבירי )•ניתוח סמנטי•יצירת קוד•נושאים מתקדמים:•

אופטימיזציה–ניתוח סטטי––Data-flow analysisVirtual Machines ו-Just-In-Timeקומפיילרים –

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

קומפיילר של...

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

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

למימוש שפה בבחירת שיקוליםהשימוש • תחום

המתאימה – למשימה הנכון הכלי–" טובה " הכי השפה אין

התוכנה • יעילותהפיתוח • משך

כתיבת התכנית–הידור, בדיקה, וניפוי טעויות–)לימוד, אימון(–

תחזוקה•קריאות התכנית–

קודמים • מימושים זמינות

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

FORTRAN, 1954-58, John Backus )IBM(

תחום: חישוב מדעי•אפיונים•

ביטויים אריתמטיים–מערכים חסומים–פרוצדורות––common blocks – call by referenceקלט / פלט –

מודל מימוש•דרישות שטח קבועות מראש–דגש על אופטימיזציה של חישובים נומריים–

עדיין בשימוש•

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

ALGOL 60, 57-60 Committee )Backus, McCathy, Naur, …(

תחום: חישוב נומרי•אפיונים•

BNFהוגדר בקפידה – התחביר הוגדר ע"י –מבנה בלוקים–פרוצדורות רקורסיביות–הגדרה מפורשת של טיפוסים–scopingחוקי – by name ו- &by valueהעברת פרמטרים ––dynamic array bounds

שימושים•מעט, בעיקר באירופה–

השפעה רבה על התחום )על שפות מאוחרות יותר(•

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

Pascal etc., 1971 )Niklaus Wirth(

תחום: חישובים כללים, חינוך•אפיונים•

פשטות במימוש ובשפה–הגדרות של טיפוסים רבים–מתודולוגיה של תכנות מובנה–מתאים להוכחת נכונות של תכניות–

דיאלקטים שונים•–Modula-2 1970-81–Oberon, Oberon-2 1988-90, 1992–Modula-3 1988-89

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

COBOL 1959-61 DOD-led committee

תחום: עבוד נתונים•אפיונים•

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

עדיין בשימוש נרחב•

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

C, 1972-1974, Dennis Ritchie )Bell Labs(

Unix kernelתחום: תכנות מערכות )תכנות ה- •והשירותים הנלווים(

אפיונים•כר נרחב של פעולות–תחביר תמציתי–תמיכה בגישה למשאבי המכונה–

בשימוש נרחב בכל תחום כמעט•שפה פופולרית מאוד•

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

C++, 1980-, Bjarne Stroustrup

תחום: תכנות מערכות אבל גם פיתוח •שימושים

אפיונים•Cהרחבה של – abstractתמיכה עבור טיפוסים אבסטרקטיים )–

data types)מונחת עצמים–שפה עשירה ומסובכת–

בשימוש נרחב•יותר נזק מתועלת?•

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

Java, 1995-, Arnold & Gosling )Sun(

תחום: מגוון רחב של שימושים, עם דגש על •ניצול תשתיות תקשורת

אפיונים• garbageניהול אוטומטי של הזכרון )–

collection)(JVMאי-תלות בחומרה )–

בשימוש נרחב•

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

LISP, 1959-60, John McCarthy )MIT(

תחום: בינה מלאכותית וחישובים סימבוליים•אפיונים•

(list processingעיבוד רשימות )–תחביר פשוט–תכניות יכולות בקלות לנתח תכניות אחרות–טיפוסים דינאמיים–

( Common Lisp, Schemeוריאציות רבות )•

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

Prolog, 1972, Colmerauer and Kowalski

שפת תכנות "לוגית"•

היוותה בסיס למחקר נרחב•ביפן פרוייקט "הדור החמישי"–SQLמסדי נתונים רלציוניים, –

בשימוש מועט•

Datalogהובילה לשפות לוגיות אחרות – כגון •

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

מבנה הקומפיילר – תמונה כללית

Wilhelm and Maurer – Chapter 6

Aho, Sethi, and Ullman – Chapter 1

Cooper and Torczon – Chapter 1

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

קומפיילר – כקופסא שחורה

target code

int a, b;a = 2;b = a*2 + 1;

SET R1,2STORE #0,R1SHIFT R1,1STORE #1,R1ADD R1,1STORE #2,R1

source code

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

קומפילר – מבנה סכמתי

תוכנית מקור

תוכנית מטרה

analysis

code optimization

code generation

האמיתי בעולם הקשה החלק

טבלת סמלים ייצוג ביניים +

ביניים ייצוג

" " בקורס לסטודנטים קשה ה החלק

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

Intermediate Representationייצוג ביניים -

הניתוח מייצר קוד בשפה נמוכה מאוד•מכילה בד"כ רק השמה, אריתמטיקה )פעולה אחת –

( וקפיצה מותניתgotoבשורה!(, קפיצה )

משמשת כבסיס לייצור קוד מכונה•

כל שורה מכילה פקודה אחת•

אין ביטויים מורכבים•

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

טבלת הסמלים בתוכניתסמלכוללת שורה עבור כל •

שמות משתנים, מחלקות, פונקציות, פרוצדורות, מתודות, –ועוד – תלוי בשפת התכנות

מידע רלוונטי לכל סמל•טיפוס )עבור משתנים, פונקציות(–ערך )עבור קבועים(–פרמטרים וטיפוסיהם )עבור פונקציות, פרוצדורות, מתודות(–וכדומה–

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

מהמידע גם בזמן ריצה "רגילה"חלק

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

למשל...

a = 2temp1 = a*2b = temp1 + 1

int a, b;a = 2;b = a*2 + 1;

aint

temp1int

bint

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

שימוש חוזר במרכיבי הקומפיילר

א ב שפה שפה שפהn

analysis 1 analysis n analysis 2

machine independent optimization

machine dependent optimization

code generation

machine dependent optimization

code generation

mמכונה 1מכונה

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

שימוש חוזר במרכיבי הקומפיילר – GCCלדוגמא בקומפיילר

Cfront end

C++front end

Fortranfront end

Javafront end

Adafront end

...

i386back end

s390back end

rs6000back end

sparcback end

armback end

...

Optimizer )'middle end'(

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

שימוש חוזר ברכיבים של מישהו אחר

כיום, שפות רבות "חוסכות" את הצורך לכתוב •optimizers טובים במיוחד לפלטפורמות

שונות.

, ומניחים שלכל Cפשוט מתרגמים את הקוד ל-• ראוי לשמו.Cפלטפורמה יש קומפיילר

–"cross-platform assembly"

הוא תהליך קומפילציה...Cגם תרגום לשפת •

גם כאן יש מקום לאופטימיזציות.•

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

קומפילר – מבנה סכמתי

תוכנית מקור

תוכנית מטרה

analysis

machine independent optimization

machine dependent optimization

code generation

front end

back end

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

front endשלב הניתוח –

תוכנית מקור

Back end

lexical analysis

syntax analysis

semantic analysis

token stream

syntax tree

decorated syntax tree

scanner

parser

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

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

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

Abstract Syntax Tree – AST

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

Decorated/Annotated AST

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

כפל משמעות

של הביטוי:ASTאיך נראה ה-•

9-5+2?

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

9-5+2כפל משמעות:

+

- 2

9 5

-

9 +

25

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

דקדוקים ומשמעויות

המשמעות ה"נכונה" נבחרת בהתאם לדקדוק•

פעמים רבות ניתן לכתוב את אותם הכללים •בעזרת דקדוקים חד-משמעיים או דו-משמעיים

נחשו מה עדיף.–

מציאותיות( לשפות מורכבות מאוד )קרי:•בדרך-כלל אין דקדוק חד-משמעי

או שהוא מורכב להחריד.–יש פתרונות אחרים לדו-משמעויות...–

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

שלב האופטימיזציה

Decorated Syntax Tree

Decorated Syntax Tree

machine independent optimization

דוגמאות•–constant propogation–common subexpression elimination–dead code elimination

איזון בין זמן קומפילציה לזמן ריצה•

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

back-end)שלב הסינתזה )

decorated syntax tree

decorated syntax tree

target program

target program

address assignment

code generation

machine dependent optimizationpeephole optimizer

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

, דוגמאback-endה- a = 2temp1 = a*2b = temp1 + 1

addressassignment

machine indep.optimization

machine-dependent

optimization

a0temp1 1

b2a = 2temp1 = a << 1b = temp1 + 1

SET R1,2STORE #0,R1LOAD R1,#0SHIFT R1,1STORE #1,R1LOAD R1,#1ADD R1,1STORE #2,R1

int a, b;a = 2;b = a*2 + 1;

SET R1,2STORE #0,R1SHIFT R1,1STORE #1,R1ADD R1,1STORE #2,R1

)front end(

codegeneration