80
1 הההה הההההההההה236360 ההההה1 הההה; ההההה ההההההה

תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי

Embed Size (px)

DESCRIPTION

תורת הקומפילציה 236360 הרצאה 1 מבוא; ניתוח לקסיקלי. תורת הקומפילציה 236360. מרצה: פרופ"ח ארז פטרנק erez@cs שעת קבלה – יום חמישי 13:30-14:30 טאוב 528 מתרגלים קירה רדינסקי , מתרגלת אחראית גלעד קותיאל. אדמיניסטרציה. אתר: http://webcourse.cs.technion.ac.il/236360 25% - תרגילי בית - PowerPoint PPT Presentation

Citation preview

Page 1: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

1

236360תורת הקומפילציה 1הרצאה

מבוא; ניתוח לקסיקלי

Page 2: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

2

236360תורת הקומפילציה

פרופ"ח ארז פטרנקמרצה: ••erez@cs528 טאוב 13:30-14:30שעת קבלה – יום חמישי •

מתרגלים•, מתרגלת אחראיתקירה רדינסקי–גלעד קותיאל–

Page 3: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

3

אדמיניסטרציה

http://webcourse.cs.technion.ac.il/236360 אתר:• - תרגילי בית25%•

תרגילים "יבשים", רשות )מגן(5%– תרגילים "רטובים", חובה20%–

- מבחן סוף הקורס75%•ציון נכשל במבחן גורר כשלון בקורס, ללא קשר לציון •

התרגילים. 236353קדם: אוטומטים ושפות פורמליות •מועד ג' למילואימניקים )בלבד(.•העתקות...•

Page 4: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

5

ספרות-המשךספר נוסף•

K.D.Cooper and L.Torczon

“Engineering A Compiler”, Morgan Kaufmann, 2004

Page 6: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

7

מורכבות

קומפילציה

שפות תכנות

הנדסת תכנה

מבנה מחשבים

מערכות הפעלהשפות פורמליות

אלגוריתמים

מבני נתונים

משלב תחומים רבים ממדעי המחשב•משלב מחקר תיאורטי ומעשי•

Page 8: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

8

קומפילציה )הידור( – מושגי יסוד

זמן קומפילציה•

זמן ריצה•

compilersource program target program

target program

outputinput

Page 9: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

9

(= פרשנות)אינטרפרטציה

interpreter

source program

input

output

שימושים:שפות סקריפט שבהם כל שורה קוראת לביצוע של משהו מורכב )אין טעם -

ליעל(( שבהן הנתונים מורכבים ואינם ידועים APL, Mathlabשפות מאד גבוהות )-

בעת הקומפילציה

Page 10: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

14

קומפילציה – חשיבות התחום

לפיתוח שמושים מתקדמים•ניצול של כלים לפיתוח קומפיילרים להקלת מאמץ הפיתוח– אוטומטית של קבצי קלטקריאה )ו"הבנה"(–

למפתחי תוכנה•הבנה של האבחנה בין זמן קומפילציה לזמן ריצה–הבנה של מה יעשה קומפיילר עם התוכנה שלכם–

)שיפור זמן ריצה, התראות של שגיאות(שימוש נכון במבנים שונים של שפות התכנות–ניצול נכון של ארכיטקטורת המחשב–

Page 15: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

15

קומפילציה – חשיבות התחום

לאנשי שפות תכנות•תמיכה יעילה בשפה חדשה–

לאנשי ארכיטקטורה של מחשבים•הבנה טובה של האיזון העדין שבין חומרה לתכנה– מה תעשה כל הבנה מעמיקה מה יעשה קומפיילר )כלומר:–

תוכנה( עם החומרה שלכם

Page 16: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

16

תורת הקומפילציה – תוכן הקורס

מבוא•מבנה הקומפיילר•(lexical analysisניתוח מילוני )•(parsingניתוח תחבירי )•ניתוח סמנטי•יצירת קוד•סביבת זמן הריצה )טיפול ברוטינות, ניהול זיכרון, וכו'(•נושאים מתקדמים:•

, Data-flow analysisאופטימיזציות, ניתוח סטטי, – Virtual ו-Just-In-Timeלא נדבר על: קומפיילרים –

