Presentation is loading. Please wait.

Presentation is loading. Please wait.

ניתוח תחבירי (Parsing) Wilhelm, and Maurer – Chapter 8 Aho, Sethi, and Ullman – Chapter 4 Cooper and Torczon – Chapter 3.

Similar presentations


Presentation on theme: "ניתוח תחבירי (Parsing) Wilhelm, and Maurer – Chapter 8 Aho, Sethi, and Ullman – Chapter 4 Cooper and Torczon – Chapter 3."— Presentation transcript:

1 ניתוח תחבירי (Parsing) Wilhelm, and Maurer – Chapter 8 Aho, Sethi, and Ullman – Chapter 4 Cooper and Torczon – Chapter 3

2 scanner generator symbol specification Input program scanner symbol string scanning table תזכורת – ה - scanner: מפורמליזם לתוכנה יתרונות המפרט – קצר יחסית אפשר לוודא שהמפרט תקין התוכנה קלה לתחזוקה לשיטת ה - generation שימושים נוספים בקומפילציה ובשטחים נוספים scanner scanning table driver

3 parse generator grammar tokens parser syntax tree parsing: מפורמליזם לתוכנה המתאר – דומה לזה של יצירת scanners הפורמליזם והשיטות – שונים הפורמליזם – דקדוק חסר הקשר האמצעי – אוטומט מחסנית סופי parsing tables driver parser parsing tables

4 טיפול בשגיאות – נושא חשוב סוגי שגיאות שגיאות לקסיקליות ( טעויות " דפוס ") שגיאות תחביריות ( סוגרים לא מאוזנים ) שגיאות סמנטיות ( אופרנדים מטיפוס לא מתאים ) שגיאות לוגיות ( לולאה אינסופית ) דרישות דיווח על שגיאות בצורה ברורה היחלצות מהירה משגיאות כך שאפשר יהיה לגלות שגיאות המופיעות בהמשך שימור יעילות ה -parser

5 גישות לטיפול בשגיאות panic mode – השמטת קטעים מהקלט עד מציאת אות המשמשת לסינכרוניזציה ( למשל ";") phrase-level recovery – נסיונות תיקון מקומיים החלפת "," ב ";" error production - טיפול במצבים מיוחדים, בשיטות דקדוקיות global correction – יקר, לא פרקטי

6 דקדוק חסר הקשר G=(V, T, P, S) V – nonterminals, משתנים T – terminals, טרמינלים, tokens P – חוקי גזירה P = V  (V U T)* S – משתנה תחילי S  V

7 דוגמא סימון מלא סימון מקוצר {E, A}V = { (, ), -, id, +, -, , /,  }T = A  +,,{ E  E A EP = A  ‒,,E  ( E ) A  ,,E  - E A   }A  /,,E  id ES = E A E | ( E ) | - E | idE  + | ‒ |  | / |  A 

8 דקדוק חסר הקשר - דוגמא E → E A E | ( E ) | – E | id A → + | – | * | / | ^

9 שפה חסרת הקשר גזירה – סדרה של החלפות של אותיות לא טרמינליות תוך שימוש בחוקי הגזירה שפה – אוסף ביטויים הנגזרים מהמצב התחילי והמכילים טרמינלים בלבד E A E  E id A E  id + E  id + id  סימון הגזירה

10 שפה חסרת הקשר גזירה – סדרה של החלפות של אותיות לא טרמינליות תוך שימוש בחוקי הגזירה שפה – אוסף ביטויים הנגזרים מהמצב התחילי והמכילים טרמינלים בלבד תבנית פסוקית (sentential form) – תוצאת סדרת גזירות בה נותרו ( אולי ) לא - טרמינלים E  * id + E גזירה שמאלית – גזירה בה מוחלף בכל שלב הסימן השמאלי ביותר ( באופן דומה – גזירה ימנית ) גזירה רב שלבית E EEA E id  EAE E  EAE E +  EAE E + 

11 דוגמא נתון דקדוק S → a A c B e A → A b | b B → d קלט – a b b c d e a b b c d e נבחר בשמאלית a A b c d e נבחר בשמאלית a A c d e a A c B e A A 3 אלטרנטיבות B A B S A

12 דוגמא נתון דקדוק S → a A c B e A → A b | b B → d קלט – a b b c d e a b b c d e נבחר בשמאלית a A b c d e נבחר בשמאלית a A c d e a A c B e A A 3 אלטרנטיבות B A B S A

13 דוגמא נתון דקדוק S → a A c B e A → A b | b B → d קלט – a b b c d e a b b c d e נבחר בשמאלית a A b c d e נבחר בשמאלית a A c d e a A c B e A A 3 אלטרנטיבות B A B S A

14 דוגמא נתון דקדוק S → a A c B e A → A b | b B → d קלט – a b b c d e a b b c d e נבחר בשמאלית a A b c d e נבחר בשמאלית a A c d e a A c B e A A 3 אלטרנטיבות B A B S A

