תורת הקומפילציה מרצה –ד"ר שירלי גינסברג...

27
הההה הההההההההה הההה ה"ה ההההה ההההההה[email protected] ההה הההה – ההה ה הה9:30-10:30 הההה318 ההההההה הההה ההההה , הההההה הההההה ההההה הההההה ה הההה הההה

Post on 21-Dec-2015

263 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

מרצה•ד"ר שירלי גינסברג–

[email protected] טאוב 9:30-10:30ני שעת קבלה – יום ש•

מתרגלים•, מתרגלת אחראיתרותם אושמן–ץסיוון ברקובי–אלכס קוגן–

Page 2: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

לוגיסטיקה

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

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

ציון נכשל במבחן גורר כשלון בקורס, ללא קשר •לציון התרגילים.

Page 3: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

ספרות

ספר עיקרי•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 4: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

K.D.Cooper and L.Torczon

“Engineering A Compiler”, Morgan Kaufmann, 2004

Page 5: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

קומפילציה

תכנות שפות

תכנה הנדסת

מחשבים מבנה

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

אלגוריתמים

נתונים מבני

Page 6: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

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

זמן ריצה•

compilersource program target program

target program

outputinput

Page 7: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

יעד ,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 8: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

ההקשר הרחב – דוגמא

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 9: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

interpreter

source program

input

output

Page 10: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

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

Javaמנת שהמשך הביצוע יהיה מהיר יותר. דוגמא: •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: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

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

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

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

Page 12: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

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

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

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

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

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

Page 13: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

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

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

Page 14: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

Wilhelm and Maurer – Chapter 6

Aho, Sethi, and Ullman – Chapter 1

Cooper and Torczon – Chapter 1

Page 15: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

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 16: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

תוכנית מקור

תוכנית מטרה

analysis

code optimization

code generation

" הלב"

יצוג ביניים

ביניים יי צוג

Page 17: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

תוכנית מקור

תוכנית מטרה

analysis

machine independent optimization

machine dependent optimization

code generation

" הלב"

front end

back end

Page 18: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

א ב שפה ...שפה

analysis 1 analysis n analysis 2

machine independent optimization

machine dependent optimization

code generation

machine dependent optimization

code generation

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

Page 19: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

בקומפיילרים רבים השלבים במסומנים בקו מרוסק משולבים זה בזה•decorated syntax treeבקומפיילרים רבים ייצוג הביניים הוא •

תוכנית מקור

תוכנית מטרה

lexical analysis

screening

syntax analysis

semantic analysis

symbol string

token string

syntax tree

decorated syntax tree

scanner

screener

parser

Page 20: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם
Page 21: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

Page 22: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

Abstract Syntax Tree – AST

Page 23: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

Decorated/Annotated AST

Page 24: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

מבנה הקומפיילר

Page 25: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

Decorated Syntax Tree

Decorated Syntax Tree

machine independent optimization

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

Page 26: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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

decorated syntax tree

decorated syntax tree

target program

target program

address assignmet

code generation

machine dependent optimizationpeephole optimizer

Page 27: תורת הקומפילציה מרצה –ד"ר שירלי גינסברג shirleyh@cs.technion.ac.il שעת קבלה – יום שני 9:30-10:30 טאוב 318 מתרגלים –רותם

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