Download presentation
Presentation is loading. Please wait.
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 → + | – | * | / | ^ מחליפים את הדקדוק. לכל דקדוק עם רקורסיה שמאלית יש דקדוק מקביל בלעדיה.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.