תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי
DESCRIPTION
תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי. תורת הקומפילציה 236360. מרצה: פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום חמישי 13:30-14:30 טאוב 528 מתרגלים קירה רדינסקי , מתרגלת אחראית גלעד קותיאל. אדמיניסטרציה. אתר: http://webcourse.cs.technion.ac.il/236360 25% - תרגילי בית - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/1.jpg)
1
236360תורת הקומפילציה 1הרצאה
מבוא; ניתוח לקסיקלי
![Page 2: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/2.jpg)
2
236360תורת הקומפילציה
פרופ"ח ארז פטרנקמרצה: ••erez@cs528 טאוב 13:30-14:30שעת קבלה – יום חמישי •
מתרגלים•, מתרגלת אחראיתקירה רדינסקי–גלעד קותיאל–
![Page 3: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/3.jpg)
3
אדמיניסטרציה
http://webcourse.cs.technion.ac.il/236360 אתר:• - תרגילי בית25%•
תרגילים "יבשים", רשות )מגן(5%– תרגילים "רטובים", חובה20%–
- מבחן סוף הקורס75%•ציון נכשל במבחן גורר כשלון בקורס, ללא קשר לציון •
התרגילים. 236353קדם: אוטומטים ושפות פורמליות •מועד ג' למילואימניקים )בלבד(.•העתקות...•
![Page 4: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/4.jpg)
4
ספרות
ספר עיקרי•A.V. Aho, M. S. Lam, R. Sethi, and J.D. Ullman – “Compilers – Principles, Techniques, and Tools”, Addison-Wesley, 2007
ספר משני•R. Wilhelm, and D. Maurer – “Compiler Design”, Addison-Wesley, 1995
![Page 5: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/5.jpg)
5
ספרות-המשךספר נוסף•
K.D.Cooper and L.Torczon
“Engineering A Compiler”, Morgan Kaufmann, 2004
![Page 6: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/6.jpg)
6
פרס טיורינג
March 10, 2009:
ACM has named Barbara Liskov the recipient of the 2008 ACM A.M. Turing Award for her contributions to practical and theoretical foundations of programming language and system design.
![Page 7: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/7.jpg)
7
מורכבות
קומפילציה
שפות תכנות
הנדסת תכנה
מבנה מחשבים
מערכות הפעלהשפות פורמליות
אלגוריתמים
מבני נתונים
משלב תחומים רבים ממדעי המחשב•משלב מחקר תיאורטי ומעשי•
![Page 8: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/8.jpg)
8
קומפילציה )הידור( – מושגי יסוד
זמן קומפילציה•
זמן ריצה•
compilersource program target program
target program
outputinput
![Page 9: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/9.jpg)
9
(= פרשנות)אינטרפרטציה
interpreter
source program
input
output
שימושים:שפות סקריפט שבהם כל שורה קוראת לביצוע של משהו מורכב )אין טעם -
ליעל(( שבהן הנתונים מורכבים ואינם ידועים APL, Mathlabשפות מאד גבוהות )-
בעת הקומפילציה
![Page 10: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/10.jpg)
10
דוגמא למבנה מודרני חשוב - Java
source program
inputoutput
Translator )javac(
Intermediate program)bytecode(
Bytecode is standard,machine-independent
Just In Time ,תוך כדי פרשנות התכנית -- מבצע קומפילציה של חלקי interpreterה-
תוכנית על מנת שהמשך הביצוע יהיה מהיר יותר.
Java Virtual Machine
Virtual machine תלוי מכונה. מבצע טוב כפי -יכולתו על המכונה הנתונה.
![Page 11: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/11.jpg)
11
הידור / אינטרפרטציה – הכללות
•Source to Source
•Virtual Machine
•Pre-processors
C ++ program C programtranslator
Java bytecodeJava program compiler
“pure” programprogram with embeddedpre-pocessing statements(e.g., #include, macros)
preprocessor
![Page 12: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/12.jpg)
12
שימושים של קופיילריםיעד
,SPARC, P690קוד מכונה: •IA32
שפת אסמבלי•קוד עבור אינטרפרטר:•
– Java Virtual Machine, P-Code… ,
שפות עבוד טקסט: •PostScript, TeX, html,
RTF … ,תוכנה למכשור•מעגל חשמלי•
קלט ,C, Pascalשפות תכנות:•
Assembler ...,שפות לעיבוד טקסט: •
PostScript, TeX, html, RTF …,
,scripting: C-shellשפות •emacs, perl, Hypercard…
שפות שאילתה לעבוד •(SQLנתונים )
שפות לתיאור חומרה •(VHDL)
שפות בקרה•
![Page 13: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/13.jpg)
13
כלים נוספים לעיבוד שפה – דוגמא
Skeletal source program
Preprocessor
Source program
Target assembly program
Assembler
Relocateable machine code
Loader/Link-editor
Absolute machine code
compiler
Library, releasable, object files
איסוף מודולים, פתיחת מקרואים.
כתובות יחסיות, הפניות לספריה
:Linkכתובות יחסיות, לכל התוכנית
:Loadכתובות אבסולוטיות
![Page 14: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/14.jpg)
14
קומפילציה – חשיבות התחום
לפיתוח שמושים מתקדמים•ניצול של כלים לפיתוח קומפיילרים להקלת מאמץ הפיתוח– אוטומטית של קבצי קלטקריאה )ו"הבנה"(–
למפתחי תוכנה•הבנה של האבחנה בין זמן קומפילציה לזמן ריצה–הבנה של מה יעשה קומפיילר עם התוכנה שלכם–
)שיפור זמן ריצה, התראות של שגיאות(שימוש נכון במבנים שונים של שפות התכנות–ניצול נכון של ארכיטקטורת המחשב–
![Page 15: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/15.jpg)
15
קומפילציה – חשיבות התחום
לאנשי שפות תכנות•תמיכה יעילה בשפה חדשה–
לאנשי ארכיטקטורה של מחשבים•הבנה טובה של האיזון העדין שבין חומרה לתכנה– מה תעשה כל הבנה מעמיקה מה יעשה קומפיילר )כלומר:–
תוכנה( עם החומרה שלכם
![Page 16: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/16.jpg)
16
תורת הקומפילציה – תוכן הקורס
מבוא•מבנה הקומפיילר•(lexical analysisניתוח מילוני )•(parsingניתוח תחבירי )•ניתוח סמנטי•יצירת קוד•סביבת זמן הריצה )טיפול ברוטינות, ניהול זיכרון, וכו'(•נושאים מתקדמים:•
, Data-flow analysisאופטימיזציות, ניתוח סטטי, – Virtual ו-Just-In-Timeלא נדבר על: קומפיילרים –
Machines ,
![Page 17: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/17.jpg)
17
מבנה הקומפיילר – תמונה כללית
Wilhelm and Maurer – Chapter 6
Aho, Sethi, and Ullman – Chapter 1
Cooper and Torczon – Chapter 1
![Page 18: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/18.jpg)
18
קומפיילר – כקופסא שחורה
target code
int a, b;a = 2;b = a*2 + 1;
SET R1,2STORE #0,R1SHIFT R1,1STORE #1,R1ADD R1,1STORE #2,R1
source code
מתרגם משפת המקור לשפת היעד• )עושה אותו תוכנית זהה סמנטית•
דבר(כיוון שהתירגום מסובך, חילקו אותו •
לשלבים מודולריים סטנדרטיים.
![Page 19: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/19.jpg)
19
קומפיילר – חלוקה גסה
תוכנית מקור
תוכנית מטרה
analysis
code optimization
code generation
יצוג ביניים
ייצוג ביניים
Front End
Back End
![Page 20: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/20.jpg)
20
מרכיבי הקומפיילר – חלוקה עדינהCharacter Stream
Lexical Analyzer
Token Stream
Syntax Analyzer
Syntax Tree
Semantic Analyzer
Decorated Syntax Tree
Machine-IndependentCode Optimization
Intermediate Representation
Code Generator
Target Machine Code
Machine-Dependent Code Optimization
Intermediate Code Generator
Intermediate Representation
Target Machine Code
![Page 21: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/21.jpg)
21
Front Endמרכיבי הקומפיילר – Character Stream
Lexical Analyzer
Token Stream
Syntax Analyzer
Syntax Tree
Semantic Analyzer
Decorated Syntax Tree
Intermediate Code Generator
קל, טיפול בביטויים רגולריים
יותר מסובך, רקורסיבי, עבודהעם דקדוק חסר הקשר.
יותר מסובך, רקורסיבי, דורש עליה וירידה בעץ של הגזירה.
השטחת העץ. חלק האופטימיזציות נח לעשות על עץ, וחלק על קוד
![Page 22: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/22.jpg)
22
דוגמה לתפקידי החלקים
![Page 23: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/23.jpg)
23
דוגמה לתפקידי החלקים
![Page 24: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/24.jpg)
24
טבלת הסמלים
. שומר את התכונות שלו identifierמבנה נתונים לכל •(attributes.ומאפשר גישה מהירה )
.scopeלדוגמא: מיקום בזיכרון, טיפוס, –הטבלה נבנית במהלך הניתוח. למשל: הניתוח הלקסיקלי לא מגלה מה –
הטיפוס. רק השלב של ייצור הקוד יודע את מיקום המשתנה בזיכרון, וכיו"ב.
![Page 25: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/25.jpg)
25
הודעות שגיאה
חלק חשוב של תהליך הקומפילציה•כל שלב מגלה שגיאות ברמת הניתוח שלו של התוכנית.•
מודיע על השגיאה–ומנסה כמיטב יכולתו להמשיך בקומפילציה–
![Page 26: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/26.jpg)
26
יתרון חשוב של מודולריות ...שפה בשפה א
analysis 1 analysis n analysis 2
machine independent optimization
machine dependent optimization
code generation
machine dependent optimization
code generation
mמכונה 1מכונה
…
![Page 27: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/27.jpg)
27
שפת ביניים
שפה קלה לייצור, שקל לייצר ממנה קוד אמיתי, ונוחה לעבודה •לאופטימיזציה.
שבה כל three-address codeאנו נשתמש בצורה הנקראת •תא בזיכרון יכול לשמש פרמטר לכל פעולה.
temp1 := inttoreal)60(temp2 := id3 * temp1temp3 := id2 + temp2id1 := temp3
![Page 28: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/28.jpg)
28
שלב האופטימיזציה
יצירת קוד הביניים נעשית בצורה אוטומטית. •הקוד ניתן לשיפור•
temp1 := inttoreal)60(temp2 := id3 * temp1temp3 := id2 + temp2id1 := temp3
temp1 := id3 * 60.0id1 := id2 + temp1
![Page 29: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/29.jpg)
29
שלב האופטימיזציה
Decorated Syntax Tree
Decorated Syntax Tree
machine independent optimization
דוגמאות•–constant propogation–common subexpressions–dead code elimination
![Page 30: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/30.jpg)
30
אופטימיזציה
-שלם או לא ניתן להכרעה, NPלא ניתן לייצר קוד אופטימלי )•תלוי מה מנסים לעשות...(. לכן משתמשים בהיוריסטיקות.
חובה לשמור על נכונות; צריך לשפר )כמעט תמיד(; חישוב •האופטימיזציה צריך להיות יעיל.
שיפורים: מהירות, מקום, אנרגיה, וכו'.•החלק שתופס זמן מירבי בתהליך הקומפילציה.•השאלה העיקרית: כמה זמן שווה להשקיע באופטימיזציה עבור •
ייעול תוכנית המטרה..JITהתשובה מאוד משתנה עבור –
![Page 31: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/31.jpg)
31
אופטימיזציה מודרנית
האתגר העיקרי הוא לנצל פלטפורמות מודרניות•–Multicores פקודות ווקטוריות–היררכית זיכרונות–(?Java Bytecodeהאם הקוד מועבר ברשת )–
![Page 32: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/32.jpg)
32
back-end)שלב הסינתזה )
decorated syntax tree
decorated syntax tree
target program
target program
address assignmet
code generation
machine dependent optimizationpeephole optimizer
![Page 33: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/33.jpg)
33
(Code Generation)ייצור קוד
ייצור קוד של שפת המטרה.שלב אחרון:•משימה חשובה: החלטה על מיקום המשתנים בזיכרון.•האתגר העיקרי: לאיזה משתנים יוקצו רגיסטרים באיזה שלב •
של התוכנית?פעולות על רגיסטרים מהירות משמעותית מפעולות על הזיכרון.–
-קשה(, NPהשמה אופטימלית למקרה הגרוע ביותר היא קשה )•היוריסטיקות מאד טובות קיימות.
![Page 34: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/34.jpg)
34
, דוגמאback-endה- a = 2temp1 = a*2b = temp1 + 1
addressassignment
machine indep.optimization
machine-dependent
optimization
a0temp1 1
b2a = 2temp1 = a << 1b = temp1 + 1
SET R1,2STORE #0,R1LOAD R1,#0SHIFT R1,1STORE #1,R1LOAD R1,#1ADD R1,1STORE #2,R1
int a, b;a = 2;b = a*2 + 1;
SET R1,2STORE #0,R1SHIFT R1,1STORE #1,R1ADD R1,1STORE #2,R1
(front end)
codegeneration
![Page 35: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/35.jpg)
35
כלים
חלק משמעותי מהמאמץ בכתיבת קומפיילרים חוזר על עצמו •בין קומפיילקים שונים.
כלים מיועדים לחסוך את החלק החוזר.•–Parser generators.חלקם מתבססים על אלגוריתמים מורכבים :–Lexical generator)עבור ניתוח לקסיקאלי( –Syntax-directed translation engines מעבר על העץ האבסטרקטי
ויצירת קוד ביניים ממנו ע"י ביצוע פעולה על כל צומת.–Data Flow Engines.עבור אופטימיזציה
![Page 36: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/36.jpg)
36
לסיכום
קומפיילר מתרגם משפת מקור לשפת יעד )ובדרך מספק •בדיקת שגיאות חשובה(.
על מנת להקטין את הסיבוכיות התירגום מחולק למודולים •ברורים ונפרדים.
מביא את התוכנית לייצוג ביניים שנוח לעבוד front-endשלב ה-•איתו באופן אוטומטי.
מבצע אופטימיזציות ומייצר קוד של שפת back-endשלב ה-•המטרה.
.front-endבהמשך – נתחיל בהבנת ה-•
![Page 37: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/37.jpg)
37
ניתוח לקסיקלי
Wilhelm, and Maurer – Chapter 7
Aho, Sethi, and Ullman – Chapter 3
Cooper and Torczon – Chapter 2
![Page 38: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/38.jpg)
38
front-endשלב הניתוח
משולבים זה בזהfront-endבקומפיילרים רבים כל השלבים של ה-•decorated syntax treeבקומפיילרים רבים ייצוג הביניים הוא •
תוכנית מקור
Back end
Lexical analysis
syntax analysis
semantic analysis
token string
syntax tree
decorated syntax tree
symboltable
errormessages
![Page 39: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/39.jpg)
39
תוכנית מקור
Lexical Analyzer
parser
tokenget next token
מנתח לקסיקלי – אינטרקציה עם parserה-
errormessagemanager
![Page 40: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/40.jpg)
40
פישוט הניתוח הלקסיקלי )והגדרת השפה( •ופישוט הניתוח הסינטקטי
מודולריות• שימוש חוזר•יעילות – ההפרדה מקלה לממש אלגוריתמים •
יעודיים יעילים.
מדוע מפרידים ניתוח לקסיקלי?
![Page 41: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/41.jpg)
41
מושגים בסיסיים
•lexeme לקסמה )לפעמים נקרא גם = symbol סדרת אותיות המופרדת משאר :)
התוכנית באופן מוסכם )למשל ע"י רווח או .counterנקודה(. לדוגמא:
•Pattern .כלל המגדיר אוסף של מחרוזות :)לדוגמא: כל המחרוזות שמתחילות באות
וממשיכות באות או מספר(.
•token:אסימון: זוג של שם ותכונות. למשל = ( identifier,
{name=“counter”,code_location=3} .) שהלקסמה pattern נקבע עפ"י ה-tokenשם ה-
מקיימת.
![Page 42: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/42.jpg)
42
lexical analyzerתפקידי ה-
קריאת הקלט, והפרדתו ליחידות לקסיקליות •)לקסמות(
, integer, real, boolean, string דוגמאות:•שמות משתנים, הערות, סימנים מיוחדים
)למשל =>(. עם tokens, מיונם ויצירת patternsזיהוי ה-•
שמות ותכונות. -- מילות מפתח שאינן keywordsטיפול ב- •
שמורות, , reserved wordsזיהוי • preprocessing( ,includeלפעמים מממש גם •
files -ו macros.)ספירת מספר שורות )למה?(• לא חוקיים.symbolsדיווח על שגיאות: •הדפסת פלט )התוכנית בשילוב הודעות •
שגיאה(, עשוי לכלול pretty printing.
)יש לעקוב אחרי מספרי השורות והעמודות בהם –(tokensמופיעים ה-
![Page 43: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/43.jpg)
43
Typical Tokens )Patterns(
•Token למשל( אחד לכל מילה שמורה בשפה if, else)וכיו"ב ,•Token .אחד לכל אופרטור. לפעמים הם ארוזים במשפחות
למשל משפחת ההשוואות: comparisons = < or < or <= or <= or == or. =!
•Token( אחד המייצג את כל שמות המשתנים identifier .). counter, score, employeeלמשל:
•Token אחד או יותר המייצגים קבועים )בד"כ מספרים ” .23e5, “Billie Holiday, 27.34, 35ומחרוזות(. למשל:
•Token. { } ; , ) ( :אחד לכל סימן פיסוק. למשל
![Page 44: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/44.jpg)
44
(Patterns)משפחות של סמלים
symbol class תוכנית המשתמש
ID foo n_14 last
NUM 73 00 517 082
REAL 66.1. 5 10 .1e67 5.5e-10
IF if
COMMA ,
NOTEQ =!
LPAREN (
RPAREN )
![Page 45: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/45.jpg)
45
טיפול מיוחד במחרוזות שאינן סמלים
תוכנית המשתמש
comment */ignored/*
preprocessor directive #include <foo.h<
macro #define NUMS 5, 6
white space \t \n
![Page 46: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/46.jpg)
46
תכונות
ישמשו לשלבים הבאים של הקומפילציה או tokenתכונות של •להודעות שגיאה.
•token( נפוץ לדוגמא הוא שם משתנה identifier תכונות .)סטנדרטיות שנרצה לשמור עבורו יכללו:
שם המשתנה )הלקסמה(–מיקום המשתנה בתוכנית )עבור הודעות שגיאה(–טיפוס המשתנה–
tokenהתכונות האלו נשמרות בד"כ בטבלת הסמלים, ולכן ב-•מספיק לרשום את מספר הכניסה בטבלה.
![Page 47: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/47.jpg)
47
tokensמעבר מלקסמות ל-
![Page 48: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/48.jpg)
48
דוגמא
הבאים:tokens :, נעביר את ה-e = m * c ** 2עבור הביטוי •
< id , pointer to symbol table entry for e <
< assignment <
< id , pointer to symbol table entry for m<
< multiplication <
< id , pointer to symbol table entry for c<
< exponentiation <
< number , integer value 2 <
![Page 49: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/49.jpg)
49
– דוגמאותlexical analysisהקושי ב-
קל: בשפת פסקל•Const pi = 3.1416;
הרווחים אינם נחשבים. לכן Fortranב-•ההחלטה על סיום לקסמה יותר מורכבת.
למשל,do 5 I = 1.2
אבל: •do 5 I = 1 , 2
lookaheadכאן מודגש הצורך ב-
)שפות מודרניות מתוכננות כך שלא תיווצרנה בעיות כאלו.(
אינם נחשבים .10 ו- .Ada 1 ו- Pascalב-•. 10..1שברים, כי זה מקשה את הזיהוי של
![Page 50: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/50.jpg)
50
- המותרים בשפהtokensניסוח ה
נרצה דרך סטנדרטית להכריז מהם הסימבולים החוקיים •בשפה.
לשם כך נשתמש בביטויים רגולריים.•אוטומטים המבטאים את הביטויים הרגולריים ישימשו לסריקת •
.tokensהקלט וזיהוי ה-
תזכורת לתיאוריה... •
![Page 51: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/51.jpg)
51
אלפבית, מילים, וכו'
• :דוגמא( אלפבית – ={i,m,b,a}) היא מחרוזת סופית של אותיות מילה מעל •
. אורך המילה הוא מספר האותיות בה. מ- abba, aba, ima, abbabbabbaדוגמאות:
המילה ריקה תסומן ב-••0אוסף המילים באורך אפס – •n אוסף המילים באורך – n• הסגור של( אוסף כל המילים –*Kleene)•+ או יותר1 – אוסף המילים באורך •x.y מילה המהווה שרשור של – x -ו y בד"כ(
(x yמשמיטים את אופרטור השרשור וכותבים •suffix, prefix, substring
![Page 52: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/52.jpg)
52
שפות מעל * שפה – תת קבוצה של•
או L1={ima, aba, bamba}דוגמא: L2 היא "כל המילים שמכילות את האות a."
שפותL, L1, L2יהיו •–L1 L2 איחוד שפות –
–L1 L2 = {x1 x2 | x1 L1, x2 L2 }שרשור שפות –
–L המשלים של – L -המילים ב(* -שאינן ב L)–Ln שרשור של – L לעצמו nפעמים –L הסגור של – *L שרשור – L לעצמו מספר כלשהו
של פעמים
![Page 53: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/53.jpg)
53
שפות מעל
קבוצת כל האותיות וגם הסימן _ L תהי דוגמא:• קבוצת כל הספרות. אז ניתן לתאר את D. תהי
Cהשמות החוקיים של משתנים בשפת * .)L)L Dכ-
, הביטויים החשובים patternsעבור תיאור ה-•הם: איחוד, שרשור, וסגור.
על-מנת לציין את המחרוזות האפשריות •המתקבלות המציאו את מושג הביטויים
הרגולריים.
![Page 54: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/54.jpg)
54
ביטויים רגולריים, שפות רגולריות
• הוא ביטוי רגולרי מעל המתאר את השפה הריקה
• הוא ביטוי רגולרי מעל המתאר את השפה L)( = { }
הוא ביטוי רגולרי המתאר את a , aלכל •L)a( = { a }השפה
הם ביטויים רגולריים המתארים את qו- pאם •, אזי:Q ו- Pהשפות הרגולריות
– p | q הוא ביטוי רגולרי המתאר את השפהP U Qהרגולרית
– p q הוא ביטוי רגולרי המתאר את השפה P Q– p* הוא ביטוי רגולרי המתאר אתP*– (p הוא ביטוי רגולרי שהשפה שלו ) P ,כלומר(
מותר לשים סוגריים(.הערה: על מנת לפשט את הסימונים, * הוא •
בעל הקדימות הגבוהה ביותר, אח"כ שרשור, * (a | bcואח"כ איחוד. )
כל שפה הניתנת לכתיבה כביטוי רגולרי היא •שפה רגולרית.
![Page 55: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/55.jpg)
55
תרגיל
. Σ={a,b}תהי ••L)a|b( ? = •L) )a|b( )a|b( ( ? = •L) )a|b(* ( ? =
![Page 56: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/56.jpg)
56
דוגמא
. Σ={a,b}תהי ••L)a|b( = {a,b}•L) )a|b( )a|b( ( = {aa,ab,ba,bb}•L) )a|b(* ( = {ε, a, b, aa, ab, ba, bb, aaa, aab, aba, …}
![Page 57: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/57.jpg)
57
באמצאות ביטויים רגולרייםsymbolsתיאור
דוגמא: מספר שלם או שבור•
) 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (
) 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (*
) | . ) 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (
) 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (*
) | E ) 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (
) 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (* (
(שיטת תיאור זאת קשה לשימוש. לכן נשתמש •
בשמות של קבוצות.
![Page 58: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/58.jpg)
58
בעזרת שמות ותחומיםsymbolsתיאור
על-מנת לקצר את התיאור נשתמש בשמות •לביטויים ונשתמש בהם כאילו היו משתנים
רגילים. למשל:
letter = a | b | … | z | A | B | … | Z
letter_ = letter | _
digit = 0 | 1 | 2 | … | 9
id = letter_ ) letter_ | digit (*נשתמש גם במקף לציין תחום ברור. לדוגמא:•
letter = a-z | A-Zdigit = 0-9
ונשתמש ב- + במקום כוכבית לציין שהסגור •מכיל לפחות מופע אחד:
binary-number = )0|1(+
![Page 59: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/59.jpg)
59
דוגמאות
• digit = 0-9• digits = digit+
• number = digits (Є | .digits (Є | e (Є|+|-) digits ) )• letter = a-z | A-Z• id = letter (letter | digit)*• if = if• then = then• else = else• relop = < | > | <= | >= | = | <>• ws = ( blank | tab | newline ) - את זה לא נעביר לשלב הבא אלא
נתעלם
![Page 60: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/60.jpg)
60
זיהוי ביטויים רגולריים – על ידי אוטומט סופי
= ) , Q , δ, q0 , F ( Mאוטומט – •
•א"ב – • Qקבוצה סופית של מצבים –•q0 Qמצב התחלתי –
•F Qקבוצת המצבים הסופיים – • δ : Q Qפונקצית המעברים state
control
קלט
![Page 61: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/61.jpg)
61
אוטומט דטרמיניסטי ואי-דטרמיניסטי
• , Q , δ, q0 , F ( M הוא אוטומט ( = )סופי( אם:דטרמיניסטי
Q → Q : δ:היא פונקציה חלקית עבורה אין מעברי – יש לכל היותר מעבר למצב a ואות qלכל מצב –
יחיד, האוטומט יגיע למצב wכלומר: לכל מילה •
מסוים יחיד, או ייתקע. קבלה: אם המצב שאליו מגיעים סופי, הקלט •
"מתקבל".
• , Q , δ, q0 , F ( M הוא אוטומט ( = )סופי( אם:אי-דטרמיניסטי
Q ) {}( → 2Q : δ .היא פונקציה חלקית , ויותר ממעבר אפשרי אחד )ייתכנו מעברי-
לאות ומצב נתונים.( , האוטומט יכול להגיע למספר wלכל מילה •
כלשהו של מצבים או להיתקע. אם אחד מהם סופי, הקלט מתקבל.
![Page 62: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/62.jpg)
62
שיטת העבודה
נהפוך את הביטויים הרגולריים לאוטומט •אי-דטרמיניסטי
נהפוך את האוטומט האי-דטרמיניסטי •לדטרמיניסטי
משפט: לכל אוטומט לא דטרמיניסטי קיים אוטומט –דטרמיניסטי שקול
במקרה הגרוע גודל האוטומט המתקבל –אקספוננציאלי בגודל האוטומט המקורי. אך בפועל
מתקבל אוטומט סביר. )עבור זיהוי לקסמות(נריץ את האוטומט הדטרמיניסטי על הקלט •
לזיהוי הביטוי המתאים.
באוטומטים למדנו על אוטומטים שרק מזהים •קלט )כן או לא(...
אבל כשתוכנית מריצה אוטומט על קלט אין •סיבה שלא תאסוף מידע בדרך )בפרט, אותיות
הקלט שנסקרו עד עתה, מספר השורה בקוד וכיו"ב(.
![Page 63: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/63.jpg)
63
מביטויים רגולריים לאוטומט לא דטרמיניסטי
(0-9: הצב )את סימני הקבוצות כגון 1שלב • ,R1, R2וקבל סדרת ביטויים רגולריים טהורים
…, Rm.
לכל Mi: בנה אוטומט לא דטרמיניסטי 2שלב •Riביטוי רגולרי
המזהה את כל M: בנה אוטומט משולב 3שלב •הביטויים הרגולריים
לתשומת לב: ייתכן שישנם כמה דרכים לזהות •את הלקסמה הבאה בתור, אנו נעדיף בד"כ את
ביותר. הארוכה then כשם משתנה עדיף על thenutcrackerלמשל –
המילה השמורה. כמילה השמורה עדיף על thenאבל באותו אורך, –
then .כשם משתנה
![Page 64: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/64.jpg)
64
סימונים
![Page 65: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/65.jpg)
65
מביטוי רגולרי לאוטומט אי-דטרמיניסטי שקול
![Page 66: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/66.jpg)
66
המצבים ההתחלתיים
והמקבלים במכונות
המקוריות הופכים למצבים רגילים
לאחר הבניה.
![Page 67: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/67.jpg)
67
![Page 68: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/68.jpg)
68
![Page 69: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/69.jpg)
69
, איך נבצע את הניתוח הלקסיקלי ? patternבהינתן אוטומט לכל
![Page 70: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/70.jpg)
70
נרכיב את כל האוטומטים שהתקבלו לאוטומט אחד גדול עם מצב אפשרי: patternסופי ייחודי לכל
![Page 71: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/71.jpg)
71
שיטה נאיבית:ננסה כל אחד מהאוטומטים.
![Page 72: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/72.jpg)
72
שיטה יותר יעילה היא שילוב כל האוטומטים לאחד, מעבר לאוטומט דטרמיניסטי, והרצה ארוכה ככל האפשר עד שנתקעים. כשנתקעים, זוכרים את המקום האחרון שבו
התקבלה מחרוזת ואותו מחזירים.
דוגמא:
![Page 73: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/73.jpg)
73
מעבר לאוטומט דטרמיניסטי:
![Page 74: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/74.jpg)
74
דוגמאות:
![Page 75: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/75.jpg)
75
Lookahead
הבעיה: לעיתים צריך לסרוק מספר אותיות קדימה על מנת להחליט מהו • אותו נחזיר.symbolה-
יכולה להיות גם שם של FORTRAN ב- IFדוגמא: המילה השמורה •משתנה.
“if)i,j(=3"-שונה מ ”if )condition( then . ”… עבור המנתח: אות מיוחדת )למשל - /( המציינת את lookaheadתאור •
) * ( if נוכל לציין שאנו מצפים ל- "if. לזיהוי lookaheadמקום תחילת ה-then-אבל רוצים שרק ה ”if .יוחזר
”. if / ) * ( thenונרשום “ אותיות. 2 של lookahead מספיק ADAהערה: בפסקל ו-•
0 1 2 3 4 5 6I F )(
startletter
any
![Page 76: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/76.jpg)
76
scanner generatorsymbol specification
Input program
scanner
token stream
scanning table
: מפורמליזם לתוכנהlexical analyzerה-
יתרונות•המפרט – קצר יחסית–אפשר לוודא שהמפרט תקין )לא אוטומטית!(–התוכנה קלה לתחזוקה–
שימושים נוספים generationלשיטת ה- •בקומפילציה ובשטחים נוספים
scanner
scanning table
driver
החלק הראשון מבוצע ע"י כותב הקומפיילר, החלק השני הופך
להיות השלב הראשון בקומפיילר.
![Page 77: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/77.jpg)
77
: מפורמליזם לתוכנהlexical analyzerה-
- ביטויים רגולריים tokenתאור ה- • – אוטומט סופיscannerמבנה ה- •
הוא תוכנית המריצה אוטומט לפי טבלת driverה-–המעברים והקלט.
היא טבלת המעברים. scanning tableה- –
![Page 78: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/78.jpg)
78
lexical analyzerתהליך בניית ה-
האפשריים כביטויים רגולריים.tokensבניית תיאור ה- • מכל סוגtokenהחלטה על תכונות שיישמרו בעת זיהוי –
מעבר לאוטומט דטרמניסטי כולל המתאר את כל הביטויים •האפשריים )טבלת מעברים( + שמירת תכונות.
.scanner generatorנעשה באופן אוטומטי ע"י –
של driver משמש את ה-scanner generatorהפלט של ה-•הניתוח הלקסיקלי.
והטבלאות של השפה הופכים להיות החלק הראשון של driverה-–הקומפיילר.
![Page 79: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/79.jpg)
79
טיפול בשגיאות
בשלב הניתוח הלקסיקלי יש שגיאות רבות שלא •ניתן לגלות.
…, קשה ) )fi ) a == f)x עבור הביטוי למשל:•, או שם רוטינה. if הוא שיבוש של fiלדעת אם
בשלב יותר מאוחר של האנליזה נגלה זאת.–. identifier עבור tokenבשלב זה פשוט נעביר –
אבל לפעמים יש שגיאה ברורה כבר בשלב זה •– כאשר לא ניתן לשייך את הלקסמה
. מה עושים? patternשהתגלתה לשום השיטה הקלה ביותר: לסלק אותיות מהקלט עד •
שמתגלה התחלה של לקסמה חוקית. אפשרויות נוספות: לסלק אות אחת, להוסיף •
אות אחת, להחליף אות אחת, להחליף סדר של שתי אותיות סמוכות.
המטרה: לאפשר המשך הקומפילציה עם •מינימום הפרעה.
הקושי – התפשטות השגיאות.•
![Page 80: תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי](https://reader033.vdocuments.pub/reader033/viewer/2022061410/568130a6550346895d96a238/html5/thumbnails/80.jpg)
80
סיכוםלרוב השפות ניתן לכתוב ביטויים רגולריים לכל הלקסמות הרלוונטיות.•משלבים את כל הביטויים לאוטומט אי-דטרמיניסטי יחיד•הופכים את האוטומט לדטרמיניסטי•מריצים לגילוי לקסמה אחר לקסמה, אוספים מידע בדרך )למשל שם •
המשתנה(מודיעים על שגיאות ומנסים לתקן. •
לרוב שפות התכנות ניתן לבנות מנתח לקסיקלי בקלות. •. Fortran, PL/1יוצאי דופן:
ישנם כלים שבונים מנתח לקסיקלי בהינתן ביטויים רגולריים. •יש להם שימושים גם מחוץ לתחום הקומפיילרים, במקומות בהם דרוש ניתוח
אוטומטי של קלטים, למשל, מערכות שאילתות.
בתרגולים ובתרגיל הבית תכירו כלי אחד כזה: Lex