ניתוח לקסיקלי וכלי Lex.

Slides:



Advertisements
Similar presentations
ממיבחניםC שאלות ++.
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
טבלאות סמלים נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח.
Pointers הרצאה קריטית. השאלות הפתוחות מה זה ה- & שמופיע ב scanf מדוע כשמעבירים מחרוזת ל scanf אין צורך ב & האם ניתן להכריז על מערך שגדלו אינו ידוע בתחילת.
מבוא כללי למדעי המחשב תרגול 1. כתיבת התוכנה כתיבת התוכנית עצמה נעשית ע " י כתיבת קובץ טקסט רגיל אשר תוכנו מקיים את כללי שפת C כתיבת התוכנית עצמה נעשית.
ניתוח תחבירי (Parsing)
נכתב ע"י קירה רדינסקי תרגום לקוד ביניים נכתב ע"י קירה רדינסקי סמסטר אביב, תשס"ט.
1 Formal Specifications for Complex Systems (236368) Tutorial #2 Z notation; Examples.
מתמטיקה בדידה תרגול 3.
ניתוח תחבירי Top-Down.
מנתח LL(1) נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח.
מבני נתונים 1 – מבנה התרגולים
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
ניתוח תחבירי (Parsing) Wilhelm, and Maurer – Chapter 8 Aho, Sethi, and Ullman – Chapter 4 Cooper and Torczon – Chapter 3.
תרגום לקוד ביניים 1. מבנה סכמתי של קומפיילר עד כה ראינו: בפועל: ניתוח לקסיקלי ניתוח תחבירי ניתוח סמנטי backend ניתוח לקסיקלי ניתוח תחבירי ניתוח סמנטי.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct.
ניתוח תחבירי (Parsing) - המשך. תזכורת : סוגי הניתוח התחבירי top-down – מהשורש לעלים ( נקרא גם – " ניתוח תחזית " – predictive) bottom-up – מהעלים לשורש.
1 מבוא למדעי המחשב מבנה של תכנית. 2 מבנה של תכנית – חלוקה לקבצים  תכנית בשפת C הינה אוסף של הגדרות של:  משתנים (חיצוניים)  פונקציות  ניתן לפרוש תכנית.
תכנות תרגול 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) רועי מלמד
Backpatching 1. תזכורת מתרגול קודם קוד ביניים - שפת הרביעיות שיטות לייצור קוד ביניים –שימוש בתכונת code –כתיבה ישירה ל-buffer של פקודות שיטות לתרגום מבני.
נוצר ע " י ד " ר ארקדי שטיינבוק Visual Basic for Application VBA כדוגמה VBA ב - WORD.
רישום חומרי למידה והסטנדרט הישראלי: ISRACORE יהודית בר אילן, אוניברסיטת בר-אילן אלי שמואלי, מיט"ל.
The Cyclic Multi-peg Tower of Hanoi מעגלי חד-כווני סבוכיות הפתרון בגרסאות עם יותר מ-3 עמודים.
תכנות תרגול 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.
אלכסנדר ברנגולץ דואר אלקטרוני: אלכסנדר ברנגולץ דואר אלקטרוני: פעולות מורפולוגיות.
משטר דינמי – © 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 תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
מודל הלמידה מדוגמאות Learning from Examples קלט: אוסף של דוגמאות פלט: קונסיסטנטי עם פונקציה f ב- C ז"א קונסיסטנטי עם S ז"א.
ניתוח תחבירי Top-Down נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח 1.
תורת הקומפילציה הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.
מתמטיקה בדידה תרגול 2.
1 Spring Semester 2007, Dept. of Computer Science, Technion Internet Networking recitation #3 Internet Control Message Protocol (ICMP)
Points on a perimeter (Convex Hull) קורס – מבוא לעבוד מקבילי מבצעים – אריאל פנדלר יאיר ברעם.
(C) סיון טל גילוי מידע וזיהוי תבניות תרגול מס. 9 גילוי מידע וזיהוי תבניות תרגול מס. 9 דחיסת נתונים מהו קידוד תכונות של קידודים אי - שוויון קרפט.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מנתח LL(1) נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח 1.
ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.
ניתוח תחבירי (Parsing) של דקדוקי LL(1)
תכנות תרגול 1 שבוע : צור קשר מתרגל – ליעם רודיטי, ביה " ס למדעי המחשב. מתרגל – ליעם רודיטי, ביה " ס למדעי המחשב. דואר אלקטרוני :
Presentation by Gil Perry Supervised by Amos Fiat 1.
הגדרת משתנים יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8 Control (Part II)
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
1 מבוא למחשב שפת C תרגילי חזרה. 2 תרגיל 1 : מחשבון קלט : תרגיל חשבוני המורכב ממספרים שלמים עם פעולות חשבוניות ביניהם. התרגיל מסתיים ב =. אפשריים רווחים.
Contents Building Web Services כתב אקת'ם חאג' יחיא BuildingWeb Services Building Web Services
שיאון שחוריMilOSS-il מוטיבציה  python זה קל ו C זה מהיר. למה לא לשלב?  יש כבר קוד קיים ב C. אנחנו רוצים להשתמש בו, ולבסס מעליו קוד חדש ב python.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
1 תרגול 11: Design Patterns ומחלקות פנימיות אסף זריצקי ומתי שמרת 1 תוכנה 1.
תוכנה 1 תרגול 2: מערכים, לולאות והתמודדות עם שגיאות.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
SQL בסיסי – הגדרה אינדוקטיבית
תורת הקומפילציה הרצאה 1 מבוא; ניתוח לקסיקלי.
תזכורת מתרגולים אחרונים
ניתוח מערכות מידע תכנות ב C#
Shell Scripts בסביבת UNIX
תוכנה 1 תרגול 13 – סיכום.
תכנות מכוון עצמים ו- C++ יחידה 02 העמסת פונקציות, ערכי ברירת מחדל, enum, קימפול מותנה קרן כליף.
עקרונות בסיסיים בתכנות Visual Basic
Presentation transcript:

