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

Slides:



Advertisements
Similar presentations
תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
1 Formal Specifications for Complex Systems (236368) Tutorial #4 Refinement in Z: data refinement; operations refinement; their combinations.
מבוסס על הרצאות של יורם זינגר, האוניברסיטה העברית י"ם
צורה נורמלית של גרייבך הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 11.
ניתוח לקסיקלי וכלי Lex.
ניתוח תחבירי (Parsing)
Theory of Compilation Erez Petrank Lecture 2: Syntax Analysis, Top-Down Parsing 1.
מכונת מצבים תרגול מס' 4 Moshe Malka.
מתמטיקה בדידה תרגול 3.
ניתוח תחבירי Top-Down.
מנתח LL(1) נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
דקדוקים חסרי הקשר Word categories (part of speech): NNountable, dogs, justice, oil VVerbrun, climb, love, ignore ADJAdjective green, fast, angry ADVAdverbsquickly,
Inverse kinematics (Craig ch.4) ב"ה. Pieper’s solution נתבונן ברובוט עם 6 מפרקי סיבוב כאשר שלושת הצירים של המפרקים האחרונים נחתכים. נקודת החיתוך נתונה.
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
מה החומר למבחן ? כל החומר שנלמד בהרצאות ובתרגולים. לגבי backtracking: לא תידרשו לממש אלגוריתם, אך כן להבין או להשלים מימוש נתון. אחת משאלות המבחן מבוססת.
אוטומט מחסנית הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 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.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית " – predictive) bottom-up – מהעלים לשורש.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
צורות נורמליות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 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.
Questions are the Answer Penick&all H ISTORY R ELATIOINSHIPS A PPLICATION S PECULATION E XPLANATION.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
CS 310 – Fall 2006 Pacific University CS310 Parsing with Context Free Grammars Today’s reference: Compilers: Principles, Techniques, and Tools by: Aho,
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
טיב פני שטח (טפ"ש) טיב פני שטח- רמת החלקות של המשטח.
Data Structures, CS, TAU, Perfect Hashing 1 Perfect Hashing בעיה : נתונה קבוצה S של n מפתחות מתחום U השוואה ל - Hash : * טבלה קבועה (Hash רגיל - דינאמי.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
1 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.
1 Data Structures, CS, TAU, Perfect Hashing בעיה: נתונה קבוצה S של n מפתחות מתחום U השוואה ל- Hash : * טבלה קבועה (Hash רגיל - דינאמי) * רוצים זמן קבוע.
משטר דינמי – © Dima Elenbogen :14. הגדרת cd ו -pd cd - הזמן שעובר בין הרגע שראשון אותות הכניסה יוצא מתחום לוגי עד אשר אות המוצא יוצא מתחום.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
מודל הלמידה מדוגמאות Learning from Examples קלט: אוסף של דוגמאות פלט: קונסיסטנטי עם פונקציה f ב- C ז"א קונסיסטנטי עם S ז"א מודל הלמידה מדוגמאות Learning.
עקרון ההכלה וההדחה.
יחס סדר חלקי.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
Markov Decision Processes (MDP) תומר באום Based on ch. 14 in “Probabilistic Robotics” By Thrun et al. ב"הב"ה.
ניתוח תחבירי Top-Down נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח 1.
תורת הקומפילציה הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.
מתמטיקה בדידה תרגול 2.
DTD Inference for Views of XML Data Yannis Papakonstantinou and Victor Vianu U.C. San Diego Given by Irit Gefner
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
Safari On-line books. מה זה ספארי ספארי זו ספריה וירטואלית בנושא מחשבים היא כוללת יותר מ כותרים כל הספרים הם בטקסט מלא ניתן לחפש ספר בנושא מסוים.
בקרה תומר באום ב"הב"ה. סוגי בקרה חוג פתוח Open-loop control : אנו מכוונים את הרובוט למצב הבא שהוא אמור להיות בו לפי מודל מסוים, כמו שעשינו בקינמטיקה הפוכה.
מנתח LL(1) נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח 1.
ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.
ניתוח תחבירי (Parsing) של דקדוקי LL(1)
1 מבוא למדעי המחשב רקורסיה. 2 רקורסיה היא שיטה לפתרון בעיות המבוססת על העיקרון העומד ביסוד אינדוקציה מתמטית: אם ידועה הדרך לפתור בעיה עבור המקרים הבסיסיים.
Theory of Compilation Erez Petrank Lecture 2: Syntax Analysis, Top-Down Parsing 1.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Compiler Principles Fall Compiler Principles Lecture 3: Parsing part 2 Roman Manevich Ben-Gurion University.
COP4020 Programming Languages Parsing Prof. Xin Yuan.
שיאון שחוריMilOSS-il מוטיבציה  python זה קל ו C זה מהיר. למה לא לשלב?  יש כבר קוד קיים ב C. אנחנו רוצים להשתמש בו, ולבסס מעליו קוד חדש ב python.
Compiler Principles Fall Compiler Principles Lecture 2: Parsing part 1 Roman Manevich Ben-Gurion University 1.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
Lecture 02b – Syntax analysis: top-down parsing Eran Yahav 1.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Parsing with Context Free Grammars
עבודה עם נתונים באמצעות ADO.NET
בעיות נוספות ב-NPC.
תורת הקומפילציה הרצאה 1 מבוא; ניתוח לקסיקלי.
תזכורת מתרגולים אחרונים
תזכורת על מה דיברנו שיעור שעבר? בנינו אתר אינטרנט עם כותרות
Parsing CSCI 432 Computer Science Theory
Presentation transcript:

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

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

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

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

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

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

דוגמא סימון מלא סימון מקוצר {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 

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

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

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

דוגמא נתון דקדוק 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

דוגמא נתון דקדוק 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

דוגמא נתון דקדוק 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

דוגמא נתון דקדוק 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

דוגמא נתון דקדוק 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

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

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

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

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

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

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

כתיבת פונקציות בהתאם לדקדוק 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; }

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

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

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

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

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

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