ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית " – predictive) bottom-up – מהעלים לשורש.

Slides:



Advertisements
Similar presentations
Completeness and Expressiveness. תזכורת למערכת ההוכחה של לוגיקה מסדר ראשון : אקסיומות 1. ) ) (( 2. )) ) (( )) ( ) ((( 3. ))) F( F( ( 4. ) v) ( ) v ((
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
1 Formal Specifications for Complex Systems (236368) Tutorial #4 Refinement in Z: data refinement; operations refinement; their combinations.
מבוסס על הרצאות של יורם זינגר, האוניברסיטה העברית י"ם
טבלאות סמלים נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח.
צורה נורמלית של גרייבך הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 11.
ניתוח תחבירי (Parsing)
1 Formal Specifications for Complex Systems (236368) Tutorial #2 Z introduction and notation (contd.); Birthday book example (Chapter 1 in the book); Z.
Presentation by Dudu Yanay and Elior Malul 1.  מה משותף לכל אלגוריתם המשתמש ב -Bucket Elimination: ◦ נתון מודל הסתברותי ורשת ביסיאנית מתאימה. ◦ נתונה.
מכונת מצבים תרגול מס' 4 Moshe Malka.
מתמטיקה בדידה תרגול 3.
ניתוח תחבירי Top-Down.
מנתח LL(1) נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
מסדי נתונים תשס " ג 1 תכנון סכמות (Design Theory) מסדי נתונים.
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
עבודה סמינריונית Prelude to Ukkonen algorithm ON-LINE CONSTRUCTION OF SUFFIX TREES מגישים : עיד מוחמד טיבי פיראס.
The Solar Wind And its consequences. dx dA משוואות בסיסיות בהידרו דינמיקה הכח הפועל כתוצאה מגרדיאנט בלחץ על אלמנט מסה - dm.
ניתוח תחבירי (Parsing) Wilhelm, and Maurer – Chapter 8 Aho, Sethi, and Ullman – Chapter 4 Cooper and Torczon – Chapter 3.
אוטומט מחסנית הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 11.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
מסדי נתונים תשס " ג 1 תכנון סכמות – אלגוריתם פירוק לתבניות בצורת BCNF מסדי נתונים.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
תורת הקבוצות חלק ב'. קבוצה בת מניה הגדרה: קבוצה אינסופית X היא ניתנת למניה אם יש התאמה חד-חד ערכית בין X לבין .
צורות נורמליות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 10.
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site : T.A. :Emilia Katz.
מנפה שגיאות - DEBUGGER מבוא למדעי המחשב (234114) רועי מלמד
תחשיב הפסוקים חלק ג'. צורות נורמליות א. DF – Disjunctive Form – סכום של מכפלות. דוגמא: (P  ~Q  R)  (R  P)  (R  ~Q  ~P) הגדרה: נוסחה השקולה לנוסחה.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
תהליכים  מהו תהליך ?  מבני הנתונים לניהול תהליכים.  החלפת הקשר.  ניהול תהליכים ע " י מערכת ההפעלה.
Multi-Cycle MIPS דוגמאות. דוגמה 1 נתון קטע הקוד הבא: begin:addi $v0, $zero, -1 loop:add $a0, $a0, $a0 addi$v0,$v0,1 bne $a0, $zero, loop הניחו כי בתחילת.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
הפקולטה למדעי המחשב אוטומטים ושפות פורמליות (236353)
The Cyclic Multi-peg Tower of Hanoi מעגלי חד-כווני סבוכיות הפתרון בגרסאות עם יותר מ-3 עמודים.
טיב פני שטח (טפ"ש) טיב פני שטח- רמת החלקות של המשטח.
Design and Analysis of Algorithms, Technion EE, Design and Analysis of Algorithms Recitation 10 Turing Machine 2010 Gal Tamir Based on recitations.
Data Structures, CS, TAU, Perfect Hashing 1 Perfect Hashing בעיה : נתונה קבוצה S של n מפתחות מתחום U השוואה ל - Hash : * טבלה קבועה (Hash רגיל - דינאמי.
1 Data Structures, CS, TAU, Perfect Hashing בעיה: נתונה קבוצה S של n מפתחות מתחום U השוואה ל- Hash : * טבלה קבועה (Hash רגיל - דינאמי) * רוצים זמן קבוע.
רגרסיה קו רגרסיה הוא קו תיאורטי המאפשר לנו לבחון את השפעתו של משתנה מנבא אחד (או יותר) על המשתנה התלוי: במילים אחרות, מודל רגרסיה עוזר לנו לנבא על פי משתנה.
מודל הלמידה מדוגמאות Learning from Examples קלט: אוסף של דוגמאות פלט: קונסיסטנטי עם פונקציה f ב- C ז"א קונסיסטנטי עם S ז"א מודל הלמידה מדוגמאות Learning.
עקרון ההכלה וההדחה.
יחס סדר חלקי.
תחשיב היחסים (הפרדיקטים)
Markov Decision Processes (MDP) תומר באום Based on ch. 14 in “Probabilistic Robotics” By Thrun et al. ב"הב"ה.
ניתוח תחבירי Top-Down נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח 1.
מתמטיקה בדידה תרגול 2.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
Points on a perimeter (Convex Hull) קורס – מבוא לעבוד מקבילי מבצעים – אריאל פנדלר יאיר ברעם.
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
מנתח LL(1) נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח 1.
ניתוח תחבירי (Parsing) של דקדוקי LL(1)
אתחול עצמים. אתחולים ובנאים יצירת מופע חדש של עצם כוללת: הקצאת זכרון, אתחול, הפעלת בנאים והשמה לשדות במסגרת ריצת הבנאי נקראים גם הבנאי/ם של מחלקת הבסיס.
Presentation by Gil Perry Supervised by Amos Fiat 1.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
Formal Specifications for Complex Systems (236368) Tutorial #1
מבוא למדעי המחשב סיבוכיות.
פרק 4 ניתוח התחביר תורת הקומפילציה איתן אביאור.
SQL בסיסי – הגדרה אינדוקטיבית
חיפוש לוקלי Local Search.
תיאוריית תכנון סכמות למסדי נתונים יחסיים חלק 4
בניית מחסנית סטטית Static Stack Implementation מורים מובילים תשע"ה
תזכורת מתרגולים אחרונים
Presentation transcript:

ניתוח תחבירי (Parsing) - המשך

תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית " – predictive) bottom-up – מהעלים לשורש – מעבירים למחסנית, או מחליפים צד ימין בסימן מהצד השמאלי של חוק הדקדוק (shift reduce) x y s  s

אלגוריתם LR

אלגוריתם LR(k) אלגוריתם LR(k) הוא אלגוריתם : bottom-up, מבוסס טבלאות, סורק את הקלט משמאל (L) לימין, מניב את הגזירה הימנית (R) ביותר, וזקוק ל -lookahead בגודל k. המקרה הפשוט ביותר הוא אלגוריתם LR(0).

שפות LL(k), LR(k) שפה נקראת LR(k) אם אפשר לגזור אותה בעזרת LR(k) parser. כל שפה LL(n) היא גם LR(n) – אבל לא להיפך. כלומר, LR מכיל ממש את LL.

אלגוריתם LR(0) מחסנית Parser קלט פלט טבלת פעולות טבלת goto

דקדוק פשוט לדוגמא... נשתמש בדקדוק הבא לצורך הדגמה : E → E * B | E + B | B B → 0 | 1 ממוספר, בצורה מסודרת : (1) E → E * B (2) E → E + B (3) E → B (4) B → 0 (5) B → 1

המחסנית המחסנית ב -LR מכילה מצבים ( מזוהים על - ידי מספר ). לצורך קריאות, נכלול במחסנית גם משתנים ואסימונים. למעשה, אין בכך צורך אמיתי מבחינת האלגוריתם. למעט מצב "0" שנמצא בתחתית המחסנית, כל שאר המחסנית תהיה מורכבת מזוגות של מצב + משתנה או מצב + אסימון. המחסנית ההתחלתית מכילה רק את מצב "0".

טבלת הפעולות טבלה זו מכתיבה את הפעולה לביצוע בכל שלב. שורות הטבלה : מצבים ( על - פי מספרים ). עמודות הטבלה : אסימונים אפשריים בקלט. תוכן הטבלה : הוראות ביצוע.

הוראות ביצוע הוראות הביצוע בטבלת הפעולות יכולות להיות : shift n מסומנת sn ( למשל s1, s2 וכו ') פירושה : העברת תו הקלט הבא למחסנית, ומעבר למצב n reduce m מסומנת rm ( למשל r1, r2 וכו ') פירושה : זיהינו כלל גזירה מס ' m accept מסומנת acc פירושה : הקלט נגזר בהצלחה. תאים ריקים – שגיאה בקלט.

טבלת Goto טבלת העזר השנייה משמשת במקרים בהם זיהינו גזירה של כלל. שורות הטבלה : מצבים עמודות הטבלה : משתנים תוכן הטבלה : מצבים. היות שלשתי הטבלאות אותן שורות, מקובל להציג אותן זו - לצד - זו.

למשל... (1) E → E * B (2) E → E + B (3) E → B (4) B → 0 (5) B → 1 טבלת goto טבלת הפעולות BE$10+* 43s2s10 r4 1 r5 2 accs6s53 r3 4 7s2s15 8s2s16 r1 7 r2 8

שאלה... עבור כל כלל rm, מדובר בכלל גזירה m אבל מה מסמנים המספרים עבור כללי sn? מהו טווח הערכים של n?

האלגוריתם אתחול המחסנית : "0" מצא את action[t, i] (i ראש המחסנית, t אסימון הקלט הבא ): אם מצאת shift n:  הסר את האסימון t מהקלט,  הוסף את t ואח " כ את n למחסנית. אם מצאת reduce m:  יהי w מספר התווים בצד ימין של כלל הגזירה מספר m. הסר 2w ערכים מהמחסנית.  יהי M המשתנה שגוזר כלל m. הוסף את M למחסנית.  מצא את goto[s, M] (s ראש המחסנית החדש ) והוסף אותו למחסנית. אם מצאת acc: סיום בהצלחה. אחרת : סיום בשגיאה. המשך עד לעצירה.

בניית הטבלה... למרבה הצער, הפעם לא בתרגול אלא בהרצאה. ראשית, כמה הגדרות.

פריטי LR(0) הגדרה : פריט LR(0) ( או בקיצור פריט, ובעברית item) הוא כלל גזירה עם " נקודה " מיוחדת בתוכו. מכלל גזירה עם n רכיבים מצד ימין ניתן לקבל n+1 פריטים. למשל, עבור הכלל E → E + B (3 רכיבים מימין ) נקבל את 4 הפריטים הבאים : E → ∙ E + B E → E ∙ + B E → E + ∙ B E → E + B ∙ כלל ε נחשב לכלל באורך 0, לכן מהכלל A → ε ניתן לקבל רק את הפריט : A → ∙

מה משמעותו של פריט ? פריט אינו באמת כלל גזירה ( בכללים האמיתיים אין את הנקודה ). פריט מסמל את מצבו של ה -parser. משמעותו : זיהינו את מה שנמצא לפני ( משמאל ) הנקודה ; אנו מצפים כעת למצוא את מה שנמצא אחריה ( מימינה ). למשל, הפריט : E → E ∙ + B מסמן כי ה -parser זיהה מחרוזת המתאימה ל -E בקלט, והוא כעת מצפה למצוא "+" ואחר - כך מחרוזת המתאימה ל -B.

קבוצות של פריטים למרבה הצער, בדרך - כלל לא ניתן לתאר את מצב ה -parser בעזרת פריט יחיד. למשל, אם זיהינו מחרוזת המתאימה ל -E, אנו עשויים להיות במצב E → E ∙ + B... אבל מצד שני, אולי אנו במצב E → E ∙ * B לכן מציינים את מצבו של ה -parser בעזרת קבוצה של פריטים. למשל, {E → E ∙ + B, E → E ∙ * B}

סגור של קבוצת פריטים אם קבוצת הפריטים הנוכחית כוללת מצב שבו הנקודה נמצאת לפני משתנה, קשה לדעת מה צריך להיות הפריט הבא בקלט. לשם כך בונים את קבוצת הסגור של קבוצת הפריטים. הגדרה : קבוצת הסגור של קבוצת פריטים : קבוצת פריטים שבה, עבור כל פריט בקבוצה מהצורה A → α ∙ B β ועבור כל כלל מהצורה B → δ בדקדוק, גם הפריט B → ∙ δ נמצא בקבוצה. בניית קבוצת הסגור היא איטרטיבית, משום שגם δ עשוי להתחיל במשתנה.

סגור של קבוצת פריטים – דוגמא למשל, עבור קבוצת הפריטים : C = { E → E + ∙ B } ובהנתן הדקדוק מהדוגמאות הקודמות, קבוצת הסגור היא : clos(C) = { E → E + ∙ B, B → ∙ 0, B → ∙ 1 }

דקדוק מורחב הגדרה : דקדוק מורחב הוא דקדוק שהוסיפו לו כלל יחיד, המבטיח שהגזירה האחרונה היא חד - משמעית בהיותה אחרונה. נרחיב את הדקדוק על - ידי הוספת כלל גזירה S → E, כאשר : S משתנה שלא היה קיים בדקדוק לפני - כן, והוא כעת המשתנה הראשון, E המשתנה הראשון המקורי של הדקדוק. נהוג למספר את הכלל החדש "0". (0) S → E (1) E → E * B (2) E → E + B (3) E → B (4) B → 0 (5) B → 1

מכונת המצבים והמצב ההתחלתי בבניית הטבלאות, אנו בונים למעשה מכונת מצבים דטרמיניסטית שכל מצב שלה מסומן על - ידי קבוצת סגור כלשהי של פריטים. המצב ההתחלתי הוא הסגור של הפריט הראשון מהכלל שהוספנו בבניית הדקדוק המורחב : S → ∙ E. S → ∙ E בדוגמא שלנו. המצב ההתחלתי בדוגמא שלנו הוא : clos({S → ∙ E }) = {S → ∙ E, E → ∙ E * B, E → ∙ E + B, E → ∙ B, B → ∙ 0, B → ∙ 1} זוהי " קבוצת פריטים 0".

המצבים הבאים איך מוצאים לאילו מצבים ניתן להגיע ממצב נתון ? א. מצא את כל הפריטים במצב הנוכחי, שבהם הנקודה נמצאת לפני סימן נתון כלשהו x. x יכול להיות אסימון או משתנה. נסמן קבוצת פריטים זו S ( תת - קבוצה של המצב הנוכחי ). ב. הזז את הנקודה צעד אחד ימינה עבור כל הפריטים ב -S. ג. מצא את הסגור של הקבוצה שהתקבלה. כל clos(S) שנמצא בעזרת הכללים הללו הוא מצב חדש שניתן להגיע אליו מהמצב הנוכחי, כאשר בקלט מופיע x.

למשל : מצבים שניתן להגיע אליהם ממצב 0 בדוגמא מצב 1: x = 0 S 1 = { B → ∙ 0 } S 1 = { B → 0 ∙ } clos(S 1 ) = { B → 0 ∙ } מצב 2: x = 1 S 2 = { B → ∙ 1 } S 2 = { B → 1 ∙ } clos(S 2 ) = { B → 1 ∙ } מצב 3: x = E S 3 = {S → ∙ E, E → ∙ E * B, E → ∙ E + B} S 3 = {S → E ∙, E → E ∙ * B, E → E ∙ + B} clos(S 3 ) ={S → E∙, E → E∙*B, E → E ∙ + B} מצב 4: x = B S 4 = { E → ∙ B } S 4 = { E → B ∙ } clos(S 4 ) = {E →B∙}

ממשיכים... ממשיכים למצוא את כל המצבים שניתן להגיע אליהם מכל אחד מהמצבים שמצאנו עד כה. ממצבים 1, 2 ו -4 בדוגמאות עד כה אין מצבי המשך ( משום שהנקודה תמיד נמצאת בסוף כל פריט בקבוצת סגור אלה ). ממצב 3 ניתן להגיע למצבים חדשים : מצב 5: x = * S 5 = { E → E ∙ * B } S 5 = { E → E * ∙ B } clos(S 5 ) = { E → E * ∙ B, B → ∙ 0, B → ∙ 1 } מצב 6: clos(S 6 ) = { E → E + ∙ B, B → ∙ 0, B → ∙ 1 }

וממשיכים... ממצב 5 ניתן להתקדם בעזרת הסימנים 0, 1 ו -B ( כערכים עבור x). אבל עבור x = 0 ועבור x = 1 נגיע שוב למצבים 1 ו -2, בהתאמה. עבור x=B: באופן דומה, ממצב 6, עבור x=B, נקבל את : למצבים אלה אין מצבי המשך ( מדוע ?) מצב 7: clos(S 7 ) = { E → E * B ∙ } מצב 8: clos(S 7 ) = { E → E + B ∙ }

בניית הטבלאות : טבלת המעברים הראשונית שורה עבור כל מצב. מתייחסים לטבלאות כאל טבלת מעברים של האוטומט. בשורה של מצב a, בעמודה שהיא ה -x ששימש לבניית מצב b, רושמים את b. טבלת goto טבלת הפעולות BE$10+*

בניית הטבלאות : מצבי הסיום מוסיפים acc בעמודה $ עבור כל מצב, שקבוצת הפריטים שלו כוללת את הפריט S → E ∙ טבלת goto טבלת הפעולות BE$10+* acc

בניית הטבלאות : פעולות shift כל ערך מספרי n בטבלת הפעולות הופך להוראת sn. טבלת goto טבלת הפעולות BE$10+* 43s2s accs6s53 4 7s2s15 8s2s16 7 8

בניית הטבלאות : פעולות reduce עבור כל מצב, שקבוצת הפריטים שלו כוללת את A → α ∙ כך שקיים בדקדוק כלל A → α שמספרו m (m>0): ממלאים את השורה של מצב זה ( בטבלת הפעולות ) בערך rm. טבלת goto טבלת הפעולות BE$10+* 43s2s10 r4 1 r5 2 accs6s53 r3 4 7s2s15 8s2s16 r1 7 r2 8

מחסנית האלגוריתם אמרנו שמחסנית ה -parser מכילה מספרי מצב וסמלים לסירוגין. סמל = אסימון או משתנה. אמרנו גם שלמעשה, האלגוריתם זקוק רק למספרי המצב שבמחסנית. הסמלים במחסנית מאפשרים לנו לקרוא את המחסנית כמסלול באוטומט של האלגוריתם. הסמלים שבין המצבים מסמנים את הקשתות דרכן עברנו.

מחסנית האלגוריתם למשל, אם המחסנית ברגע נתון היא : E E + 1

סוגי LR הטבלה שבנינו היא טבלה עבור LR(0). זאת משום שכללי reduce נוצרו רק על - ידי הפיכת שורה שלמה לשורה של הוראות reduce. כלומר, מבצעים reduce ללא תלות באסימון שבקלט – או במילים אחרות, אפס lookahead. ישנם שיפורים לאלגוריתם הבנייה... אלגוריתם CLR (Cannonic LR) או LR(1) – חזק אבל " כבד " אלגוריתם LALR (Look Ahead LR) – פשרה סבירה.

קונפליקטים בטבלאות כשמוסיפים הוראות reduce לשורה בטבלת הפעולות, לא מוחקים מה שכבר קיים בשורה זו. לכן ייתכן שבתאים מסוימים בטבלה יש שני ערכים ( או יותר ). מקרים כאלה נקראים קונפליקטים.

קונפליקט reduce/reduce קונפליקט reduce/reduce נוצר כשבתא אחד יש כמה אפשרויות שונות ל -reduce. למשל, נסו ליצור את הטבלה עבור הדקדוק הבא : E → A 1 E → B 1 A → 1 B → 1

קונפליקט shift/reduce כשבתא אחד יש גם הוראת reduce וגם הוראת shift, מקבלים קונפליקט shift/reduce. למשל, עבור הדקדוק הבא : E → 1 E E → 1

קונפליקטים מה הפירוש הסמנטי של קונפליקט המתקבל בדקדוק ? כיצד ניתן להתגבר על קונפליקטים ?