Top Banner
1 הההה הההההההההה236360 הההה הההה"ה ההה הההההerez@cs ההה הההה – ההה ההה13:30-14:30 הההה528 ההההההה הההה ההההההה , הההההה הההההה ההה הההההה
35

1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

Dec 20, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

1

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

מרצה•פרופ"ח ארז פטרנק–

•erez@cs528 טאוב 13:30-14:30שעת קבלה – יום שני •

מתרגלים•, מתרגלת אחראיתקירה רדינסקי–חגי טולדנו–

Page 2: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

2

אדמיניסטרציה

http://webcourse.cs.technion.ac.il/236360 אתר:• - תרגילי בית25%•

תרגילים "יבשים", רשות )מגן(5%– תרגילים "רטובים", חובה20%–

- מבחן סוף הקורס75%•ציון נכשל במבחן גורר כשלון בקורס, ללא קשר לציון •

התרגילים. 236353אוטומטים ושפות פורמליות קדם:•מועד ג' למילואימניקים )בלבד(.•העתקות...•

Page 3: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

3

ספרות

ספר עיקרי•A.V. Aho, M. S. Lam, R. Sethi, and J.D. Ullman – “Compilers – Principles, Techniques, and Tools”, Addison-Wesley, 2007

ספר משני•R. Wilhelm, and D. Maurer – “Compiler Design”, Addison-Wesley, 1995

Page 4: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

4

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

K.D.Cooper and L.Torczon

“Engineering A Compiler”, Morgan Kaufmann, 2004

Page 5: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

5

פרס טיורינג

March 10, 2009:

ACM has named Barbara Liskov the recipient of the 2008 ACM A.M. Turing Award for her contributions to practical and theoretical foundations of programming language and system design.

Page 6: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

6

מורכבות

קומפילציה

שפות תכנות

הנדסת תכנה

מבנה מחשבים

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

אלגוריתמים

מבני נתונים

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

Page 7: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

7

קומפילציה )הידור( – מושגי יסוד

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

זמן ריצה•

compilersource program target program

target program

outputinput

Page 8: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

8

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

interpreter

source program

input

output

שימושים:שפות סקריפט שבהם כל שורה קוראת לביצוע של משהו מורכב )אין טעם ליעל(-( שבהן הנתונים מורכבים ואינם ידועים בעת הקומפילציהAPLשפות מאד גבוהות )-

Page 9: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

9

דוגמא למבנה מודרני חשוב - Java

source program

inputoutput

Translator )javac(

Intermediate program)bytecode(

Bytecode is standard,machine-independent

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

תוכנית על מנת שהמשך הביצוע יהיה מהיר . יותר

Java Virtual Machine

Virtual machine תלוי מכונה. מבצע טוב כפי -יכולתו על המכונה הנתונה.

Page 10: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

10

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

•Source to Source

•Virtual Machine

•Pre-processors

C ++ program C programtranslator

Java bytecodeJava program compiler

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

preprocessor

Page 11: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

11

שימושים של קופיילריםיעד

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 12: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

12

כלים נוספים לעיבוד שפה – דוגמא

Skeletal source program

Preprocessor

Source program

Target assembly program

Assembler

Relocateable machine code

Loader/Link-editor

Absolute machine code

compiler

Library, releasable, object files

איסוף מודולים, פתיחת מקרואים.

כתובות יחסיות, הפניות לספריה

:Linkכתובות יחסיות, לכל התוכנית

:Loadכתובות אבסולוטיות

Page 13: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

13

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

לפיתוח שמושים מתקדמים•ניצול של כלים לפיתוח קומפיילרים להקלת מאמץ –

הפיתוחאוטומטית של קבצי קלט קריאה )ו"הבנה"(–

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

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

Page 14: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

14

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

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

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

לתכנהמה הבנה מעמיקה מה יעשה קומפיילר )כלומר:–

