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

31
ייייי ייייייי ייייLex ( יייי י"י יייי ייייsakogan@cs ) ייייי יייי, ייי"י

Upload: julio

Post on 17-Jan-2016

108 views

Category:

Documents


0 download

DESCRIPTION

ניתוח לקסיקלי וכלי Lex. נכתב ע"י אלכס קוגן ( sakogan@cs ) סמסטר חורף, תשס"ח. מבנה הקומפיילר. backend. ניתוח סמנטי. ניתוח תחבירי. ניתוח לקסיקלי. קומפיילר. תכנית בשפת המקור. x = 23;. (רצף של תווים). מבנה הקומפיילר. רצף אסימונים. backend. ניתוח סמנטי. ניתוח תחבירי. ניתוח - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ניתוח לקסיקלי וכלי  Lex

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

(sakogan@csנכתב ע"י אלכס קוגן )

סמסטר חורף, תשס"ח

Page 2: ניתוח לקסיקלי וכלי  Lex

מבנה הקומפיילר

תכנית בשפת המקור

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

ניתוחתחבירי

ניתוחסמנטי

backend

x = 23;

קומפיילר

)רצף של תווים(

Page 3: ניתוח לקסיקלי וכלי  Lex

מבנה הקומפיילר

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

ניתוחתחבירי

ניתוחסמנטי

backendתכנית

בשפת המקור

x = 23;

רצף אסימונים

id assign num sepx = 23 ;

Page 4: ניתוח לקסיקלי וכלי  Lex

מבנה הקומפיילר

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

ניתוחתחבירי

ניתוחסמנטי

backendתכנית

בשפת המקור

S

id assign E sep

num

עץ גזירה

x = 23;

)העלים של עץ הגזירה הם האסימונים שהתקבלו מהניתוח

הלקסיקלי(

רצף אסימונים

Page 5: ניתוח לקסיקלי וכלי  Lex

מבנה הקומפיילר

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

ניתוחתחבירי

ניתוחסמנטי

backendתכנית

בשפת המקור

האם קיים משתנה ששמו x?

?int מטיפוס x האם

x = 23;

עץ גזירה

Page 6: ניתוח לקסיקלי וכלי  Lex

מבנה הקומפיילר

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

ניתוחתחבירי

ניתוחסמנטי

backendתכנית

בשפת המקור

ייצור קוד בשפת היעד

x = 23;

Page 7: ניתוח לקסיקלי וכלי  Lex

תפקיד המנתח הלקסיקלי

מחלק את קוד המקור לאסימונים )"מילים"(•

מסנן חלקים שאינם דרושים להמשך הניתוח•למשל: רווחים, ירידות שורה.–?commentsמה עם –

מזהה שגיאות לקסיקליות - מחרוזות שאינן יכולות •להיות אף אסימון

Cלמשל: "@" בשפת –

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

ניתוחתחבירי

ניתוחסמנטי

backendתכנית

בשפת המקור

קומפיילר

Page 8: ניתוח לקסיקלי וכלי  Lex

הגדרות

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

: מחרוזת בקלט )קוד המקור( (lexemeלקסמה )•שהמנתח הלקסיקלי התאים לאסימון כלשהו.

Page 9: ניתוח לקסיקלי וכלי  Lex

המנתח הלקסיקלי - דוגמה

;” :x = size + 29“ניתוח לקסיקלי עבור •

\n ; 29 + size = x

sep num op id assign id

לקסמות

אסימונים

המנתח לא יחזיר אסימון

Page 10: ניתוח לקסיקלי וכלי  Lex

הגדרות

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

: מחרוזת בקלט )קוד המקור( (lexemeלקסמה )•שהמנתח הלקסיקלי התאים לאסימון כלשהו.

: ביטוי רגולרי שמגדיר את (pattern, regexpתבנית )•ההתאמה בין אוסף הלקסמות לאסימון מסוים.

ע"י התבניתnumדוגמה: ניתן להגדיר את האסימון –(0+1+…+9+)

Page 11: ניתוח לקסיקלי וכלי  Lex

המנתח הלקסיקלי ותכונות סמנטיות

הלקסמות אינן עוברות הלאה לשלבים הבאים בניתוח, אלא רק •האסימונים שנוצרו מהן

המנתח התחבירי אינו צריך את הלקסמות.–המנתח הסמנטי כן צריך מידע עליהן:–

?xהאם קיים משתנה ששמו •איזו פעולה בדיוק הופעלה?•

לטובת העברת המידע על הלקסמות, המנתח הלקסיקלי •מחשב לכל אסימון תכונות סמנטיות:

–id {name = “x”}–op {type = “+”}

התכונות הסמנטיות ידונו בהרחבה בהמשך.•

Page 12: ניתוח לקסיקלי וכלי  Lex

Lexכלי

מנתחים לקסיקליים.לייצורכלי •צורת הפעלה:•

הגדרת מנתח לקסיקל

י)קובץ טקסט(

lexקוד של המנתח

(lex.yy.c)

מנתח לקסיקל

י

gcc

Flexבקורס נעבוד עם כלי תואם •

Page 13: ניתוח לקסיקלי וכלי  Lex

Lexבניית מנתח לקסיקלי בעזרת

( source.lex(עריכת קובץ הגדרת המנתח )1בקובץ טקסט.

flex source.lex(הרצת הפקודה 2lex.yy.c בשם Cהפלט המתקבל: קובץ –

לטובת ייצור gcc –ll lex.yy.c(הרצת הפקודה3קובץ ההרצה.

הגדרת מנתח לקסיקל

י

lexקוד של המנתח

מנתח לקסיקל

י

gcc

Page 14: ניתוח לקסיקלי וכלי  Lex

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

קובץ הגדרות הוא קובץ טקסט המורכב •משלושה חלקים המופרדים בעזרת שורות

המכילות "%%" בלבד:

Definition section %%Rules section %%C code section

Page 15: ניתוח לקסיקלי וכלי  Lex

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

Page 16: ניתוח לקסיקלי וכלי  Lex

Definitionssection

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

Page 17: ניתוח לקסיקלי וכלי  Lex

Rules section

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

Page 18: ניתוח לקסיקלי וכלי  Lex

C code section

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

Page 19: ניתוח לקסיקלי וכלי  Lex

Cהגדרות של שפת -

קוד זה מועתק כפי שהוא לתחילת קובץ

מייצר.flex ש-Cה-אופציות השולטות עלצורת העבודה של

Flex הגדרת מקרואים(macros)

בעזרת ביטויים רגולריים

)לשימוש בחלק הבא(

Definitions section

Page 20: ניתוח לקסיקלי וכלי  Lex

Lexביטויים רגולריים של

ביטוי רגולרי של

Lex

ביטוי רגולרי "רגיל"

משמעות

a a aהתו . Σ \ {\n} כל תו פרט לירידת שורה

[xyz][a-z]

x+y+za+b+c+…+z

אחד מהתווים שבתוך הסוגריים

r*r+

r*r+

-ים rמספר כלשהו של כולל אפס / לא כולל אפס

דוגמאות נוספות ניתן למצוא באתר הקורס

Page 21: ניתוח לקסיקלי וכלי  Lex

Rules sectionהגדרות של

אסימונים ופעולות צריך לבצעLexש-

בעת זיהוי שלהם

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

Page 22: ניתוח לקסיקלי וכלי  Lex

C code sectionהגדרות פונקציות

שהוכרזו בחלק ראשון

משתנים גלובלייםLexשל

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

Page 23: ניתוח לקסיקלי וכלי  Lex

Lexמשתנים גלובליים של

שם טיפוס משמעותyytext char* הטקסט של הלקסמה האחרונה

שזוהתה

yyleng int אורך הלקסמה האחרונה שזוהתה

yylineno int השורה הנוכחית בקלט

yylval user defined

משמש לתקשורת עם המנתח (7התחבירי )פרטים בתרגול מספר

Page 24: ניתוח לקסיקלי וכלי  Lex

בונהLexתכונות המנתח הלקסיקלי ש-

.stdout וכותב פלט ל-stdinקורא קלט מ-• )נמצאת בקובץ yylexרוב העבודה נעשית בפונקציה •

lex.yy.c שנוצר ע"י flex:שתפקידה )לקרוא את הקלט.–לזהות אסימונים.–לבצע את הפעולה המתאימה לאסימון )ע"פ קובץ ההגדרות(.–

•yylex:חוזרת רק כאשר בפעולה של אסימון.returnהמשתמש כתב –

אומגיעה לסוף הקלט.–

Page 25: ניתוח לקסיקלי וכלי  Lex

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

שגיאת ניתוח נוצרת כאשר בנקודה מסוימת •yylex.לא מצליחה לזהות אף אסימון

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

אסימונים ימשיך מהתו הבא.דוגמה:•

abc$178idמזוהה כ-

לא מזוהה ולכן מודפס לפלט

numמזוהה כ-

Page 26: ניתוח לקסיקלי וכלי  Lex

טיפול בשגיאות ניתוח )המשך(

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

.Rules sectionאסימון אחרון ב כפי שנעשה בדוגמה: –

Page 27: ניתוח לקסיקלי וכלי  Lex

פתרון קונפליקטים

קונפליקט נוצר כאשר אותו קלט יכול להתאים •למספר אסימונים.

דוגמה: נניח שמוגדרים האסימונים הבאים:•

for “for”

id [a-z]+מחרוזות שיגרמו לקונפליקט ניתוחים אפשריים

abcford

for

Page 28: ניתוח לקסיקלי וכלי  Lex

פתרון קונפליקטים

קונפליקט נוצר כאשר אותו קלט יכול להתאים •למספר אסימונים.

דוגמה: נניח שמוגדרים האסימונים הבאים:•

for “for”

id [a-z]+מחרוזות שיגרמו לקונפליקט ניתוחים אפשריים

abc a, ab, abcford for, ford, f, fo

for for )id( / for )for(

Page 29: ניתוח לקסיקלי וכלי  Lex

הכללים לפתרון הקונפליקט

המנתח חמדן – תמיד מעדיף את הלקסמה 1. שניתן לבחור.הארוכה ביותר

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

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

Page 30: ניתוח לקסיקלי וכלי  Lex

פתרון הדוגמה

מחרוזות שיגרמו לקונפליקט

ניתוחים אפשריים הניתוח שייבחר

לפי כלל

abc a, ab, abcford for, ford, f, fofor for )id( / for )for(

נניח שמוגדרים האסימונים הבאים:•

for “for”

id [a-z]+

abc 1

for )for( 2

ford 1

הכללים לפתרון קונפליקט

בחירת הלקסמה הארוכה 1.ביותר.

( לא פתר - בחירת 1אם כלל )2.אסימון בעל עדיפות גבוהה

יותר.

Page 31: ניתוח לקסיקלי וכלי  Lex

מקורות נוספים

ניתן למצוא באתר Lexדוגמאות לשימוש ב-•הקורס

ועל ביטויים Lexאינפורמציה נוספת על •רגולריים:

–man lex–man –s 5 regexp

:Flexאתר הבית של כלי •http://flex.sourceforge.net