תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer –...

43
הההה הההההההההה236360 ההההה2 ההההה הההההההWilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2
  • date post

    22-Dec-2015
  • Category

    Documents

  • view

    246
  • download

    10

Transcript of תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer –...

Page 1: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

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

Wilhelm, and Maurer – Chapter 7

Aho, Sethi, and Ullman – Chapter 3

Cooper and Torczon – Chapter 2

Page 2: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

front-end שלב הניתוח

בקומפיילרים רבים השלבים בכל מסגרת משולבים זה בזה•decorated syntax treeבקומפיילרים רבים ייצוג הביניים הוא •

תוכנית מקור

Back end

scanning

screening

syntax analysis

semantic analysis

symbol string

token string

syntax tree

decorated syntax tree

symboltable

errormessages

lexical analysis

Page 3: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

תוכנית מקור

scanner

screener

parser

symbol

token

get next symbol

get next token

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

errormessagemanager

lexical analysis

Page 4: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

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

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

Page 5: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

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

. counterנקודה(. לדוגמא:

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

•tokenזוג של שם ותכונות. למשל:: = אסימון ( identifier, {name=counter,code_location=3}) .

שהלקסמה מקיימת.pattern נקבע עפ"י ה-tokenשם ה-

Page 6: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

scannerתפקידי ה-

קריאת הקלט•הפרדת הקלט ליחידות לקסיקליות )לקסמות(•, שמות משתנים, integer, real, boolean, string דוגמאות:•

הערות, סימנים מיוחדים )למשל =>(. , כלומר, טיפול preprocessing מממש גם scannerלפעמים ה-•

.macros ו- include filesב- ספירת מספר שורות )למה?(•

Page 7: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

screenerה-

)scanner )LEXלעיתים – משולב עם ה-•, מיונם patterns – זיהוי ה-screenerתפקידו העיקרי של ה-•

עם שמות ותכונות. tokensויצירת לא חוקיים.symbolsוכמובן דיווח על שגיאות: • -- מילות מפתח שאינן שמורות, keywordsטיפול ב- •, reserved wordsזיהוי •הדפסת פלט )התוכנית בשילוב הודעות שגיאה(, עשוי לכלול •

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

Page 8: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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 9: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

(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 10: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

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

comment */ignored/*

preprocessor directive #include <foo.h<

macro #define NUMS 5, 6

white space \t \n

Page 11: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

תכונות

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

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

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

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

Page 12: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

דוגמא

הבאים: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 13: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

– דוגמאות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 14: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

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

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

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

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

Page 15: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

אלפבית, מילים, וכו'

• :דוגמא( אלפבית – ={i,m,b,a} ). אורך היא מחרוזת סופית של אותיות מ- מילה מעל •

המילה הוא מספר האותיות בה. abba, aba, ima, abbabbabba דוגמאות:

המילה ריקה תסומן ב-••0 אוסף המילים באורך אפס –

n אוסף המילים באורך – n* הסגור של( אוסף כל המילים –Kleene) + או יותר1 – אוסף המילים באורך •x.y מילה המהווה שרשור של – x -ו y בד"כ משמיטים את(

(x yאופרטור השרשור וכותבים •suffix, prefix, substring

Page 16: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

שפות מעל

* שפה – תת קבוצה של• או 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 17: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

שפות מעל

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

Cבשפת .* )L)L Dכ-

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

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

Page 18: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

ביטויים רגולריים, שפות רגולריות

הוא ביטוי רגולרי מעל המתאר את השפה הריקה הוא ביטוי רגולרי מעל המתאר את השפה L)( = { }L)a( = { a } הוא ביטוי רגולרי המתאר את השפהa , aלכל • P הם ביטויים רגולריים המתארים את השפות הרגולריות qו- p אם •

, אזי:Qו- – p | qהוא ביטוי רגולרי המתאר את השפה הרגולרית P U Q– p q הוא ביטוי רגולרי המתאר את השפה P Q– p* הוא ביטוי רגולרי המתאר אתP*– (p) הוא ביטוי רגולרי שהשפה שלו P.)כלומר, מותר לשים סוגריים(

הערה: על מנת לפשט את הסימונים, * הוא בעל הקדימות הגבוהה • (*a | bcביותר, אח"כ שרשור, אח"כ סימן האיחוד. )

כל שפה הניתנת לכתיבה כביטוי רגולרי היא שפה רגולרית.•

Page 19: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

תרגיל

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

Page 20: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

דוגמא

. Σ={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 21: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

באמצאות ביטויים רגולריים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 22: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

בעזרת שמות ותחומים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 23: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

דוגמאות

• 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 24: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

Page 25: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

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

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

•q0 Qמצב התחלתי –

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

state

control

קלט

Page 26: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

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

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

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

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

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

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

Page 27: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

שיטת העבודה

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

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

מתקבל אוטומט סביר. המקורי. אך בפועל )עבור זיהוי לקסמות(

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

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

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

Page 28: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

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

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

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

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

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

Page 29: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

סימונים

Page 30: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

Page 31: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

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

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

לאחר הבניה.

Page 32: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.
Page 33: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.
Page 34: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

Page 35: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

Page 36: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

Page 37: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

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

דוגמא:

Page 38: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

Page 39: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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 40: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

scanner generatorsymbol specification

Input program

scanner

token stream

scanning table

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

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

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

scanner

scanning table

driver

Page 41: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

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

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

Page 42: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

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

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

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

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

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

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

Page 43: תורת הקומפילציה 236360 הרצאה 2 ניתוח לקסיקלי Wilhelm, and Maurer – Chapter 7 Aho, Sethi, and Ullman – Chapter 3 Cooper and Torczon – Chapter 2.

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

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

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

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

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

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