ניתוח לקסיקלי וכלי Lex

מבנה הקומפיילר קומפיילר ניתוח לקסיקלי תחבירי סמנטי backend תכנית בשפת המקור x = 2;

מבנה הקומפיילר רצף אסימונים backend ניתוח סמנטי ניתוח תחבירי ניתוח לקסיקלי תכנית בשפת המקור id assign num sep x = 2;

מבנה הקומפיילר עץ גזירה backend ניתוח סמנטי ניתוח תחבירי ניתוח לקסיקלי תכנית בשפת המקור S id assign E sep num x = 2;

מבנה הקומפיילר backend ניתוח סמנטי ניתוח תחבירי ניתוח לקסיקלי תכנית בשפת המקור האם קיים משתנה ששמו x? האם x מטיפוס int? x = 2;

מבנה הקומפיילר backend ניתוח סמנטי ניתוח תחבירי ניתוח לקסיקלי תכנית בשפת המקור ייצור קוד בשפת היעד x = 2;

הגדרות אסימון (token): יחידה בסיסית המשמשת כטרמינל בדקדוק שגוזר את שפת התכנות לקסמה (lexeme): מחרוזת בקלט שהמנתח הלקסיקלי התאים לאסימון כלשהו תבנית (pattern, regexp): ביטוי רגולרי שמגדיר את ההתאמה בין אוסף הלקסמות לאסימון מסוים דוגמה: ניתן להגדיר את האסימון num ע"י התבנית (0+1+…+9)+

תפקיד המנתח הלקסיקלי מחלק את קוד המקור לאסימונים ("מילים") מסנן חלקים שאינם דרושים להמשך הניתוח למשל, רווחים, ירידות שורה מה עם comments? מזהה שגיאות לקסיקליות - מחרוזות שאינן להיות אף אסימון למשל, "@" בשפת C

המנתח הלקסיקלי - דוגמה ניתוח לקסיקלי עבור “x = y + 2”: \n 2 + y = x num op id assign לקסמות אסימונים המנתח לא יחזיר אסימון

המנתח הלקסיקלי ותכונות סמנטיות הלקסמות אינן עוברות הלאה לשלבים הבאים בניתוח הנמתח התחבירי אינו צריך אותן המנתח הסמנטי כן צריך מידע עליהן: האם קיים משתנה ששמו x? איזו פעולה בדיוק הופעלה? המנתח הלקסיקלי מחשב לכל אסימון תכונות סמנטיות: id {name = “x”} op {type = “+”} התכונות הסמנטיות ידונו בהרחבה בהמשך

כלי Lex כלי לייצור מנתחים לקסיקליים צורת הפעלה: הגדרת מנתח לקסיקלי lex קוד של המנתח (lex.yy.c) מנתח לקסיקלי gcc בקורס נעבוד עם כלי תואם Flex

בניית מנתח לקסיקלי בעזרת Lex עריכת קובץ הגדרת המנתח (source.lex) flex source.lex gcc –ll lex.yy.c