15 דוגמא נתון דקדוק S → a A c B e A → A b | b B → d קלט – a b b c d e a b b c d e נבחר בשמאלית a A b c d e נבחר בשמאלית a A c d e a A c B e A A 3 אלטרנטיבות B A B S A

16 ביטוי רגולרי ודקדוק חסר הקשר כל מבנה שניתן לבטא ע " י ביטוי רגולרי יכול להיות מתואר ע " י דקדוק ההיפך לא נכון ( למשל ?) אין " תורה מסיני " לגבי מה לשים במנתח הלקסיקלי ומה בדקדוק ביטוים רגולרים שימושיים עבור תאור מבנים לקסיקלים כ - identifiers, קבועים, מילות מפתח וכו ' דקדוקים שימושיים עבור מבנים מקוננים כסוגרים מאוזנים, התאמת begin- end, וכו '

17 סוגי הניתוח התחבירי כל דקדוק חסר - הקשר שקול לאוטומט מחסנית. אז למה שלא נבנה אוטומט מחסנית ונשתמש בו בתור מנתח תחבירי ? כללי : Cocke-Younger-Kasami – לכל דקדוק נבדוק את כל האפשרויות... O(n 3 ) – אינו מעשי המטרה פענוח ובנית עץ הגזירה תוך מעבר בודד על הקלט, משמאל לימין בכל שלב, הקלט w מתחלק ל x y החלק שטרם נקרא חלק הקלט שקראנו

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

19 אלגוריתם Recursive Descent מתרגם דקדוק באופן הבא : עבור כל nonterminal מגדירים פונקציה. המנתח מתחיל לפעול מהפונקציה המתאימה ל - nonterminal הראשון. כל פונקציה מחקה את החוק שעבורו הוגדרה, באופן הבא :  terminal מתורגם לקריאת האסימון המתאים מהקלט.  nonterminal מתורגם להפעלת הפונקציה המתאימה לו. אם ישנם כמה חוקי גזירה עבור אותו nonterminal, בוחרים ביניהם בעזרת lookahead. ניתוח top-down בעזרת Recursive Descent

20 פונקציית עזר : match void match(token t) { if (lookahead == t) lookahead = next_token(); else error; } פונקצייה זו משמשת כדי לקרוא טרמינלים. ה -lookahead הוא של אסימון אחד בלבד.

21 כתיבת פונקציות בהתאם לדקדוק למשל, עבור הדקדוק : E → LIT | ( E OP E ) | not E LIT → true | false OP → and | or | xor נגדיר שלוש פונקציות : E, LIT ו -OP

22 כתיבת פונקציות בהתאם לדקדוק void E() { if (lookahead  {TRUE, FALSE})// E → LIT LIT(); else if (lookahead = LPAREN)// E → ( E OP E ) match(LPARENT); E(); OP(); E(); match(RPAREN); else if (lookahead = NOT)// E → not E match(NOT); E(); else error; }

23 כתיבת פונקציות בהתאם לדקדוק void LIT() { if (lookahead = TRUE) match(TRUE); else if (lookahead = FALSE) match(FALSE); else error; }

24 כתיבת פונקציות בהתאם לדקדוק void OP() { if (lookahead = AND) match(AND); else if (lookahead = OR) match(OR); else if (lookahead = XOR) match(XOR); else error; }

25 איך מחליטים ? אם יש כמה כללים שונים לאותו nonterminal, יש לבחור ביניהם. בדוגמה האחרונה הסתפקנו ב -lookahead של אסימון יחיד. פורמלית : עבור כלל A→α, נגדיר : FIRST(α) – רשימת האסימונים שהם ראשונים באחת או יותר גזירות אפשריות הנובעות מכלל זה. בדוגמה שלנו, עבור הכללים ל -E: FIRST(LIT) = { true, false } FIRST( ( E OP E ) ) = { ( } FIRST(not E) = { not }

26 איך מחליטים ? אם אין חיתוך בין כל ה -FIRSTs עבור הכללים השונים ל -nonterminal נתון, אין כל בעיה. אם יש חיתוך... צריך לתקן את הדקדוק או להשתמש ב -lookahead עמוק יותר.

27 בעיות איך מתגברים על כללי -ε, או כללים המתחילים ב - ε? מה קורה עם רקורסיה שמאלית ? E → E A E | ( E ) | – E | id A → + | – | * | / | ^

28 בעיות איך מתגברים על כללי -ε, או כללים המתחילים ב - ε? זו הופכת להיות ברירת המחדל. מה קורה עם רקורסיה שמאלית ? E → E A E | ( E ) | – E | id A → + | – | * | / | ^ מחליפים את הדקדוק. לכל דקדוק עם רקורסיה שמאלית יש דקדוק מקביל בלעדיה.


Download ppt "ניתוח תחבירי (Parsing) Wilhelm, and Maurer – Chapter 8 Aho, Sethi, and Ullman – Chapter 4 Cooper and Torczon – Chapter 3."

Similar presentations


Ads by Google