תעשה כל תוכנה( עם החומרה שלכם

Page 15: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

15

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

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

קומפיילרים "פתוחים"

Page 16: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

16

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

Wilhelm and Maurer – Chapter 6

Aho, Sethi, and Ullman – Chapter 1

Cooper and Torczon – Chapter 1

Page 17: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

17

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

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 18: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

18

קומפיילר – חלוקה גסה

תוכנית מקור

תוכנית מטרה

analysis

code optimization

code generation

יצוג ביניים

ייצוג ביניים

Front End

Back End

Page 19: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

19

מרכיבי הקומפיילר – חלוקה עדינהCharacter Stream

Lexical Analyzer

Token Stream

Syntax Analyzer

Syntax Tree

Semantic Analyzer

Decorated Syntax Tree

Machine-IndependentCode Optimization

Intermediate Representation

Code Generator

Target Machine Code

Machine-Dependent Code Optimization

Intermediate Code Generator

Intermediate Representation

Target Machine Code

Page 20: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

20

Front Endמרכיבי הקומפיילר – Character Stream

Lexical Analyzer

Token Stream

Syntax Analyzer

Syntax Tree

Semantic Analyzer

Decorated Syntax Tree

Intermediate Code Generator

קל, טיפול בביטויים רגולריים

יותר מסובך, רקורסיבי, עבודהעם דקדוק חסר הקשר.

יותר מסובך, רקורסיבי, דורש עליה וירידה בעץ של הגזירה.

השטחת העץ. חלק האופטימיזציות נח לעשות על עץ, וחלק על קוד

Page 21: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

21

דוגמה לתפקידי החלקים

Page 22: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

22

דוגמה לתפקידי החלקים

Page 23: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

23

טבלת הסמלים

. שומר את identifierמבנה נתונים לכל •( ומאפשר גישה attributesהתכונות שלו )

מהירה..scope מיקום בזיכרון, טיפוס, לדוגמא:–הניתוח הטבלה נבנית במהלך הניתוח. למשל:–

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

וכיו"ב.

Page 24: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

24

הודעות שגיאה

חלק חשוב של תהליך הקומפילציה•

כל שלב מגלה שגיאות ברמת הניתוח שלו של •התוכנית.

מודיע על השגיאה–ומנסה כמיטב יכולתו להמשיך בקומפילציה–

Page 25: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

25

יתרון חשוב של מודולריות ...שפה בשפה א

analysis 1 analysis n analysis 2

machine independent optimization

machine dependent optimization

code generation

machine dependent optimization

code generation

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

Page 26: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

26

שפת ביניים

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

three-addressאנו נשתמש בצורה הנקראת •code שבה כל תא בזיכרון יכול לשמש פרמטר

לכל פעולה.

temp1 := inttoreal)60(temp2 := id3 * temp1temp3 := id2 + temp2id1 := temp3

Page 27: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

27

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

יצירת קוד הביניים נעשית בצורה אוטומטית. •

הקוד ניתן לשיפור•

temp1 := inttoreal)60(temp2 := id3 * temp1temp3 := id2 + temp2id1 := temp3

temp1 := id3 * 60.0id1 := id2 + temp1

Page 28: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

28

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

Decorated Syntax Tree

Decorated Syntax Tree

machine independent optimization

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

Page 29: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

29

אופטימיזציה

-שלם, לא ניתן NPלא ניתן לייצר קוד אופטימלי )•להכרעה, תלוי מה מנסים לעשות...(. לכן משתמשים

בהיוריסטיקות.חובה לשמור על נכונות; צריך לשפר )כמעט תמיד(; •

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

באופטימיזציה עבור ייעול תוכנית המטרה..JITהתשובה מאוד משתנה עבור –

Page 30: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

30

אופטימיזציה מודרנית

האתגר העיקרי הוא לנצל פלטפורמות מודרניות•–Multicores פקודות ווקטוריות–היררכית זיכרונות–(?Java Bytecodeהאם הקוד מועבר ברשת )–

Page 31: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

31

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

decorated syntax tree

decorated syntax tree

target program

target program

address assignmet

code generation

machine dependent optimizationpeephole optimizer

Page 32: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

32

(Code Generation)ייצור קוד

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

באיזה שלב של התוכנית?פעולות על רגיסטרים מהירות משמעותית מפעולות על –

הזיכרון.

השמה אופטימלית למקרה הגרוע ביותר היא קשה •(NP.היוריסטיקות מאד טובות קיימות ,)קשה-

Page 33: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

33

, דוגמא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

Page 34: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

34

כלים

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

כלים מיועדים לחסוך את החלק החוזר.•–Parser generators חלקם מתבססים על אלגוריתמים :

מורכבים.–Scanner generator)עבור ניתוח לקסיקאלי( –Syntax-directed translation engines מעבר על העץ

האבסטרקטי ויצירת קוד ביניים ממנו ע"י ביצוע פעולה על כל צומת.

–Data Flow Engines.עבור אופטימיזציה

Page 35: 1 תורת הקומפילציה 236360 מרצה –פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום שני 13:30-14:30 טאוב 528 מתרגלים –קירה רדינסקי,

35

לסיכום

קומפיילר מתרגם משפת מקור לשפת יעד )ובדרך •מספק בדיקת שגיאות חשובה(.

על מנת להקטין את הסיבוכיות התירגום מחולק •למודולים ברורים ונפרדים.

מביא את התוכנית לייצוג ביניים front-endשלב ה-•שנוח לעבוד איתו באופן אוטומטי.

מבצע אופטימיזציות ומייצר קוד של back-endשלב ה-•שפת המטרה.

.front-endבהמשך – נתחיל בהבנת ה-•