Machines ,

Page 17: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

17

מבנה הקומפיילר – תמונה כללית

Wilhelm and Maurer – Chapter 6

Aho, Sethi, and Ullman – Chapter 1

Cooper and Torczon – Chapter 1

Page 18: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

19

קומפיילר – חלוקה גסה

תוכנית מקור

תוכנית מטרה

analysis

code optimization

code generation

יצוג ביניים

ייצוג ביניים

Front End

Back End

Page 20: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

22

דוגמה לתפקידי החלקים

Page 23: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

23

דוגמה לתפקידי החלקים

Page 24: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

24

טבלת הסמלים

. שומר את התכונות שלו identifierמבנה נתונים לכל •(attributes.ומאפשר גישה מהירה )

.scopeלדוגמא: מיקום בזיכרון, טיפוס, –הטבלה נבנית במהלך הניתוח. למשל: הניתוח הלקסיקלי לא מגלה מה –

הטיפוס. רק השלב של ייצור הקוד יודע את מיקום המשתנה בזיכרון, וכיו"ב.

Page 25: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

25

הודעות שגיאה

חלק חשוב של תהליך הקומפילציה•כל שלב מגלה שגיאות ברמת הניתוח שלו של התוכנית.•

מודיע על השגיאה–ומנסה כמיטב יכולתו להמשיך בקומפילציה–

Page 26: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

27

שפת ביניים

שפה קלה לייצור, שקל לייצר ממנה קוד אמיתי, ונוחה לעבודה •לאופטימיזציה.

שבה כל three-address codeאנו נשתמש בצורה הנקראת •תא בזיכרון יכול לשמש פרמטר לכל פעולה.

temp1 := inttoreal)60(temp2 := id3 * temp1temp3 := id2 + temp2id1 := temp3

Page 28: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

28

שלב האופטימיזציה

יצירת קוד הביניים נעשית בצורה אוטומטית. •הקוד ניתן לשיפור•

temp1 := inttoreal)60(temp2 := id3 * temp1temp3 := id2 + temp2id1 := temp3

temp1 := id3 * 60.0id1 := id2 + temp1

Page 29: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

29

שלב האופטימיזציה

Decorated Syntax Tree

Decorated Syntax Tree

machine independent optimization

דוגמאות•–constant propogation–common subexpressions–dead code elimination

Page 30: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

30

אופטימיזציה

-שלם או לא ניתן להכרעה, NPלא ניתן לייצר קוד אופטימלי )•תלוי מה מנסים לעשות...(. לכן משתמשים בהיוריסטיקות.

חובה לשמור על נכונות; צריך לשפר )כמעט תמיד(; חישוב •האופטימיזציה צריך להיות יעיל.

שיפורים: מהירות, מקום, אנרגיה, וכו'.•החלק שתופס זמן מירבי בתהליך הקומפילציה.•השאלה העיקרית: כמה זמן שווה להשקיע באופטימיזציה עבור •

ייעול תוכנית המטרה..JITהתשובה מאוד משתנה עבור –

Page 31: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

31

אופטימיזציה מודרנית

האתגר העיקרי הוא לנצל פלטפורמות מודרניות•–Multicores פקודות ווקטוריות–היררכית זיכרונות–(?Java Bytecodeהאם הקוד מועבר ברשת )–

Page 32: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

33

(Code Generation)ייצור קוד

ייצור קוד של שפת המטרה.שלב אחרון:•משימה חשובה: החלטה על מיקום המשתנים בזיכרון.•האתגר העיקרי: לאיזה משתנים יוקצו רגיסטרים באיזה שלב •

של התוכנית?פעולות על רגיסטרים מהירות משמעותית מפעולות על הזיכרון.–

-קשה(, NPהשמה אופטימלית למקרה הגרוע ביותר היא קשה )•היוריסטיקות מאד טובות קיימות.

Page 34: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

35

כלים

חלק משמעותי מהמאמץ בכתיבת קומפיילרים חוזר על עצמו •בין קומפיילקים שונים.

כלים מיועדים לחסוך את החלק החוזר.•–Parser generators.חלקם מתבססים על אלגוריתמים מורכבים :–Lexical generator)עבור ניתוח לקסיקאלי( –Syntax-directed translation engines מעבר על העץ האבסטרקטי

ויצירת קוד ביניים ממנו ע"י ביצוע פעולה על כל צומת.–Data Flow Engines.עבור אופטימיזציה

Page 36: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

36

לסיכום

קומפיילר מתרגם משפת מקור לשפת יעד )ובדרך מספק •בדיקת שגיאות חשובה(.

על מנת להקטין את הסיבוכיות התירגום מחולק למודולים •ברורים ונפרדים.

מביא את התוכנית לייצוג ביניים שנוח לעבוד front-endשלב ה-•איתו באופן אוטומטי.

מבצע אופטימיזציות ומייצר קוד של שפת back-endשלב ה-•המטרה.

.front-endבהמשך – נתחיל בהבנת ה-•

Page 37: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

37

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

Wilhelm, and Maurer – Chapter 7

Aho, Sethi, and Ullman – Chapter 3

Cooper and Torczon – Chapter 2

Page 38: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

39

תוכנית מקור

Lexical Analyzer

parser

tokenget next token

מנתח לקסיקלי – אינטרקציה עם parserה-

errormessagemanager

Page 40: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

40

פישוט הניתוח הלקסיקלי )והגדרת השפה( •ופישוט הניתוח הסינטקטי

מודולריות• שימוש חוזר•יעילות – ההפרדה מקלה לממש אלגוריתמים •

יעודיים יעילים.

מדוע מפרידים ניתוח לקסיקלי?

Page 41: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

41

מושגים בסיסיים

•lexeme לקסמה )לפעמים נקרא גם = symbol סדרת אותיות המופרדת משאר :)

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

