פרק 5 תרגום מונחה תחביר

36
רררר רררררר רררר רררררררררר1

description

פרק 5 תרגום מונחה תחביר. ניתוח ( analysis ). מנתח לקסיקאלי lexical analyser. מנתח תחביר syntax analyser. מנתח משמעות semantic analyser. מייצר קוד ביניים intermediate code generator. מייעל קוד code optimizer. חיבור ( synthesis ). - PowerPoint PPT Presentation

Transcript of פרק 5 תרגום מונחה תחביר

Page 1: פרק 5 תרגום מונחה תחביר

1תורת הקומפילציהאיתן אביאור

Page 2: פרק 5 תרגום מונחה תחביר

2תורת הקומפילציהאיתן אביאור

ניתוח(analysis)

חיבור(synthesis)

syntax analyserמנתח תחביר

semantic analyserמנתח משמעות

מייצר קוד ביניים intermediate code generator

code optimizerמייעל קוד

code generatorמייצר קוד

lexical analyserמנתח לקסיקאלי

תרגום – ניתוח המשמעות

semantic analyserמנתח משמעות

Page 3: פרק 5 תרגום מונחה תחביר

3תורת הקומפילציהאיתן אביאור

חוקי משמעות(Semantic Rules)

ערכים המוצמדים לסמלי הדקדוק (attributesתכונות )

הכללים הקובעים איך (semantic rulesחוקי משמעות )מחשבים ערכי תכונות מתוך ערכים של תכונות אחרות

שיטות לרישום כללי משמעות וקשירתם לכללי הגזירה

(syntax directed definitionsהגדרות מונחות תחביר )1.

(translation schemesסכימות תרגום )2.

Page 4: פרק 5 תרגום מונחה תחביר

4תורת הקומפילציהאיתן אביאור

המהלך הכלליפריסת זרם התמניות•בנית עץ הפריסה•מעבר על העץ לחישוב חוקי המשמעות•

לא תמיד יש לבצע בפועל את כל השלבים האלו, וישנם קיצורי •דרך.

זרםהתמניות

עץהפריסה

גרףתלויות

סדר חישובכללי המשמעות

Page 5: פרק 5 תרגום מונחה תחביר

5תורת הקומפילציהאיתן אביאור

הגדרות מונחות תחביר(Syntax Directed Definitions)

