236360 תורת הקומפילציה *
DESCRIPTION
236360 תורת הקומפילציה *. * הידור, למהדרין. שקפי הקורס מבוססים על שקפים מאת פרופ' מיכאל רודה. תורת הקומפילציה. מרצה מר טל כהן [email protected] לכלול את המלה " compilation " בכותרת ההודעה אחרת אין לכם סיכוי לעבור את מסנני הזבל שלי. שעת קבלה – בתיאום מראש בלבד, בחדר 507 מתרגלים - PowerPoint PPT PresentationTRANSCRIPT
236360*תורת הקומפילציה
הידור, למהדרין.*
שקפי הקורס מבוססים על שקפים מאת פרופ' מיכאל רודה.
תורת הקומפילציה
מרצה•מר טל כהן–
•[email protected]" בכותרת ההודעהcompilationלכלול את המלה "•
אחרת אין לכם סיכוי לעבור את מסנני הזבל שלי.–
507שעת קבלה – בתיאום מראש בלבד, בחדר •
מתרגלים•, מתרגל אחראיץסיוון ברקובי–שחר דג–אלכס קוגן–
לוגיסטיקה
- תרגילי בית25%• תרגילים "יבשים", רשות )מגן(5%– תרגילים "רטובים", חובה20%–
-- מבחן סוף הקורס75%•
ציון נכשל בתרגילים הרטובים גורר כשלון •בקורס, ללא קשר לציון המבחן.
ציון נכשל במבחן גורר כשלון בקורס, ללא קשר •לציון התרגילים.
ספרות
ספר עיקרי•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
ספרות-המשךספר נוסף•
K.D.Cooper and L.Torczon
“Engineering A Compiler”, Morgan Kaufmann, 2004
הידור – נושא מורכב
קומפילציה
תכנות שפות
תכנה הנדסת
מחשבים מבנה
הפעלה מערכותפורמליות שפות
אלגוריתמים
נתונים מבני
הידור – מושגי יסוד
זמן קומפילציה•
זמן ריצה•
compilersource program target program
target program
outputinput
שיטות הידור – שימושים
יעד ,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שפות לתאור חומרה )•שפות בקרה•
ההקשר הרחב – דוגמא
Skeletal source program
Preprocessor
Source program
Target assembly program
Assembler
Relocateable machine code
Loader/Link-editor
Absolute machine code
compiler
Library, releasable, object files
שרשרת כלים
אינטרפרטציה = פרשנות
interpreter
source program
input
output
הידור / אינטרפרטציה – הכללות
•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, macros)
preprocessor
קומפילציה – חשיבות התחוםלפיתוח שמושים מתקדמים•
ניצול של כלים לפיתוח קומפיילרים להקלת מאמץ הפיתוח–כל מה שצריך לקרוא קובץ קלט )קבצי קונפיגורציה ואילך(–
למפתחי תוכנה•הבנה מעמיקה של האבחנה בין זמן קומפילציה לזמן ריצה–הבנה מעמיקה מה יעשה קומפיילר עם התוכנה שלכם–
)שיפור ריצתה, התראת שגיאותיה(שימוש נכון במבנים שונים של שפות התכנות–ניצול נכון של ארכיטקטורת המחשב–
קומפילציה – חשיבות התחום
לאנשי שפות תכנות•תמיכה יעילה בשפה חדשה–
לאנשי ארכיטקטורה של מחשבים•הבנה טובה של האיזון העדין שבין חומרה –
לתכנהמה הבנה מעמיקה מה יעשה קומפיילר )כלומר:–
תעשה כל תוכנה( עם החומרה שלכם
לסטודנטים בפקולטה למדעי המחשב•חובה להשלמת התואר–
תורת הקומפילציה – תכנים עיקריים
עקרונות•מבנה הקומפיילר•(lexical analysisניתוח מילוני )•(parsingניתוח תחבירי )•ניתוח סמנטי•יצירת קוד•נושאים מתקדמים:•
אופטימיזציה–ניתוח סטטי––Data-flow analysisVirtual Machines ו-Just-In-Timeקומפיילרים –קומפיילרים "פתוחים"–
קומפיילר של...
סקירה זריזה של שפות תכנות עיקריות
למימוש שפה בבחירת שיקוליםהשימוש • תחום
המתאימה – למשימה הנכון הכלי–" טובה " הכי השפה אין
התוכנה • יעילותהפיתוח • משך
כתיבת התכנית–הידור, בדיקה, וניפוי טעויות–)לימוד, אימון(–
תחזוקה•קריאות התכנית–
קודמים • מימושים זמינות•)? עצלות ) אינרציה
FORTRAN, 1954-58, John Backus )IBM(
תחום: חישוב מדעי•אפיונים•
ביטויים אריתמטיים–מערכים חסומים–פרוצדורות––common blocks – call by referenceקלט / פלט –
מודל מימוש•דרישות שטח קבועות מראש–דגש על אופטימיזציה של חישובים נומריים–
עדיין בשימוש•
ALGOL 60, 57-60 Committee )Backus, McCathy, Naur, …(
תחום: חישוב נומרי•אפיונים•
BNFהוגדר בקפידה – התחביר הוגדר ע"י –מבנה בלוקים–פרוצדורות רקורסיביות–הגדרה מפורשת של טיפוסים–scopingחוקי – by name & ו-by valueהעברת פרמטרים ––dynamic array bounds
שימושים•מעט, בעיקר באירופה–
השפעה רבה על התחום )על שפות מאוחרות יותר(•
Pascal etc., 1971 )Niklaus Wirth(
תחום: חישובים כללים, חינוך•אפיונים•
פשטות במימוש ובשפה–הגדרות של טיפוסים רבים–מתודולוגיה של תכנות מובנה–מתאים להוכחת נכונות של תכניות–
דיאלקטים שונים•–Modula-2 1970-81–Oberon, Oberon-2 1988-90, 1992–Modula-3 1988-89
COBOL, 1959-61)DoD-led committee(
תחום: עבוד נתונים•אפיונים•
תיאור ניפרד לנתונים–recordsמבנה נתונים של –תיאור קבצים ופעולות עליהם–תחביר דמוי אנגלית–
עדיין בשימוש נרחב•
C, 1972-1974, Dennis Ritchie )Bell Labs(
Unix kernelתחום: תכנות מערכות )תכנות ה- •והשירותים הנלווים(
אפיונים•כר נרחב של פעולות–תחביר תמציתי–תמיכה בגישה למשאבי המכונה–
בשימוש נרחב בכל תחום כמעט•שפה פופולרית מאוד•
C++, 1980-, Bjarne Stroustrup
תחום: תכנות מערכות אבל גם פיתוח יישומים•אפיונים•
Cהרחבה של – abstractתמיכה עבור טיפוסים אבסטרקטיים )–
data types)מונחת עצמים–שפה עשירה ומסובכת–
בשימוש נרחב•יותר נזק מתועלת?•
Java, 1995-, Arnold & Gosling )Sun(
תחום: מגוון רחב של שימושים, עם דגש על •ניצול תשתיות תקשורת
אפיונים• garbageניהול אוטומטי של הזכרון )–
collection)(JVMאי-תלות בחומרה )–
בשימוש נרחב•
LISP, 1959-60, John McCarthy )MIT(
תחום: בינה מלאכותית וחישובים סימבוליים•אפיונים•
(list processingעיבוד רשימות )–תחביר פשוט–תכניות יכולות בקלות לנתח תכניות אחרות–טיפוסים דינאמיים–יכולות מאקרו אמיתיות–
( Common Lisp, Schemeוריאציות רבות )•
Prolog, 1972, Colmerauer and Kowalski
שפת תכנות "לוגית"•
היוותה בסיס למחקר נרחב•פרוייקט "הדור החמישי" ביפן–SQLמסדי נתונים רלציוניים, –
בשימוש מועט•
Datalogהובילה לשפות לוגיות אחרות – כגון •
JTLפרויקט טכניוני: שפת •
מבנה הקומפיילר – תמונה כללית
Wilhelm and Maurer – Chapter 6
Aho, Sethi, and Ullman – Chapter 1
Cooper and Torczon – Chapter 1
קומפיילר – כקופסא שחורה
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
קומפילר – מבנה סכמתי
תוכנית מקור
תוכנית מטרה
analysis
code optimization
code generation
האמיתי בעולם הקשה החלק
טבלת סמלים ייצוג ביניים +
ביניים ייצוג
" " בקורס לסטודנטים קשה ה החלק
ייצוג ביניים
הניתוח מייצר קוד בשפה נמוכה מאוד•מכילה בד"כ רק השמה, אריתמטיקה )פעולה אחת –
( וקפיצה מותניתgotoבשורה!(, קפיצה )
משמשת כבסיס לייצור קוד מכונה•
כל שורה מכילה פקודה אחת•
אין ביטויים מורכבים•
טבלת הסמלים בתוכניתסמלכוללת שורה עבור כל •
שמות משתנים, מחלקות, פונקציות, פרוצדורות, מתודות, –וכו' – תלוי בשפת התכנות
מידע רלוונטי לכל סמל•טיפוס )עבור משתנים, פונקציות(–ערך )עבור קבועים(–פרמטרים וטיפוסיהם )עבור פונקציות, פרוצדורות, מתודות(–וכו'–
קיים בעיקר בזמן הקומפילצייה•, אוde-buggingקיים בזמן ריצה רק למטרות –( יש Java, C#, Eiffel )כגון Reflectionבשפות עם מנגנוני –
מהמידע גם בזמן ריצה "רגילה"חלק
למשל...
a = 2temp1 = a*2b = temp1 + 1
int a, b;a = 2;b = a*2 + 1;
aint
temp1int
bint
שימוש חוזר במרכיבי הקומפיילר
א ב שפה שפה שפהn
analysis 1 analysis n analysis 2
machine independent optimization
machine dependent optimization
code generation
machine dependent optimization
code generation
mמכונה 1מכונה
…
שימוש חוזר במרכיבי הקומפיילר – 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'(
שימוש חוזר ברכיבים של מישהו אחר
כיום, שפות רבות "חוסכות" את הצורך לכתוב •optimizers טובים במיוחד לפלטפורמות
שונות.
, ומניחים שלכל Cפשוט מתרגמים את הקוד ל-• ראוי לשמו.Cפלטפורמה יש קומפיילר
–"cross-platform assembly"
הוא תהליך קומפילציה...Cגם תרגום לשפת •
גם כאן יש מקום לאופטימיזציות.•
קומפילר – מבנה סכמתי
תוכנית מקור
תוכנית מטרה
analysis
machine independent optimization
machine dependent optimization
code generation
front end
back end
front endשלב הניתוח –
תוכנית מקור
Back End
lexical analysis
syntax analysis
semantic analysis
token stream
syntax tree
decorated syntax tree
scanner
parser
אנליזה של ביטוי
Abstract Syntax Tree – AST
Decorated/Annotated AST
כפל משמעות
של הביטוי:ASTאיך נראה ה-•
9-5+2?
כפל משמעות
+
- 2
9 5
-
9 +
25
דקדוקים ומשמעויות
המשמעות ה"נכונה" נבחרת בהתאם לדקדוק•
פעמים רבות ניתן לכתוב את אותם הכללים •בעזרת דקדוקים חד-משמעיים או דו-משמעיים
נחשו מה עדיף.–
מציאותיות( לשפות מורכבות מאוד )קרי:•בדרך-כלל אין דקדוק חד-משמעי
או שהוא מורכב להחריד.–יש פתרונות אחרים לדו-משמעויות...–
שלב האופטימיזציה
Decorated Syntax Tree
Decorated Syntax Tree
machine independent optimization
דוגמאות•–constant propogation–common subexpressions–dead code elimination
איזון בין זמן קומפילציה לזמן ריצה•
back-endשלב הסינתזה ))
decorated syntax tree
decorated syntax tree
target program
target program
address assignment
code generation
machine dependent optimizationpeephole optimizer
, דוגמא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