מבנה קובץ הגדרות המנתח קובץ הגדרות מורכב משלושה חלקים המופרדים בעזרת שורות שמכילות "%%" בלבד: Definition section %% Rules section C code section

דוגמה למבנה קובץ הגדרות המנתח

דוגמה למבנה קובץ הגדרות המנתח Definitions section

דוגמה למבנה קובץ הגדרות המנתח הגדרות של שפת C - קוד מועתק כפי שכתוב לקובץ ש-Lex מייצר אופציות השולטות על צורת העבודה של Flex הגדרת מקרואים בעזרת ביטויים רגולריים - לשימוש בחלק הבא

ביטויים רגולריים של Lex ביטוי רגולרי "רגיל" משמעות a התו a . Σ \ {\n} כל תו פרט לירידת שורה [xyz] [a-z] x+y+z a+b+c+…+z אחד מהתווים שבתוך הסוגריים r* r+ מספר כלשהו של r-ים כולל אפס / לא כולל אפס דוגמאות נוספות ניתן למצוא באתר הקורס

דוגמה למבנה קובץ הגדרות המנתח Rules section הגדרות של אסימונים ופעולות ש-Lex צריך לבצע בעת זיהוי שלהם

דוגמה למבנה קובץ הגדרות המנתח משתנים גלובליים של Lex C code section הגדרות פונקציות שהוכרזו בחלק ראשון

משתנים גלובליים של Lex שם טיפוס משמעות yytext char * הטקסט של הלקסמה האחרונה שזוהתה yyleng int אורך הלקסמה האחרונה שזוהתה yylineno השורה הנוכחית בקלט yylval user defined משמש לתקשורת עם המנתח התחבירי (פרטים בהמשך...)

דוגמה למבנה קובץ הגדרות המנתח

תכונות המנתח הלקסיקלי ש-Lex בונה קורא קלט מ-stdin וכותב פלט ל-stdout רוב העבודה נעשית בפונקציה yylex שתפקידה: לקרוא את הקלט לזהות אסימונים לבצע את פעולה המתאימה לאסימון yylex חוזרת רק כאשר: המשתמש כתב return בפעולה של אסימון מגיעה לסוף קלט

טיפול בשגיאות ניתוח שגיאת ניתוח נוצרת כאשר בנקודה מסוימת yylex לא מצליחה לזהות אף אסימון במקרה כזה, היא מעתיקה את התו הנוכחי לפלט ומנסה שוב מהתו הבא דוגמה: abc$178 מזוהה כ-id לא מזוהה ולכן מודפס לפלט מזוהה כ-num

טיפול בשגיאות ניתוח (המשך) כדי לתת הודעת שגיאה יותר מפורטת, ניתן להשתמש באסימון הנקודה (.) בתור אסימון אחרון כפי שנעשה בדוגמה:

מחרוזות שיגרמו לקונפליקט פתרון קונפליקטים קונפליקט נוצר כאשר אותו קלט יכול להתאים למספר אסימונים דוגמה: נניח שמוגדרים האסימונים הבאים: for “for” id [a-z]+ מחרוזות שיגרמו לקונפליקט ניתוחים אפשריים abc ford for

מחרוזות שיגרמו לקונפליקט פתרון קונפליקטים קונפליקט נוצר כאשר אותו קלט יכול להתאים למספר אסימונים דוגמה: נניח שמוגדרים האסימונים הבאים: for “for” id [a-z]+ מחרוזות שיגרמו לקונפליקט ניתוחים אפשריים abc a, ab, abc ford for, ford, f, fo for for (id) / for (for)

הכללים לפתרון הקונפליקט המנתח חמדן – תמיד מעדיף את הלקסמה הארוכה ביותר שניתן לבחור אם כלל (1) לא פתר את הקונפליקט, בוחרים באסימון בעל עדיפות גבוהה יותר האסימון שמופיע ראשון

מחרוזות שיגרמו לקונפליקט פתרון הדוגמה נניח שמוגדרים האסימונים הבאים: for “for” id [a-z]+ מחרוזות שיגרמו לקונפליקט ניתוחים אפשריים הניתוח שייבחר לפי כלל abc a, ab, abc 1 ford for, ford, f, fo for for (id) / for (for) for (for) 2

מקורות נוספים דוגמאות לשימוש ב-Lex ניתן למצוא באתר הקורס שימוש ב-manual מותקן על Lex וביטויים רגולריים: man lex man –s 5 regexp אתר הבית של כלי Flex: http://flex.sourceforge.net מדריך לשימוש ב-Flex: http://www.gnu.org/software/flex/manual/html_node/flex_toc.html