לכלל גזירה מוצמדים מספר חוקי משמעות מהצורהb = f )c1, c2, . . . ck(

הם תכונות של סמלי הדקדוק המשתתפים בכלל ci ו-bכאשר הגזירה

היא תכונה של b (synthesized attributeתכונה מורכבת )• תכונות של הסמלים ciהסמל בצד שמאל של כלל הגזירה ו-

בצד הימניהתכונה של צומת בעץ פריסה תלויה בתכונות הבנים שלו–

היא תכונה של אחד b (inherited attributeתכונה נורשת )• תכונות של הסמל בצד ciהסמלים בצד ימין של כלל הגזירה ו-

שמאל ו/או סמלים בצד הימניהתכונה של צומת בעץ הפריסה תלויה בתכונות ההורה ו/או –

האחים שלו

Page 6: פרק 5 תרגום מונחה תחביר

6תורת הקומפילציהאיתן אביאור

המשךפונקציה של חוק משמעות נרשמת בד"כ כביטוי•( כגון:side effectsלעיתים יש צורך בתוצאות נלוות )•

שינוי ערכי משתנים גלובלים–יצירת פלט–

במקרים כאלה ניתן לדמות כאילו הפעולה הינה חוק המגדיר את ( של הסמל בצד שמאל של dummyערכיה של תכונה סתמית )

כלל הגזירהלטרמינלים יש רק תכונות מורכבות שאת הערכים שלהם קובע •

המנתח הלקסיקאלילסמל ההתחלה יש בד"כ רק תכונות מורכבות )אלא אם נאמר •

במפורש אחרת(הגדרת משמעות S )S-attributed definition( הגדרה של תכונות-

באמצעות חוקים שבהם כל התכונות הינן מורכבות )ולא נורשות(

Page 7: פרק 5 תרגום מונחה תחביר

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+

Page 8: פרק 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

Page 9: פרק 5 תרגום מונחה תחביר

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

Page 10: פרק 5 תרגום מונחה תחביר

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 (

Page 11: פרק 5 תרגום מונחה תחביר

11תורת הקומפילציהאיתן אביאור

דוגמה לעץ מעוטר של תכונות נורשות

D

T.type = real

real

L.in = real

L.in = real , id3

L.in = real , id2

id1

realהקלט   id1 , id2 , id3 

Page 12: פרק 5 תרגום מונחה תחביר

12תורת הקומפילציהאיתן אביאור

גרף תלויות(Dependency Graph)

גרף שבו:תכונות של הצמתים בעץ הפריסההצמתים:התלות של תכונה א' בתכונה ב'קשתות:

אופן הבניה בעץ הפריסהnלכל צומת צמתים

n של סמל הדקדוק בצומת a לכל תכונה n.aבנה בגרף התלויות צומת עבור

בעץ הפריסהn לכל צומת קשתות )b = f)c1,c2, … ck לכל כלל משמעות מהצורה

n שקשור לכלל הגזירה שיצר את הצומת [k..1 בתחום ]iלכל

b לצומת ci בנה בגרף התלויות קשת מהצומת

Page 13: פרק 5 תרגום מונחה תחביר

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

Page 14: פרק 5 תרגום מונחה תחביר

14תורת הקומפילציהאיתן אביאור

סדר חישוב המשמעותבניית עץ הפריסה המעוטר ע"פ הדקדוק1.

בניית גרף התלויות2.

מציאת מיון טופולוגי של גרף התלויות3.

חישוב התכונות לפי סדר המיון הטופולוגי4.

Page 15: פרק 5 תרגום מונחה תחביר

15תורת הקומפילציהאיתן אביאור

שיטות לחישוב המשמעות( parse-tree methodsשיטות עץ פריסה )1.

בזמן ההידור נבנה עץ הפריסה מעוטר וממנו גרף תלויות,ואז מחושב המיון הטופולוגי

(rule-based methodsשיטות המבוססות על חוקים )2.בזמן בנית המהדר מנותחים )ידנית או אוטומטית( חוקי

המשמעות המקושרים עם כללי הגזירה ולכל כלל גזירה נקבע מראש סדר חישוב חוקי המשמעות הקשורים אליו

(oblivious methodsשיטות מתעלמות )3.סדר חישוב המתעלם מחוקי המשמעות עצמם

לפי סדר השימוש בכללי הגזירה()למשל מגביל את אוסף ההגדרות מונחות הדקדוק שניתן ליישם –

בשיטה זו

Page 16: פרק 5 תרגום מונחה תחביר

16תורת הקומפילציהאיתן אביאור

(Syntax Treeעץ תחביר )עץ המשקף את המבנה ההיררכי (syntax treeעץ תחביר )

של השפה

דחוס יותר מעץ פריסה• בעלים אין מופיעים אופרטורים או מילות מפתח והם מוכלים•

בצומת שהיה ההורה שלהם אילו הופיעו( מסולקות מהעץX Yגזירות יחידות )•

S if B then S1 else S2 if-then-else

B S1 S2

Page 17: פרק 5 תרגום מונחה תחביר

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

Page 18: פרק 5 תרגום מונחה תחביר

18תורת הקומפילציהאיתן אביאור

בניית עץ תחביר לביטוייםכל צומת בעץ התחביר מיוצג ע"י רשומה בעלת מספר שדות

של הרשומה(labelתווית ) מכונה סוג הצומת או האופרטור •מחוונים לצמתי הבנים•ערכים )בצמתי עלים(•

פונקציות המחזירות מחוון לצומת חדש:3נגדיר mknode(op,left,right) מייצרת "צומת פעולה" עם תוויתop ושני

right ו-leftשדות מחוונים mkleaf(id,entry) מייצרת "צומת מזהה" עם תוויתid ושדה

entryהמכיל מחוון לטבלת הסמלים mkleaf(num,val) מייצרת "צומת מספר" עם תוויתnum ושדה

valהמכיל את הערך המספרי

Page 19: פרק 5 תרגום מונחה תחביר

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

Page 20: פרק 5 תרגום מונחה תחביר

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(

Page 21: פרק 5 תרגום מונחה תחביר

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

Page 22: פרק 5 תרגום מונחה תחביר

22תורת הקומפילציהאיתן אביאור

השימוש של עץ התחביראסטרטגיה אחת הינה לייצר את התרגום תוך כדי •

שלב פריסה

אסטרטגיה חלופית הינה לייצר בעת הפריסה ייצוג •

התוכנית ולבצע את התרגום בשלב שני ביניים של

עץ התחביר יכול לשמש לייצוג ביניים כזה•

Page 23: פרק 5 תרגום מונחה תחביר

23תורת הקומפילציהאיתן אביאור

חישוב מלמטה למעלהSשל הגדרות תכונות-

מהוות תת-מחלקה של הגדרות מונחות Sהגדרות תכונות-•

תחביר, שעבורן קל יחסית לבנות מתרגם אוטומטי

נשתמש בחישוב מלמטה למעלה, ובכל בנית צומת בעץ •

הפריסה נחשב את התכונות שלו על סמך תכונות בניו

את תכונות הצמתים נשמור בתוך המחסנית•

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

כללי המשמעות הנלווים לאותו כלל גזירה

Page 24: פרק 5 תרגום מונחה תחביר

24תורת הקומפילציהאיתן אביאור

הפורס והמחסנית, goto ו-action שיש לו טבלאות פריסה )LR)1נשתמש בפורס •

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