•Pattern .כלל המגדיר אוסף של מחרוזות :)לדוגמא: כל המחרוזות שמתחילות באות

וממשיכות באות או מספר(.

•token:אסימון: זוג של שם ותכונות. למשל = ( identifier,

{name=“counter”,code_location=3} .) שהלקסמה pattern נקבע עפ"י ה-tokenשם ה-

מקיימת.

Page 42: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

42

lexical analyzerתפקידי ה-

קריאת הקלט, והפרדתו ליחידות לקסיקליות •)לקסמות(

, integer, real, boolean, string דוגמאות:•שמות משתנים, הערות, סימנים מיוחדים

)למשל =>(. עם tokens, מיונם ויצירת patternsזיהוי ה-•

שמות ותכונות. -- מילות מפתח שאינן keywordsטיפול ב- •

שמורות, , reserved wordsזיהוי • preprocessing( ,includeלפעמים מממש גם •

files -ו macros.)ספירת מספר שורות )למה?(• לא חוקיים.symbolsדיווח על שגיאות: •הדפסת פלט )התוכנית בשילוב הודעות •

שגיאה(, עשוי לכלול pretty printing.

)יש לעקוב אחרי מספרי השורות והעמודות בהם –(tokensמופיעים ה-

Page 43: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

45

טיפול מיוחד במחרוזות שאינן סמלים

תוכנית המשתמש

comment */ignored/*

preprocessor directive #include <foo.h<

macro #define NUMS 5, 6

white space \t \n

Page 46: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

46

תכונות

ישמשו לשלבים הבאים של הקומפילציה או tokenתכונות של •להודעות שגיאה.

•token( נפוץ לדוגמא הוא שם משתנה identifier תכונות .)סטנדרטיות שנרצה לשמור עבורו יכללו:

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

tokenהתכונות האלו נשמרות בד"כ בטבלת הסמלים, ולכן ב-•מספיק לרשום את מספר הכניסה בטבלה.

Page 47: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

47

tokensמעבר מלקסמות ל-

Page 48: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

50

- המותרים בשפהtokensניסוח ה

נרצה דרך סטנדרטית להכריז מהם הסימבולים החוקיים •בשפה.

לשם כך נשתמש בביטויים רגולריים.•אוטומטים המבטאים את הביטויים הרגולריים ישימשו לסריקת •

.tokensהקלט וזיהוי ה-

תזכורת לתיאוריה... •

Page 51: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

53

שפות מעל

קבוצת כל האותיות וגם הסימן _ L תהי דוגמא:• קבוצת כל הספרות. אז ניתן לתאר את D. תהי

Cהשמות החוקיים של משתנים בשפת * .)L)L Dכ-

, הביטויים החשובים patternsעבור תיאור ה-•הם: איחוד, שרשור, וסגור.

על-מנת לציין את המחרוזות האפשריות •המתקבלות המציאו את מושג הביטויים

הרגולריים.

Page 54: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

55

תרגיל

. Σ={a,b}תהי ••L)a|b( ? = •L) )a|b( )a|b( ( ? = •L) )a|b(* ( ? =

Page 56: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

60

זיהוי ביטויים רגולריים – על ידי אוטומט סופי

= ) , Q , δ, q0 , F ( Mאוטומט – •

•א"ב – • Qקבוצה סופית של מצבים –•q0 Qמצב התחלתי –

•F Qקבוצת המצבים הסופיים – • δ : Q Qפונקצית המעברים state

control

קלט

Page 61: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

61

אוטומט דטרמיניסטי ואי-דטרמיניסטי

• , Q , δ, q0 , F ( M הוא אוטומט ( = )סופי( אם:דטרמיניסטי

Q → Q : δ:היא פונקציה חלקית עבורה אין מעברי – יש לכל היותר מעבר למצב a ואות qלכל מצב –

יחיד, האוטומט יגיע למצב wכלומר: לכל מילה •

מסוים יחיד, או ייתקע. קבלה: אם המצב שאליו מגיעים סופי, הקלט •

"מתקבל".

• , Q , δ, q0 , F ( M הוא אוטומט ( = )סופי( אם:אי-דטרמיניסטי

Q ) {}( → 2Q : δ .היא פונקציה חלקית , ויותר ממעבר אפשרי אחד )ייתכנו מעברי-

לאות ומצב נתונים.( , האוטומט יכול להגיע למספר wלכל מילה •

כלשהו של מצבים או להיתקע. אם אחד מהם סופי, הקלט מתקבל.

Page 62: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

62

שיטת העבודה

נהפוך את הביטויים הרגולריים לאוטומט •אי-דטרמיניסטי

נהפוך את האוטומט האי-דטרמיניסטי •לדטרמיניסטי

משפט: לכל אוטומט לא דטרמיניסטי קיים אוטומט –דטרמיניסטי שקול

במקרה הגרוע גודל האוטומט המתקבל –אקספוננציאלי בגודל האוטומט המקורי. אך בפועל

מתקבל אוטומט סביר. )עבור זיהוי לקסמות(נריץ את האוטומט הדטרמיניסטי על הקלט •

לזיהוי הביטוי המתאים.

באוטומטים למדנו על אוטומטים שרק מזהים •קלט )כן או לא(...

אבל כשתוכנית מריצה אוטומט על קלט אין •סיבה שלא תאסוף מידע בדרך )בפרט, אותיות

הקלט שנסקרו עד עתה, מספר השורה בקוד וכיו"ב(.

Page 63: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

63

מביטויים רגולריים לאוטומט לא דטרמיניסטי

(0-9: הצב )את סימני הקבוצות כגון 1שלב • ,R1, R2וקבל סדרת ביטויים רגולריים טהורים

…, Rm.

לכל Mi: בנה אוטומט לא דטרמיניסטי 2שלב •Riביטוי רגולרי

המזהה את כל M: בנה אוטומט משולב 3שלב •הביטויים הרגולריים

לתשומת לב: ייתכן שישנם כמה דרכים לזהות •את הלקסמה הבאה בתור, אנו נעדיף בד"כ את

ביותר. הארוכה then כשם משתנה עדיף על thenutcrackerלמשל –

המילה השמורה. כמילה השמורה עדיף על thenאבל באותו אורך, –

then .כשם משתנה

Page 64: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

64

סימונים

Page 65: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

65

מביטוי רגולרי לאוטומט אי-דטרמיניסטי שקול

Page 66: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

66

המצבים ההתחלתיים

והמקבלים במכונות

המקוריות הופכים למצבים רגילים

לאחר הבניה.

Page 67: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

67

Page 68: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

68

Page 69: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

69

, איך נבצע את הניתוח הלקסיקלי ? patternבהינתן אוטומט לכל

Page 70: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

70

נרכיב את כל האוטומטים שהתקבלו לאוטומט אחד גדול עם מצב אפשרי: patternסופי ייחודי לכל

Page 71: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

71

שיטה נאיבית:ננסה כל אחד מהאוטומטים.

Page 72: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

72

שיטה יותר יעילה היא שילוב כל האוטומטים לאחד, מעבר לאוטומט דטרמיניסטי, והרצה ארוכה ככל האפשר עד שנתקעים. כשנתקעים, זוכרים את המקום האחרון שבו

התקבלה מחרוזת ואותו מחזירים.

דוגמא:

Page 73: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

73

מעבר לאוטומט דטרמיניסטי:

Page 74: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

74

דוגמאות:

Page 75: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

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 מבוא;  ניתוח לקסיקלי

76

scanner generatorsymbol specification

Input program

scanner

token stream

scanning table

: מפורמליזם לתוכנהlexical analyzerה-

יתרונות•המפרט – קצר יחסית–אפשר לוודא שהמפרט תקין )לא אוטומטית!(–התוכנה קלה לתחזוקה–

שימושים נוספים generationלשיטת ה- •בקומפילציה ובשטחים נוספים

scanner

scanning table

driver

החלק הראשון מבוצע ע"י כותב הקומפיילר, החלק השני הופך

להיות השלב הראשון בקומפיילר.

Page 77: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

77

: מפורמליזם לתוכנהlexical analyzerה-

- ביטויים רגולריים tokenתאור ה- • – אוטומט סופיscannerמבנה ה- •

הוא תוכנית המריצה אוטומט לפי טבלת driverה-–המעברים והקלט.

היא טבלת המעברים. scanning tableה- –

Page 78: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

78

lexical analyzerתהליך בניית ה-

האפשריים כביטויים רגולריים.tokensבניית תיאור ה- • מכל סוגtokenהחלטה על תכונות שיישמרו בעת זיהוי –

מעבר לאוטומט דטרמניסטי כולל המתאר את כל הביטויים •האפשריים )טבלת מעברים( + שמירת תכונות.

.scanner generatorנעשה באופן אוטומטי ע"י –

של driver משמש את ה-scanner generatorהפלט של ה-•הניתוח הלקסיקלי.

והטבלאות של השפה הופכים להיות החלק הראשון של driverה-–הקומפיילר.

Page 79: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

79

טיפול בשגיאות

בשלב הניתוח הלקסיקלי יש שגיאות רבות שלא •ניתן לגלות.

…, קשה ) )fi ) a == f)x עבור הביטוי למשל:•, או שם רוטינה. if הוא שיבוש של fiלדעת אם

בשלב יותר מאוחר של האנליזה נגלה זאת.–. identifier עבור tokenבשלב זה פשוט נעביר –

אבל לפעמים יש שגיאה ברורה כבר בשלב זה •– כאשר לא ניתן לשייך את הלקסמה

. מה עושים? patternשהתגלתה לשום השיטה הקלה ביותר: לסלק אותיות מהקלט עד •

שמתגלה התחלה של לקסמה חוקית. אפשרויות נוספות: לסלק אות אחת, להוסיף •

אות אחת, להחליף אות אחת, להחליף סדר של שתי אותיות סמוכות.

המטרה: לאפשר המשך הקומפילציה עם •מינימום הפרעה.

הקושי – התפשטות השגיאות.•

Page 80: תורת  הקומפילציה  236360 הרצאה 1 מבוא;  ניתוח לקסיקלי

80

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

המשתנה(מודיעים על שגיאות ומנסים לתקן. •

לרוב שפות התכנות ניתן לבנות מנתח לקסיקלי בקלות. •. Fortran, PL/1יוצאי דופן:

ישנם כלים שבונים מנתח לקסיקלי בהינתן ביטויים רגולריים. •יש להם שימושים גם מחוץ לתחום הקומפיילרים, במקומות בהם דרוש ניתוח

אוטומטי של קלטים, למשל, מערכות שאילתות.

בתרגולים ובתרגיל הבית תכירו כלי אחד כזה: Lex