Post on 07-Jan-2016
description
1תורת הקומפילציהאיתן אביאור
2תורת הקומפילציהאיתן אביאור
ניתוח(analysis)
חיבור(synthesis)
syntax analyserמנתח תחביר
semantic analyserמנתח משמעות
מייצר קוד ביניים intermediate code generator
code optimizerמייעל קוד
code generatorמייצר קוד
lexical analyserמנתח לקסיקאלי
תרגום – ניתוח המשמעות
semantic analyserמנתח משמעות
3תורת הקומפילציהאיתן אביאור
חוקי משמעות(Semantic Rules)
ערכים המוצמדים לסמלי הדקדוק (attributesתכונות )
הכללים הקובעים איך (semantic rulesחוקי משמעות )מחשבים ערכי תכונות מתוך ערכים של תכונות אחרות
שיטות לרישום כללי משמעות וקשירתם לכללי הגזירה
(syntax directed definitionsהגדרות מונחות תחביר )1.
(translation schemesסכימות תרגום )2.
4תורת הקומפילציהאיתן אביאור
המהלך הכלליפריסת זרם התמניות•בנית עץ הפריסה•מעבר על העץ לחישוב חוקי המשמעות•
לא תמיד יש לבצע בפועל את כל השלבים האלו, וישנם קיצורי •דרך.
זרםהתמניות
עץהפריסה
גרףתלויות
סדר חישובכללי המשמעות
5תורת הקומפילציהאיתן אביאור
הגדרות מונחות תחביר(Syntax Directed Definitions)
לכלל גזירה מוצמדים מספר חוקי משמעות מהצורהb = f )c1, c2, . . . ck(
הם תכונות של סמלי הדקדוק המשתתפים בכלל ci ו-bכאשר הגזירה
היא תכונה של b (synthesized attributeתכונה מורכבת )• תכונות של הסמלים ciהסמל בצד שמאל של כלל הגזירה ו-
בצד הימניהתכונה של צומת בעץ פריסה תלויה בתכונות הבנים שלו–
היא תכונה של אחד b (inherited attributeתכונה נורשת )• תכונות של הסמל בצד ciהסמלים בצד ימין של כלל הגזירה ו-
שמאל ו/או סמלים בצד הימניהתכונה של צומת בעץ הפריסה תלויה בתכונות ההורה ו/או –
האחים שלו
6תורת הקומפילציהאיתן אביאור
המשךפונקציה של חוק משמעות נרשמת בד"כ כביטוי•( כגון:side effectsלעיתים יש צורך בתוצאות נלוות )•
שינוי ערכי משתנים גלובלים–יצירת פלט–
במקרים כאלה ניתן לדמות כאילו הפעולה הינה חוק המגדיר את ( של הסמל בצד שמאל של dummyערכיה של תכונה סתמית )
כלל הגזירהלטרמינלים יש רק תכונות מורכבות שאת הערכים שלהם קובע •
המנתח הלקסיקאלילסמל ההתחלה יש בד"כ רק תכונות מורכבות )אלא אם נאמר •
במפורש אחרת(הגדרת משמעות S )S-attributed definition( הגדרה של תכונות-
באמצעות חוקים שבהם כל התכונות הינן מורכבות )ולא נורשות(
7תורת הקומפילציהאיתן אביאור
עץ פריסה מעוטר/מקושט(Annotated/Decorated Parse Tree)
עץ פריסה בו רושמים לצד כל צומת בעץ את ערכי התכונות של אותו צומת
כלל גזירה כלל משמעות קלט עץ מעוטר
E d1 + d2 E.val := d1.val + d2.val 7 + 5 E.val = 12
d1.val = 7 d2.val = 5+
8תורת הקומפילציהאיתן אביאור
דוגמה להגדרות מונחות תחביר עם תכונות מורכבות
כלל גזירה חוקי משמעות
L E n print ) E.val (
E E1 + T E.val := E1.val + T.val
E T E.val := T.val
T T1 F T.val := T1.val F.val
T F T.val := F.val
F ( E ) F.val := E.val
F digit F.val := digit.lexval
9תורת הקומפילציהאיתן אביאור
דוגמה לעץ מעוטר של תכונות מורכבות
5 + 4 n 3 הקלט
Lעץ הפריסה המעוטר
nE.val = 19
+E.val = 15 T.val = 4
T.val = 15
digit.lexval = 4T.val = 3 F.val = 5
F.val = 3
digit.lexval = 3
digit.lexval = 5
F.val = 4
10תורת הקומפילציהאיתן אביאור
דוגמה להגדרות מונחות תחביר עם הגדרות נורשות
כלל גזירה חוקי משמעות
D T L
T int
T real
L L1, id
L id
L.in := T.type
T.type := integer
T.type := real
L1.in := L.inaddtype ) id.entry, L.in (
addtype ) id.entry, L.in (
11תורת הקומפילציהאיתן אביאור
דוגמה לעץ מעוטר של תכונות נורשות
D
T.type = real
real
L.in = real
L.in = real , id3
L.in = real , id2
id1
realהקלט id1 , id2 , id3
12תורת הקומפילציהאיתן אביאור
גרף תלויות(Dependency Graph)
גרף שבו:תכונות של הצמתים בעץ הפריסההצמתים:התלות של תכונה א' בתכונה ב'קשתות:
אופן הבניה בעץ הפריסהnלכל צומת צמתים
n של סמל הדקדוק בצומת a לכל תכונה n.aבנה בגרף התלויות צומת עבור
בעץ הפריסהn לכל צומת קשתות )b = f)c1,c2, … ck לכל כלל משמעות מהצורה
n שקשור לכלל הגזירה שיצר את הצומת [k..1 בתחום ]iלכל
b לצומת ci בנה בגרף התלויות קשת מהצומת
13תורת הקומפילציהאיתן אביאור
דוגמאות לגרף תלויותדוגמה א'דוגמה א'
כלל גזירה
E E1 + E2
כלל משמעות
E.Val := E1.val + E2.val
גרף תלויות
דוגמה ב'דוגמה ב'
של העץ המעוטר גרף התלויות
עם תכונות נורשות
5
7
9
L
L
L
D
T
real
id1
id2
id3,
,
6
8
10
4type
in
in
in
E
E1 E2
+
val
val valentry2
1 entry
3entry
14תורת הקומפילציהאיתן אביאור
סדר חישוב המשמעותבניית עץ הפריסה המעוטר ע"פ הדקדוק1.
בניית גרף התלויות2.
מציאת מיון טופולוגי של גרף התלויות3.
חישוב התכונות לפי סדר המיון הטופולוגי4.
15תורת הקומפילציהאיתן אביאור
שיטות לחישוב המשמעות( parse-tree methodsשיטות עץ פריסה )1.
בזמן ההידור נבנה עץ הפריסה מעוטר וממנו גרף תלויות,ואז מחושב המיון הטופולוגי
(rule-based methodsשיטות המבוססות על חוקים )2.בזמן בנית המהדר מנותחים )ידנית או אוטומטית( חוקי
המשמעות המקושרים עם כללי הגזירה ולכל כלל גזירה נקבע מראש סדר חישוב חוקי המשמעות הקשורים אליו
(oblivious methodsשיטות מתעלמות )3.סדר חישוב המתעלם מחוקי המשמעות עצמם
לפי סדר השימוש בכללי הגזירה()למשל מגביל את אוסף ההגדרות מונחות הדקדוק שניתן ליישם –
בשיטה זו
16תורת הקומפילציהאיתן אביאור
(Syntax Treeעץ תחביר )עץ המשקף את המבנה ההיררכי (syntax treeעץ תחביר )
של השפה
דחוס יותר מעץ פריסה• בעלים אין מופיעים אופרטורים או מילות מפתח והם מוכלים•
בצומת שהיה ההורה שלהם אילו הופיעו( מסולקות מהעץX Yגזירות יחידות )•
S if B then S1 else S2 if-then-else
B S1 S2
17תורת הקומפילציהאיתן אביאור
דוגמה לעץ תחביר 5 + 4 n 3הקלט:
עץ תחבירעץ פריסה
+
4
53
L
nE.val = 19
+E.val = 15 T.val = 4
T.val = 15
digit.lexval = 4T.val = 3 F.val = 5
F.val = 3
digit.lexval = 3
digit.lexval = 5
F.val = 4
18תורת הקומפילציהאיתן אביאור
בניית עץ תחביר לביטוייםכל צומת בעץ התחביר מיוצג ע"י רשומה בעלת מספר שדות
של הרשומה(labelתווית ) מכונה סוג הצומת או האופרטור •מחוונים לצמתי הבנים•ערכים )בצמתי עלים(•
פונקציות המחזירות מחוון לצומת חדש:3נגדיר mknode(op,left,right) מייצרת "צומת פעולה" עם תוויתop ושני
right ו-leftשדות מחוונים mkleaf(id,entry) מייצרת "צומת מזהה" עם תוויתid ושדה
entryהמכיל מחוון לטבלת הסמלים mkleaf(num,val) מייצרת "צומת מספר" עם תוויתnum ושדה
valהמכיל את הערך המספרי
19תורת הקומפילציהאיתן אביאור
דוגמה לבנית עץ תחבירa – 4 + cהקלט:
העץ הנוצרסדר הפעולות
p1 = mkleaf(id, entry_a);
p2 = mkleaf(num, 4);
p3 = mknode( ‘‘, p1, p2);
p4 = mkleaf(id, entry_c);
p5 = mknode( ‘+‘ , p3, p4);
+
id num 4
id
to entry for a
to entry for c
20תורת הקומפילציהאיתן אביאור
הגדרות מונחות תחבירלבניית עץ תחביר
, המתאימה לבניית עץ תחבירSלהלן הגדרה של תכונות-
כללי גזירה חוקי משמעות
E E1 + T E.nptr := mknode) ‘+ ‘ , E1.nptr , T.nptr (
E E1 T E.nptr := mknode) ‘‘ , E1.nptr , T.nptr (
E T E.nptr := T.nptr
T ( E ) T.nptr := E.nptr
T id T.nptr := mkleaf)id, id.entry(
T num T.nptr := mkleaf)num, num.val(
21תורת הקומפילציהאיתן אביאור
עץ הפריסה ועץ התחבירa – 4 + c הקלט:
+
-
id num 4
id
to entry for a
to entry for c
E
T.nptr
id
E.nptr
–T.nptr
num
E.nptr+
T.nptr
id
22תורת הקומפילציהאיתן אביאור
השימוש של עץ התחביראסטרטגיה אחת הינה לייצר את התרגום תוך כדי •
שלב פריסה
אסטרטגיה חלופית הינה לייצר בעת הפריסה ייצוג •
התוכנית ולבצע את התרגום בשלב שני ביניים של
עץ התחביר יכול לשמש לייצוג ביניים כזה•
23תורת הקומפילציהאיתן אביאור
חישוב מלמטה למעלהSשל הגדרות תכונות-
מהוות תת-מחלקה של הגדרות מונחות Sהגדרות תכונות-•
תחביר, שעבורן קל יחסית לבנות מתרגם אוטומטי
נשתמש בחישוב מלמטה למעלה, ובכל בנית צומת בעץ •
הפריסה נחשב את התכונות שלו על סמך תכונות בניו
את תכונות הצמתים נשמור בתוך המחסנית•
כשהפורס מבצע רדוקציה לפי כלל גזירה מסויים, נחשב את •
כללי המשמעות הנלווים לאותו כלל גזירה
24תורת הקומפילציהאיתן אביאור
הפורס והמחסנית, goto ו-action שיש לו טבלאות פריסה )LR)1נשתמש בפורס •
וכן מחסניתלצורך הפריסה עצמה מספיק לשים במחסנית את מספר •
המצב של הפורס, מפני שהוא מעיד באופן חד-משמעי על סמל
הדקדוק שהוא מכסהכניסה במחסנית תהיה מורכבת אם כן:•
–state )מצב )אינדקס או מצביע לטבלת הפריסה אנו נרשום את סמל הדקדוק במקום זה
–val ערכי התכונות של סמל הדקדוק
25תורת הקומפילציהאיתן אביאור
רדוקציה וחישוב משמעותנניח תכונה יחידה לכל סמל
המצב החדשרדוקציההמחסנית
v, u-ו w יכולים להיות
אותה תכונה או תכונות שונות לסמלים שונים
הפורס מחליט
לעשות רדוקציה
לפי כלל גזירה
A XYZ
אשר לו מקושר
כלל המשמעות
A.t := f)X.v, Y.u, Z.w(
stateval
top AA.t
. . .. . .
stateval
top Z
Y
X
Z.w
Y.u
X.v
. . .. . .
26תורת הקומפילציהאיתן אביאור
דוגמה להגדרת חישוב המשמעות
כלל גזירה קטע קוד ליישום חוקי המשמעות
L E n print ) stack ]top[.val (;
E E1 + T stack]ntop[.val = stack]top2[.val + stack]top[.val ;
E T //stack]ntop[.val = stack]top[.val;
F ( E ) stack]ntop[.val = stack]top1[.val;
F digit //stack]ntop[.val = stack]top[.val;
T T1 F stack]ntop[.val = stack]top2[.val stack]top[.val;
T F //stack]ntop[.val = stack]top[.val;
27תורת הקומפילציהאיתן אביאור
סדר ביצוע הפעולות.1topמצביע לראש המחסנית
הפורס מחליט לבצע רדוקציה2.
.3rהוא אורך הצד הימני של כלל הגזירה
.4ntop = top – )r – 1(
הפורס מחשב את הקוד של חוק המשמעות5.
ntopהפורס מציב את המצב והערך החדש בתא המוצבע ע"י 6.
ערכים מהמחסנית(r – 1 )שולף top = ntopהפורס מעדכן 7.
28תורת הקומפילציהאיתן אביאור
דוגמה לביצוע הפריסהעם חישוב משמעות
הקלט:
3 5 + 4 n
קלט state val כלל גזירה
3 5 + 4 n 5 + 4 n 5 + 4 n 5 + 4 n
5 +4 n +4 n +4 n +4 n +4 n4 nnnnn
LE nE
E + TE + FE + 4
E +ETT FT 5T TF3–
L E n
E E + TT FF digit
E TT T FF digit
T F F digit
–
1919_
1915 _ 415 _ 415 _ 4
15_ 1515
3 _ 53 _ 5
3_ 333
29תורת הקומפילציהאיתן אביאור
מסקנות מאפשרות לנו לבנות פורס הקושר ביצוע Sהגדרות תכונות-•
רדוקציה לחישוב משמעות
פעולות חישוב המשמעות נעשות לפני שמבוצעת רדוקציה•
Sע"מ להרחיב את אוסף ההגדרות מעבר להגדרות תכונות-•
נרצה לשלב פעולות חישוב תוך כדי פריסת צד ימין של כלל
הגזירה
30תורת הקומפילציהאיתן אביאור
חישוב תכונות במעבר (Depth Firstלעומק )
void dfvisit )node n({
foreach child m of n, from left to right {evaluate inherited attributes of m;dfvisit )m(;
}evaluate synthesized attributes of n;
}שיטה זו הינה טבעית לחישוב התכונות•אם לא מגבילים את ההגדרת המשמעות עשויות להיווצר •
תלויות שאינן מתאימות לסדר חישוב זה
31תורת הקומפילציהאיתן אביאור
Lהגדרות תכונות-)L-attributed Definitions(
אם:Lהגדרה מונחית דקדוק תהיה של תכונות-
[ n..1 בתחום ]j ולכל A X1X2. . . Xnלכל כלל גזירה
תלויות רק ב:Xjהתכונות הנורשות של
X1X2. . .Xj-1התכונות של הסמלים •
בכלל הגזירה(Xj)הנמצאים מצד שמאל של
Aהתכונות הנורשות של •
L הינה גם הגדרת תכונות-Sאבחנה: הגדרת תכונות-
32תורת הקומפילציהאיתן אביאור
סכמת תרגום(Translation Scheme)
(translation schemeסכמת תרגום )
דקדוק חסר הקשר אשר בו קיימות תכונות לכל סמל דקדוק
ואשר פעולות משמעות )המצויינות בתוך סוגריים מסולסלים
( משולבות בתוך הצד הימני של כללי הגזירה{ }
33תורת הקומפילציהאיתן אביאור
דוגמה לסכמת התרגום( לכתוב סופיות infixמתרגם ביטוי חיבור/חיסור מכתיב פנימי )
(postfix)
E T Rהדקדוק
R addop T { print)addop.lexeme(} R1 | ε
T num { print)num.val(}
2 + 5 – 9 הקלט
+2 – 5 9 הפלט הרצוי
עץ הרצוי
E
R
R
R
T
T T
9
5 2
+
ε
{print( ‘ 9 ’ )}
{print( ‘ 5 ’ )}
{print( ‘ ’ )}
{print( ‘ 2 ’ )}
{print ‘ )+ } ( ’
34תורת הקומפילציהאיתן אביאור
מגבלות על פעולות סכמת התרגום
שהוגדרו לעיל Lעל מנת להבטיח כי נעמוד במגבלות תכונות-נדרוש מספר מגבלות על הפעולות של סכמת התרגום:
תכונה נורשת של סמל בצד ימין של כלל גזירה חייבת להיות 1.מחושבת בפעולה לפני שהסמל מופיע
לפעולה אסור לפנות לתכונה מורכבת של סמל הנמצא מימין 2.לה
תכונה מורכבת של נונטרמינל בצד ימין ניתן לחשב רק לאחר 3.שכל התכונות עליהן היא מסתמכת כבר חושבו
בדרך כלל פעולה כזאת תימצא בקצה הימני של הכלל
35תורת הקומפילציהאיתן אביאור
המשך יבוא
36תורת הקומפילציהאיתן אביאור
5תום פרק