המצב של הפורס, מפני שהוא מעיד באופן חד-משמעי על סמל

הדקדוק שהוא מכסהכניסה במחסנית תהיה מורכבת אם כן:•

–state )מצב )אינדקס או מצביע לטבלת הפריסה אנו נרשום את סמל הדקדוק במקום זה

–val ערכי התכונות של סמל הדקדוק

Page 25: פרק 5 תרגום מונחה תחביר

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

. . .. . .

Page 26: פרק 5 תרגום מונחה תחביר

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;

Page 27: פרק 5 תרגום מונחה תחביר

27תורת הקומפילציהאיתן אביאור

סדר ביצוע הפעולות.1topמצביע לראש המחסנית

הפורס מחליט לבצע רדוקציה2.

.3rהוא אורך הצד הימני של כלל הגזירה

.4ntop = top – )r – 1(

הפורס מחשב את הקוד של חוק המשמעות5.

ntopהפורס מציב את המצב והערך החדש בתא המוצבע ע"י 6.

ערכים מהמחסנית(r – 1 )שולף top = ntopהפורס מעדכן 7.

Page 28: פרק 5 תרגום מונחה תחביר

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

Page 29: פרק 5 תרגום מונחה תחביר

29תורת הקומפילציהאיתן אביאור

מסקנות מאפשרות לנו לבנות פורס הקושר ביצוע Sהגדרות תכונות-•

רדוקציה לחישוב משמעות

פעולות חישוב המשמעות נעשות לפני שמבוצעת רדוקציה•

Sע"מ להרחיב את אוסף ההגדרות מעבר להגדרות תכונות-•

נרצה לשלב פעולות חישוב תוך כדי פריסת צד ימין של כלל

הגזירה

Page 30: פרק 5 תרגום מונחה תחביר

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;

}שיטה זו הינה טבעית לחישוב התכונות•אם לא מגבילים את ההגדרת המשמעות עשויות להיווצר •

תלויות שאינן מתאימות לסדר חישוב זה

Page 31: פרק 5 תרגום מונחה תחביר

31תורת הקומפילציהאיתן אביאור

Lהגדרות תכונות-)L-attributed Definitions(

אם:Lהגדרה מונחית דקדוק תהיה של תכונות-

[ n..1 בתחום ]j ולכל A X1X2. . . Xnלכל כלל גזירה

תלויות רק ב:Xjהתכונות הנורשות של

X1X2. . .Xj-1התכונות של הסמלים •

בכלל הגזירה(Xj)הנמצאים מצד שמאל של

Aהתכונות הנורשות של •

L הינה גם הגדרת תכונות-Sאבחנה: הגדרת תכונות-

Page 32: פרק 5 תרגום מונחה תחביר

32תורת הקומפילציהאיתן אביאור

סכמת תרגום(Translation Scheme)

(translation schemeסכמת תרגום )

דקדוק חסר הקשר אשר בו קיימות תכונות לכל סמל דקדוק

ואשר פעולות משמעות )המצויינות בתוך סוגריים מסולסלים

( משולבות בתוך הצד הימני של כללי הגזירה{ }

Page 33: פרק 5 תרגום מונחה תחביר

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 ‘ )+ } ( ’

Page 34: פרק 5 תרגום מונחה תחביר

34תורת הקומפילציהאיתן אביאור

מגבלות על פעולות סכמת התרגום

שהוגדרו לעיל Lעל מנת להבטיח כי נעמוד במגבלות תכונות-נדרוש מספר מגבלות על הפעולות של סכמת התרגום:

תכונה נורשת של סמל בצד ימין של כלל גזירה חייבת להיות 1.מחושבת בפעולה לפני שהסמל מופיע

לפעולה אסור לפנות לתכונה מורכבת של סמל הנמצא מימין 2.לה

תכונה מורכבת של נונטרמינל בצד ימין ניתן לחשב רק לאחר 3.שכל התכונות עליהן היא מסתמכת כבר חושבו

בדרך כלל פעולה כזאת תימצא בקצה הימני של הכלל

Page 35: פרק 5 תרגום מונחה תחביר

35תורת הקומפילציהאיתן אביאור

המשך יבוא

Page 36: פרק 5 תרגום מונחה תחביר

36תורת הקומפילציהאיתן אביאור

5תום פרק