1 / 36

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

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

trudy
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. פרק 5 תרגום מונחה תחביר תורת הקומפילציה

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

  3. חוקי משמעות(Semantic Rules) תכונות (attributes)ערכים המוצמדים לסמלי הדקדוק חוקי משמעות (semantic rules)הכללים הקובעים איך מחשבים ערכי תכונות מתוך ערכים של תכונות אחרות שיטות לרישום כללי משמעות וקשירתם לכללי הגזירה • הגדרות מונחות תחביר (syntax directed definitions) • סכימות תרגום (translation schemes) תורת הקומפילציה

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

  5. הגדרות מונחות תחביר(Syntax Directed Definitions) לכלל גזירה מוצמדים מספר חוקי משמעות מהצורהb = f (c1, c2, . . . ck)כאשר b ו-ci הם תכונות של סמלי הדקדוק המשתתפים בכלל הגזירה • תכונה מורכבת (synthesized attribute)b היא תכונה של הסמל בצד שמאל של כלל הגזירה ו-ci תכונות של הסמלים בצד הימני • התכונה של צומת בעץ פריסה תלויה בתכונות הבנים שלו • תכונה נורשת (inherited attribute)b היא תכונה של אחד הסמלים בצד ימין של כלל הגזירה ו-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 En 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. L E.val = 19 n E.val = 15 + T.val = 4 T.val = 15 F.val = 4 T.val = 3  F.val = 5 digit.lexval = 4 F.val = 3 digit.lexval = 5 digit.lexval = 3 דוגמה לעץ מעוטר של תכונות מורכבות הקלט3  5 + 4 n עץ הפריסה המעוטר תורת הקומפילציה

  10. דוגמה להגדרות מונחות תחביר עם הגדרות נורשות כלל גזירה חוקי משמעות D T L L.in := T.type T int T.type := integer T real T.type := real L L1, id L1.in := L.in addtype ( id.entry, L.in ) Lid addtype ( id.entry, L.in ) תורת הקומפילציה

  11. דוגמה לעץ מעוטר של תכונות נורשות הקלט realid1 ,id2 ,id3 D T.type= real L.in= real real L.in= real , id3 L.in= real , id2 id1 תורת הקומפילציה

  12. גרף תלויות(Dependency Graph) גרף שבו: הצמתים: תכונות של הצמתים בעץ הפריסה קשתות: התלות של תכונה א' בתכונה ב' אופן הבניה צמתיםלכל צומת n בעץ הפריסה לכל תכונה a של סמל הדקדוק בצומת n בנה בגרף התלויות צומת עבור n.a קשתות לכל צומת n בעץ הפריסה לכל כלל משמעות מהצורה b = f(c1,c2, … ck) שקשור לכלל הגזירה שיצר את הצומת n לכל i בתחום [1..k] בנה בגרף התלויות קשת מהצומת ci לצומת b תורת הקומפילציה

  13. E val val + val E1 E2 דוגמאות לגרף תלויות דוגמה ב' גרף התלויותשל העץ המעוטר עם תכונות נורשות דוגמה א' כלל גזירה E E1 + E2 כלל משמעות E.Val := E1.val + E2.val גרף תלויות D 6 T 4 in 5 L type 3 real , entry in id3 7 L 8 2 id2 , entry in 9 L 10 1 entry תורת הקומפילציה id1

  14. סדר חישוב המשמעות • בניית עץ הפריסה המעוטר ע"פ הדקדוק • בניית גרף התלויות • מציאת מיון טופולוגי של גרף התלויות • חישוב התכונות לפי סדר המיון הטופולוגי תורת הקומפילציה

  15. שיטות לחישוב המשמעות • שיטות עץ פריסה (parse-tree methods) בזמן ההידור נבנה עץ הפריסה מעוטר וממנו גרף תלויות,ואז מחושב המיון הטופולוגי • שיטות המבוססות על חוקים (rule-based methods)בזמן בנית המהדר מנותחים (ידנית או אוטומטית) חוקי המשמעות המקושרים עם כללי הגזירה ולכל כלל גזירה נקבע מראש סדר חישוב חוקי המשמעות הקשורים אליו • שיטות מתעלמות (oblivious methods) סדר חישוב המתעלם מחוקי המשמעות עצמם (למשל  לפי סדר השימוש בכללי הגזירה) • מגביל את אוסף ההגדרות מונחות הדקדוק שניתן ליישם בשיטה זו תורת הקומפילציה

  16. עץ תחביר (Syntax Tree) עץ תחביר (syntax tree)עץ המשקף את המבנה ההיררכי של השפה • דחוס יותר מעץ פריסה • בעלים אין מופיעים אופרטורים או מילות מפתח והם מוכליםבצומת שהיה ההורה שלהם אילו הופיעו • גזירות יחידות (X  Y) מסולקות מהעץ S  ifBthenS1elseS2  if-then-else B S1 S2 תורת הקומפילציה

  17. L E.val = 19 n + E.val = 15 + T.val = 4  4 T.val = 15 F.val = 4 T.val = 3  F.val = 5 digit.lexval = 4 3 5 F.val = 3 digit.lexval = 5 digit.lexval = 3 דוגמה לעץ תחביר הקלט: 3  5 + 4 n עץ פריסהעץ תחביר תורת הקומפילציה

  18. בניית עץ תחביר לביטויים כל צומת בעץ התחביר מיוצג ע"י רשומה בעלת מספר שדות • סוג הצומת או האופרטור  מכונה תווית (label) של הרשומה • מחוונים לצמתי הבנים • ערכים (בצמתי עלים) נגדיר 3 פונקציות המחזירות מחוון לצומת חדש: mknode(op,left,right)מייצרת "צומת פעולה" עם תווית op ושני שדות מחוונים left ו-right mkleaf(id,entry)מייצרת "צומת מזהה" עם תווית id ושדה entry המכיל מחוון לטבלת הסמלים mkleaf(num,val)מייצרת "צומת מספר" עם תווית num ושדה val המכיל את הערך המספרי תורת הקומפילציה

  19. +  id num 4 דוגמה לבנית עץ תחביר הקלט: 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 to entry for c to entry for a תורת הקומפילציה

  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. E.nptr + + E.nptr T.nptr T.nptr - E – id num T.nptr id num 4 id id to entry for c to entry for a עץ הפריסה ועץ התחביר הקלט:a – 4 + c תורת הקומפילציה

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

  23. חישוב מלמטה למעלהשל הגדרות תכונות-S • הגדרות תכונות-S מהוות תת-מחלקה של הגדרות מונחות תחביר, שעבורן קל יחסית לבנות מתרגם אוטומטי • נשתמש בחישוב מלמטה למעלה, ובכל בנית צומת בעץ הפריסה נחשב את התכונות שלו על סמך תכונות בניו • את תכונות הצמתים נשמור בתוך המחסנית • כשהפורס מבצע רדוקציה לפי כלל גזירה מסויים, נחשב את כללי המשמעות הנלווים לאותו כלל גזירה תורת הקומפילציה

  24. הפורס והמחסנית • נשתמש בפורס LR(1) שיש לו טבלאות פריסה action ו-goto, וכן מחסנית • לצורך הפריסה עצמה מספיק לשים במחסנית את מספר המצב של הפורס, מפני שהוא מעיד באופן חד-משמעי על סמל הדקדוק שהוא מכסה • כניסה במחסנית תהיה מורכבת אם כן: • stateמצב (אינדקס או מצביע לטבלת הפריסה) אנו נרשום את סמל הדקדוק במקום זה • valערכי התכונות של סמל הדקדוק תורת הקומפילציה

  25. רדוקציה וחישוב משמעות נניח תכונה יחידה לכל סמל המצב החדש רדוקציה המחסנית הפורס מחליט לעשות רדוקציה לפי כלל גזירה A XYZ אשר לו מקושר כלל המשמעות A.t := f(X.v, Y.u, Z.w) v, u ו-w יכולים להיות אותה תכונה או תכונות שונות לסמלים שונים תורת הקומפילציה

  26. דוגמה להגדרת חישוב המשמעות כלל גזירה קטע קוד ליישום חוקי המשמעות L E n print ( stack [top].val ); E E1+ T stack[ntop].val = stack[top2].val +stack[top].val; E T // stack[ntop].val = stack[top].val; T T1 F stack[ntop].val = stack[top2].val stack[top].val; T F // stack[ntop].val = stack[top].val; F (E) stack[ntop].val = stack[top1].val; F digit // stack[ntop].val = stack[top].val; תורת הקומפילציה

  27. סדר ביצוע הפעולות • top מצביע לראש המחסנית • הפורס מחליט לבצע רדוקציה • r הוא אורך הצד הימני של כלל הגזירה • ntop = top –(r – 1) • הפורס מחשב את הקוד של חוק המשמעות • הפורס מציב את המצב והערך החדש בתא המוצבע ע"י ntop • הפורס מעדכן top = ntop (שולף r – 1ערכים מהמחסנית) תורת הקומפילציה

  28. דוגמה לביצוע הפריסהעם חישוב משמעות קלט state val כלל גזירה הקלט: 3 5 + 4 n 3  5 + 4 n – –  5 + 4 n 3 3  5 + 4 n F 3 F  digit  5 + 4 n T 3 T  F 5 + 4 n T  3 _ + 4 n T  5 3 _ 5 + 4 n T  F 3 _ 5 F  digit + 4 n T 15 T  T  F + 4 n E 15 E T 4 n E + 15 _ n E + 4 15 _ 4 n E + F 15 _ 4 F  digit n E + T 15 _ 4 T  F n E 19 E  E + T E n 19 _ תורת הקומפילציה L 19 L  E n

  29. מסקנות • הגדרות תכונות-S מאפשרות לנו לבנות פורס הקושר ביצוע רדוקציה לחישוב משמעות • פעולות חישוב המשמעות נעשות לפני שמבוצעת רדוקציה • ע"מ להרחיב את אוסף ההגדרות מעבר להגדרות תכונות-S נרצה לשלב פעולות חישוב תוך כדי פריסת צד ימין של כלל הגזירה תורת הקומפילציה

  30. חישוב תכונות במעבר לעומק (Depth First) voiddfvisit (node n) { foreachchild mofn, fromlefttoright { evaluateinherited attributesofm; dfvisit (m); } evaluatesynthesized attributesofn; } • שיטה זו הינה טבעית לחישוב התכונות • אם לא מגבילים את ההגדרת המשמעות עשויות להיווצר תלויות שאינן מתאימות לסדר חישוב זה תורת הקומפילציה

  31. הגדרות תכונות-L(L-attributed Definitions) הגדרה מונחית דקדוק תהיה של תכונות-L אם: לכל כלל גזירה A X1X2. . . Xnולכל jבתחום [1..n]התכונות הנורשות של Xj תלויות רק ב: • התכונות של הסמלים X1X2. . .Xj-1(הנמצאים מצד שמאל של Xjבכלל הגזירה) • התכונות הנורשות של A אבחנה: הגדרת תכונות-S הינה גם הגדרת תכונות-L תורת הקומפילציה

  32. סכמת תרגום(Translation Scheme) סכמת תרגום (translation scheme) דקדוק חסר הקשר אשר בו קיימות תכונות לכל סמל דקדוק ואשר פעולות משמעות (המצויינות בתוך סוגריים מסולסלים { } ) משולבות בתוך הצד הימני של כללי הגזירה תורת הקומפילציה

  33. E T R  9 R { print( ‘ 9 ’ ) } + T R { print( ‘ ’ ) } T { print( ‘ +’ ) } ε 5 2 { print( ‘ 5 ’ ) } { print( ‘ 2 ’ ) } דוגמה לסכמת התרגום מתרגם ביטוי חיבור/חיסור מכתיב פנימי (infix) לכתוב סופיות (postfix) הדקדוקE T R R  addopT { print(addop.lexeme)}R1 | ε T  num{ print(num.val)} הקלט9 – 5 + 2 הפלט הרצוי9 5 – 2 + עץ הרצוי תורת הקומפילציה

  34. מגבלות על פעולות סכמת התרגום על מנת להבטיח כי נעמוד במגבלות תכונות-L שהוגדרו לעיל נדרוש מספר מגבלות על הפעולות של סכמת התרגום: • תכונה נורשת של סמל בצד ימין של כלל גזירה חייבת להיות מחושבת בפעולה לפני שהסמל מופיע • לפעולה אסור לפנות לתכונה מורכבת של סמל הנמצא מימין לה • תכונה מורכבת של נונטרמינל בצד ימין ניתן לחשב רק לאחר שכל התכונות עליהן היא מסתמכת כבר חושבובדרך כלל פעולה כזאת תימצא בקצה הימני של הכלל תורת הקומפילציה

  35. המשך יבוא תורת הקומפילציה

  36. תום פרק 5 תורת הקומפילציה

More Related