אתר הקורס http://www.cs.technion.ac.il/~cs236360 איתן אביאור תורת הקומפילציה 2 ספרות איתן אביאור תורת הקומפילציה 3 איתן אביאור תורת הקומפילציה 4 מהדר ( )Compiler • תוכנית תרגום ( )translation תוכניות משפת מקור ( )source language לשפת מטרה ( )target language • תוצר.
Download
Report
Transcript אתר הקורס http://www.cs.technion.ac.il/~cs236360 איתן אביאור תורת הקומפילציה 2 ספרות איתן אביאור תורת הקומפילציה 3 איתן אביאור תורת הקומפילציה 4 מהדר ( )Compiler • תוכנית תרגום ( )translation תוכניות משפת מקור ( )source language לשפת מטרה ( )target language • תוצר.
אתר הקורס
http://www.cs.technion.ac.il/~cs236360
איתן אביאור
תורת הקומפילציה
2
ספרות
איתן אביאור
תורת הקומפילציה
3
איתן אביאור
תורת הקומפילציה
4
מהדר ()Compiler
• תוכנית תרגום ( )translationתוכניות
משפת מקור ()source language
לשפת מטרה ()target language
• תוצר נוסף :הודעות שגיאה ()error messages
תוכנית מטרה
()target program
מהדר
()compiler
תוכנית מקור
()source program
הודעות שגיאה
()error messages
איתן אביאור
תורת הקומפילציה
5
מגוון
•
•
•
•
שפות תכנות עיליות ,Fortran ,Pascal ,Java ,C++ ,C :ועוד ...
שפות מטרה :שפות עליות אחרות ,שפות ביניים ,שפות סף ,שפות
מכונה ,צורן ( ,)siliconועוד ...
שיטות :חד-מעברי ( ,)one-passרב-מעברי (.)multi-pass
ייעוד :טעינה והרצה ( ,)load-and-goניפוי (,)debugging
אופטימיזציה ,ועוד ...
הודעה
משמחת:
איתן אביאור
לכולם טכניקות בסיסיות דומות
תורת הקומפילציה
6
הקלט למהדר
• שפות תכנותPerl ,Fortran ,Pascal ,C :
• שפות לעיבוד הטקסטTeχ ,html ,Postscript :
• שפות פקודותC-shell ,emacs :
• שפות שאילתה (לעיבוד נתונים)SQL :
• שפות לתיאור חומרהVHDL :
• שפות בקרה
איתן אביאור
תורת הקומפילציה
7
פלט המהדר
• קוד מכונהPDP/11 ,MIPS ,IA32 :
• שפת סףPDP/11 ,MIPS ,IA32 :
• שפת בינייםByte-code (java) ,P-code (Pascal) :
• שפות עיבוד טקסטPostScript ,dvi (Teχ) :
• תוכנה לשליטה ובקרה על מכשירים
איתן אביאור
תורת הקומפילציה
8
ניתוח וחיבור
()Analysis and Synthesis
• ניתוח ( ─ )analysisפירוק תוכנית המקור לגורמים
ויצירת ייצוג ביניים של התוכנית.
• חיבור ( ─ )synthesisיצירת תוכנית המטרה מתוך
ייצוג הביניים.
איתן אביאור
תורת הקומפילציה
9
תוצרי הניתוח
• נתון הפסוק הבא:
position := initial + rate * 60
• תוצר אפשרי של שלב הניתוח עשוי להיות עץ תחביר ()syntax tree
המייצג את ניתוח התחביר של הפסוק:
=:
+
*
60
איתן אביאור
position
initial
rate
תורת הקומפילציה
10
כלי תוכנה נוספים
המבצעים ניתוח תוכניות
.1עורך ()structure editor
.2מדפיס מסודר ()pretty printer
.3בודק סטטי ()static checker
.4מפרש ()interpreter
.5ניתוח חתימה
.6ערבול
איתן אביאור
תורת הקומפילציה
11
מהדרים מיוחדים
.1מעבד תמלילים ()text formatter
.2מהדר צורן ()silicon compiler
.3מפרש שאילתות ()query interpreter
איתן אביאור
תורת הקומפילציה
12
ההקשר של מהדר
שלד תוכנית מקור
קדם מעבד ()preprocessor
תוכנית מקור
מהדר ()compiler
תוכנית סף -מטרה
מאסף ()assembler
קוד מכונה
ספריות שגרות
איתן אביאור
קשר ()linker
להרצה
תורתתוכנית
הקומפילציה
13
ניתוח תוכנית המקור
• ניתוח לקסיקאלי ()lexical analysis
• ניתוח תחביר ()syntax analysis
• ניתוח משמעות ()semantic analysis
איתן אביאור
תורת הקומפילציה
14
ניתוח לקסיקאלי
()Lexical Analysis
• ניתוח קווי ( )linear analysisהמפרק את התוכנית
לזרם של תמניות ()stream of tokens
• תמנית ( ─ )tokenהרחבה של מושג המלה בשפה:
– מלת מפתח ()keyword
– מזהה ()identifier
– קבוע
– אופרטור
– מפריד ()separator
– מסיים ()delimiler
– ועוד ...
איתן אביאור
תורת הקומפילציה
15
דוגמה− ניתוח לקסיקאלי
position := initial + rate 60
position
:=
initial
+
rate
60
הפסוק
:מתפרק ל
(identifier)
(assignment operator)
(identifier)
(operator)
(identifier)
(operator)
(integer constant)
נעלמים בד"כ− ' סוף שורה וכד, טבולטור, רווח:התווים הלבנים
16
תורת הקומפילציה
איתן אביאור
ניתוח התחביר
()Syntax Analysis
• ניתוח היררכי ( )hirarchial analysisהמייצר או סורק
מבנה נתונים (בד"כ עץ) המייצג את ניתוח הפסוק
(או התוכנית כולה) לפי הגדרת השפה
• נקרא גם פריסה ()parsing
• אחד המבנים המקובלים לייצוג תוצר הניתוח הינו
עץ פריסה ()parse tree
• לא תמיד נוצר מבנה נתונים או עץ בפועל .לעיתים נוצר
פלט הנראה כאילו נוצר מסריקה של מבנה נתונים כנ"ל
איתן אביאור
תורת הקומפילציה
17
דוגמה− ניתוח התחביר
הפסוק
position := initial + rate * 60
:ואשר פורק לזרם התמניות דלעיל מיוצג ע"י עץ הפריסה
assignment
statement
identifier
position
18
:=
expression
+
expression
expression
identifier
expression
initial
identifier
number
rate
60
תורת הקומפילציה
expression
איתן אביאור
ניתוח התחביר −המשך הדוגמה
או ע"י עץ התחביר (:)syntax tree
=:
+
*
60
איתן אביאור
position
initial
rate
תורת הקומפילציה
19
ניתוח לקסיקאלי וניתוח התחביר
ניתוח התחביר משתמש בהגדרות שפה רקורסיביות ואילו
הניתוח הלקסיקאלי משתמש בהגדרות יותר פשוטות.
בד"כ הקו המפריד בין שני השלבים יהיה המקום בו
נכנסות ההגדרות הרקורסיביות של השפה.
איתן אביאור
תורת הקומפילציה
20
ניתוח משמעות
)Semantic Analysis(
• הבנת המשמעות של התוכנית ובדיקת נכונותה
)(עד רמה מסוימת כמובן
)type checking( • חלק חשוב בשלב זה הינו בדיקת טיפוסים
יתורגם באופן שונה ע"פ טיפוסי הנתוניםalpha += beta הביטוי
.beta- וalpha של
int alpha;
int beta;
add beta, alpha
21
float alpha;
float beta;
float alpha;
int beta;
addf beta, alpha
cvtif beta, f0
addf f0, alpha
תורת הקומפילציה
int alpha[2];
int beta(int, float);
error
איתן אביאור
דוגמה− ניתוח משמעות
:=
position
+
initial
:=
position
rate
+
initial
rate
*
60
*
inttoreal
60
22
תורת הקומפילציה
איתן אביאור
שלבים− מבנה המהדר
lexical analyser
מנתח לקסיקאלי
syntax analyser
מנתח תחביר
semantic analyser מנתח משמעות
מנהל סמלים
symbol manager
23
מייצר קוד ביניים
intermediate code generator
code optimizer
מייעל קוד
code generator
מייצר קוד
תורת הקומפילציה
מטפל שגיאות
error handler
איתן אביאור
מבנה המהדר −צדדים
צד קדמי
front end
מנתח לקסיקאלי
lexical analyser
מנתח תחביר
syntax analyser
כל מה שאיננו
קשור או תלוי
בשפת מטרה
מנתח משמעות semantic analyser
מייצר קוד ביניים
intermediate code generator
מטפל שגיאות
error handler
צד אחורי
back end
איתן אביאור
מייעל קוד
code optimizer
מייצר קוד
code generator
תורת הקומפילציה
מנהל סמלים
symbol manager
מה שקשור או תלוי
בשפת מטרה
24
טבלת סמלים
()Symbol Table
מכילה רשימה עבור כל סמל המוגדר בתוכנית המייצג ישות כגון:
– משתנים
– קבועים בעלי שם
– פונקציות
– אובייקטים
– ועוד...
הרשומה מכילה את כל המידע הנחוץ לגבי אותה ישות.
הישויות מיוצגות במבני הנתונים האחרים של המהדר ע"י הפניה
למיקום הסמל בטבלת הסמלים:
… 1 position
…
2 initial
id1 position
…
3 rate
id2 initial
id3 rate
איתן אביאור
תורת הקומפילציה
25
ניתוח וחיבור
ניתוח
()analysis
מנתח לקסיקאלי
lexical analyser
מנתח תחביר
syntax analyser
מנתח משמעות semantic analyser
מייצר קוד ביניים
intermediate code generator
מייעל קוד
חיבור
()synthesis
איתן אביאור
מייצר קוד
code optimizer
עשוי להכיל
ניתוח נוסף
code generator
תורת הקומפילציה
26
תוצר שלב הניתוח
=:
+
60
id1
id2
=:
id3
+
num 60
איתן אביאור
תורת הקומפילציה
id 1
id 2
id 3
27
ייצור קוד ביניים
()Intermidiate Code Generation
קוד הביניים עשוי להיות מיוצג בשיטות שונות.
ביטויים אריתמטים עשוים להיות מיוצגים ע"י
הוראות משולשות (.)three address code
dest := src1 op src2
איתן אביאור
תורת הקומפילציה
28
דוגמה− קוד ביניים
position := initial + rate * 60
:הפסוק
:=
:לעץ התחביר
position
+
initial
*
rate inttoreal
שנותח
60
temp1
temp2
temp3
id1
29
:=
:=
:=
:=
inttoreal(60)
id3 * temp1
id2 + temp2
temp3
תורת הקומפילציה
:ייוצג ע"י
איתן אביאור
ייעול ()Optimization
מטרתו לפשט את התוכניות במספר מימדים:
– גודל הקוד הנוצר
– זמן הריצה
– השימוש במשאבים (זיכרון ,אוגרים וכו')
חלקו בלתי תלוי בשפת המטרה,
וחלקו תלוי בשפת המטרה ו/או במכונת המטרה (:)target machine
– מספר האוגרים
– אוסף ההוראות
– הוראות מיוחדות
– צינור ()pipeline
– ועוד ...
לעיתים נעשה חלק מהאופטימיזציה גם לאחר שלב ייצור קוד המטרה
איתן אביאור
תורת הקומפילציה
30
דוגמה− ייעול
temp1
temp2
temp3
id1
:=
:=
:=
:=
inttoreal(60)
id3 * temp1
id2 + temp2
temp3
temp1 := id3 * 60.0
id1
:= id2 + temp1
31
תורת הקומפילציה
איתן אביאור
ייצור קוד
()Code Generation
מייצר את תוכנית המטרה באחד (או יותר) מאלה:
– שפה עילית אחרת
– שפת סף
– שפת מכונה
דוגמה בשפות סף
מכונת 3כתובות עם פעולות
אריתמטיות בין תאי זיכרון
mulf3 #60.0, id3, r2
addf3 id2, r2, id1
איתן אביאור
תורת הקומפילציה
מכונת 2כתובות עם פעולות
אריתמטיות בין אוגרים
id3, r2
#60.0, r2
id2, r1
r2, r1
r1, id1
movf
mulf
movf
addf
movf
32
עזרים לבניית מהדר
תוכניות עזר לבניית מהדרים מתוך הגדרות פורמאליות של
שפת המקור ו/או שפת מטרה.
נקראות בשמות כגון:
• compiler−compile
• compiler−generator
• translator−writing system
איתן אביאור
תורת הקומפילציה
33
עזרים לבנית מהדר −המשך
.1
.2
.3
.4
.5
מייצר פורס ( ─ )parser generatorמתוך דקדוק חסר הקשר
מייצר סורק ( ─ )scanner generatorמתוך ביטויים רגולריים
מנוע תרגום מונחה תחביר
( ─ )syntax directed translation engineמייצר שגרות
העוברות על עץ הפריסה ומייצרות קוד
מייצר קוד אוטומטי ( ─ )automatic code generatorמתוך אוסף
כללים לתרגום ההוראות של קוד ביניים עושה שימוש בטכניקה של
השוואת תבניות ()template matching
מנוע זרימת מידע ( ─ )data-flow engineמנתח את זרימת
המידע בתוכנית ע"מ לאפשר אופטימיזציות מתקדמות.
איתן אביאור
תורת הקומפילציה
34
תום פרק 1
איתן אביאור
תורת הקומפילציה
35