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

Post on 17-Jan-2016

108 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

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

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

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

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

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

ניתוחתחבירי

ניתוחסמנטי

backend

x = 23;

קומפיילר

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

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

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

ניתוחתחבירי

ניתוחסמנטי

backendתכנית

בשפת המקור

x = 23;

רצף אסימונים

id assign num sepx = 23 ;

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

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

ניתוחתחבירי

ניתוחסמנטי

backendתכנית

בשפת המקור

S

id assign E sep

num

עץ גזירה

x = 23;

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

הלקסיקלי(

רצף אסימונים

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

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

ניתוחתחבירי

ניתוחסמנטי

backendתכנית

בשפת המקור

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

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

x = 23;

עץ גזירה

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

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

ניתוחתחבירי

ניתוחסמנטי

backendתכנית

בשפת המקור

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

x = 23;

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

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

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

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

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

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

ניתוחתחבירי

ניתוחסמנטי

backendתכנית

בשפת המקור

קומפיילר

הגדרות

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

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

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

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

\n ; 29 + size = x

sep num op id assign id

לקסמות

אסימונים

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

הגדרות

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

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

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

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

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

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

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

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

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

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

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

Lexכלי

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

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

י)קובץ טקסט(

lexקוד של המנתח

(lex.yy.c)

מנתח לקסיקל

י

gcc

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

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

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

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

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

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

י

lexקוד של המנתח

מנתח לקסיקל

י

gcc

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

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

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

Definition section %%Rules section %%C code section

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

Definitionssection

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

Rules section

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

C code section

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

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

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

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

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

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

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

Definitions section

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

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

Lex

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

משמעות

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

[xyz][a-z]

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

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

r*r+

r*r+

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

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

Rules sectionהגדרות של

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

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

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

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

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

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

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

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

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

שזוהתה

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

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

yylval user defined

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

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

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

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

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

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

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

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

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

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

abc$178idמזוהה כ-

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

numמזוהה כ-

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

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

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

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

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

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

for “for”

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

abcford

for

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

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

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

for “for”

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

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

for for )id( / for )for(

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

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

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

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

פתרון הדוגמה

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

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

לפי כלל

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.אסימון בעל עדיפות גבוהה

יותר.

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

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

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

–man lex–man –s 5 regexp

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

top related