30
ללללל7 – ללללל לללל לללללל ללללללל לללbison 1

תרגול 7 – בניית מנתח תחבירי באמצעות כלי bison

Embed Size (px)

DESCRIPTION

תרגול 7 – בניית מנתח תחבירי באמצעות כלי bison. bison. b ison הוא כלי אוטומטי לייצור מהדרים. קלט: קובץ מקור בשפת bison המגדיר את סכימת התרגום. פלט: מתרגם הפועל ע"פ סכימת התרגום. ניתוח תחבירי: בשיטת LALR (+הרחבה לפתרון קונפליקטים). ניתוח לקסיקלי: ע"י פונקציה שהוגדרה מראש. - PowerPoint PPT Presentation

Citation preview

Page 1: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

1

מנתח – 7תרגול בניית

כלי באמצעות תחבירי

bison

Page 2: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

2

bison

•bison. מהדרים לייצור אוטומטי כלי הואקלט:–

בשפת • מקור סכימת bisonקובץ את המגדירהתרגום.

פלט:–•. " התרגום סכימת פ ע הפועל מתרגם• : בשיטת תחבירי לפתרון )+ LALRניתוח הרחבה

קונפליקטים(.• . " : מראש שהוגדרה פונקציה י ע לקסיקלי ניתוח

– " כלי י ע מסופקת להיות .Lex (yylex)יכולה

Page 3: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

3

ב השימוש Lexבעזרת bisonסכימתהמגדיר מקור קובץ

המנתח אתהלקסיקלי

(source.lex)

flexהכלי את Cקובץ המגדיר

הלקסיקלי המנתח(lex.yy.c)

המגדיר מקור קובץהמתרגם את

(source.ypp)bisonהכלי

++ Cקובץ את המגדירהמתרגם

(source.tab.cpp)

הגדרות קובץלשניהם משותף

(source.hpp)

g++

הרצה קובץשל

המתרגם (a.out)

Page 4: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

4

ידי על הנוצר bisonהמנתח•: הבאות הפונקציות את מכיל

–yylex . הלקסיקלי)( : הניתוח פונקציית

• " כלי י ע .Lexנוצרת

–yyparse. הראשית)(: התחבירי הניתוח פונקציית

• " י ע אוטומטית .bisonנוצרת

או 0מחזירה • בהצלחה הסתיים הניתוח .1אם אחרת

–yyerror :)(ש .yyparseפונקציה שגיאה שמתגלית פעם בכל לה קוראת

•. " בשגיאות בעצמו לטפל מ ע אותה לדרוס יכול המשתמש

• , מהפונקציה לבצע yyparseבחזרה נכשלת. error recoveryמנסה היא אם

תחזיר- .1בכך

–main :)(ל קריאה היא העיקרית .yyparseמטרתה•. המנתח של מיוחדת סיום ופעולת איתחולים לשם לנצלה ניתן

Page 5: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

5

של הקלט קובץ bisonמבנה

מודגשות ) • להופיע חייבות החלקים בין המפרידות השורות שתי

.) תחתון בקו

, 3חלק • מחלק לקרוא ניתן להן עזר שגרות עבור .2מיועד

Page 6: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

6

של הקלט קובץ bisonמבנה

בחלק • המופיעות השגרות בחלק 3על להכריז - בין 1יש ל%}

. }%

בחלק • הרשום - %{ ) 1ובחלק 3כל בשפת %} כתוב ל ++( Cבין " י ע שנוצר המקור לקובץ שהוא כמו .bisonמועתק

Page 7: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

7

בין -flexקישור bisonל bison- " ל קריאה י ע הלקסיקלי המנתח את .yylexמפעיל

- ש האסימונים בין לתאם -flexצריך ש האסימונים לבין bisonמייצרקורא.

הגדרות ) ( headerקובץsource.tab.hpp

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

(source.lex)

flexהכלי את Cקובץ המגדיר

הלקסיקלי המנתח(lex.yy.c)

המגדיר מקור קובץהמתרגם את

(source.ypp)bisonהכלי

++ Cקובץ את המגדירהמתרגם

(source.tab.cpp)

הגדרות קובץלשניהם משותף

(source.hpp)

g++

הרצה קובץשל

המתרגם (a.out)

Page 8: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

8

Bison: %token NUMBER

Lex: [0-9]+ {yylval.value=atoi(yytext)

return NUMBER; }

בין -flexקישור bisonל bison- " ל קריאה י ע הלקסיקלי המנתח את .yylexמפעיל

- ש האסימונים בין לתאם -flexצריך ש האסימונים לבין bisonמייצרקורא.

ה • בקובץ שהוגדרו האסימונים ב bisonכל שנוצר headerיופיעו

הכלי" ) י (.source.tab.hppע

ה • הגדרות לצרוך )Lexקובץ הקובץ( includeצריך את

source.tab.hpp. התיאום את ליצור מנת על

Page 9: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

9

של • המבט :bisonמנקודתהפונקציה – של קיומה את .yylexמניח

האסימונים • לאחד המתאים קבוע פעם בכל מחזירה% " י ע .tokenשהוגדרו

של • המבט :Lexמנקודתב – שהוגדרה מחרוזת " %bisonכל י מתורגמת token Xע

ב .source.tab.hppלקבועהקבוע – המזהה את המחזיר לקסיקלי יחזיר, Xמנתח

, יפורש ולכן ההגדרות בקובץ שמוגדר הקבוע אותו אתכאסימון" התחבירי המנתח י .Xע

בין -flexקישור bisonל

Page 10: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

10

Bison: %token NUMBER

Lex: [0-9]+ {yylval.value=atoi(yytext)

return NUMBER; }

•yylval מטיפוס גלובלי משתנה הוא YYSTYPEהוא גם המוגדר

. source.tab.hppבקובץ

•. שנקרא האחרון האסימון של הסמנטיות התכונות את מכיל

לטיפוס • המחדל .intהיא YYSTYPEברירת

את • להגדיר המשותף YYSTYPEניתן ההגדרות בקובץ עצמאית

.bisonול Lexל

בין -flexקישור bisonל

Page 11: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

11

ב סמנטיות bisonתכונות

הן • הדקדוק משתני כל של כולן התכונותהטיפוס .YYSTYPE – מאותו

הגלובלי – המשתנה של הטיפוס גם .yylvalזהוהגדרת – את לדרוס להגדיר YYSTYPEניתן מנת על

: . למשל שונים טיפוסים בעלות תכונות

Page 12: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

12

הגזירה – כללי חוקים

Page 13: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

13

הגזירה – כללי חוקים

•: הבאה בצורה ירשם חוק

של – התחילי המשתנה הוא הראשון החוק של שמאל באגף המשתנההדקדוק.

•: וטרמינלים משתנים של הסמנטיות לתכונות גישה–. החוק - של שמאל באגף המופיע המשתנה תכונות $$

–n$ - (n>0)- ה הסימן חוקים ) nתכונות כולל החוק של ימין באגףסמנטיים(.

ו – $$n מטיפוס משתנים הם $YYSTYPE.

A B C NUM ‘d’ E

$$ $1 $2 $3 $4 $5 הסימןA B C NUM d E מתייחס

ל-

Page 14: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

14

ב מנת unionשימוש עלשונות תכונות להגדיר

שונים טיפוסים עבור

Page 15: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

15

Page 16: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

16

Page 17: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

17

Page 18: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

18

עם bisonעבודה

• bison –d source.ypp• flex source.lex• g++ source.tab.cpp lex.yy.c

• bison –v source.ypp

קבצי tab.h, tab.cppמייצר

קובץ lex.yy.cמייצר

הרצה קובץ מייצר

קובץ עם source.outputמייצרוטבלת האוטומט מצבי

המעברים.

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

וקיימים.

Page 19: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

19

מרקרים - חוקים

X

, εחוקי " למשל ריק חוק י ע | ;A : B Cנכתבים

Page 20: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

20

משמעיים רב בדקדוקים טיפול• " דו דקדוק י ע המתוארים תכנות בשפות אלמנטים ישנם

משמעי. –: וכפל, חיבור עם אריתמטיים ביטויים לדוגמא

הקלט – מילת על למשל משמעי דו הוא זה ”. 3*1+2“דקדוקהרישא “ את קרא שהמנתח :2ישנן” 1+2לאחר התנהגויות

ובצע, shiftבצע 1. הקלט את לקרוא " reduceהמשך פ ע בסופו . השלישי הכלל

לפירוש • (3*2+)1מתאים

. reduceבצע 2. " הראשון הכלל פ עלפירוש )• 3(*1+2מתאים

Page 21: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

21

משמעיים רב בדקדוקים טיפול–: הדקדוק עבור האוטומט של חלקי ציור

הטרמינל – עבור קונפליקט ישנו המסומן *.במצבהטרמינל, +. – עבור גם קונפליקט ישנו בנוסף

המחרוזת “• של הפירושים לשני ”:1+2+3מתאים(.2+3+)1או 3(+1+2)– , כן(. ) חיסור עבור אבל משנה לא זה חיבור עבור

Page 22: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

22

אופרטורים קדימות• : לחיבור כפל בין לקונפליקט :3(*1+2לעומת( )3*2+)1פתרון

ל – לציין לאסימון * + .bisonניתן מאשר גדולה עדיפות יש שלאסימון

– . " ההגדרות בקובץ אסימונים על ההכרזה סדר י ע מבוצע

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

–bison לכל עדיפות גזירה מגדיר .כלל•. בכלל המופיע האחרון האסימון עדיפות היא המחדל ברירת

•% " ב שימוש י ע מפורש באופן עדיפות לציין הוא tכאשר prec tניתןאסימון ) להוסיף ניתן לכלל לתת רוצים עדיפותו שאת האסימון

.) זו למטרה חדש%token '+'%token '*'%%E: E '+' E {…} | E '*' E {…} ;

Page 23: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

23

אופרטורים קדימות• : לחיבור כפל בין לקונפליקט :3(*1+2לעומת( )3*2+)1פתרון

קונפליקט bisonכאשר – עבור shift/reduce: shiftמוצאמול tטרמינל כלל reduceאל ,Aαעם

לטרמינל shiftיבוצע • מלכלל tאם גדולה .Aαעדיפות

.reduceיבוצע • לטרמינל מאשר גבוהה עדיפות לכלל אם

•. נפתר לא הקונפליקט אחרת

– , ה, לטובת ייפתר זה קונפליקט הבעייתי במצב shiftבדוגמאלכלל * מאשר גדולה עדיפות ולאסימון .EE+Eמכיוון

•. הראשונה הפרשנות '+' token%התקבלה%token '*'%%E: E '+' E {…} | E '*' E {…} ;

ב להשתמש היה צריך זו בדוגמא למעשה%nonassoc% ב לקבל tokenבמקום כדי

קדימות. . בהמשך כך על נדבר

Page 24: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

24

משמעיים רב בדקדוקים טיפול

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

Page 25: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

25

אסוציאטיביותהטרמינל + : • עבור לקונפליקט פתרון

:3(+1+2לעומת( )2+3+)1אותה '+' – ולאסימון מאחר עדיפות בעזרת להכריע ניתן לא

לכלל כמו .EE+Eהעדיפות–. שמאלית '+' אסוציאטיביות כבעל האסימון את להגדיר ניתן

עם %• עם %leftיוכרז tokenבמקום

%left '+'%token '*'%%E: E '+' E {…} | E '*' E {…} ;

Page 26: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

26

אסוציאטיביותהטרמינל + : • עבור לקונפליקט פתרון

:3(+1+2לעומת( )2+3+)1קונפליקט – , S/Rכאשר קדימויות בעזרת נפתר יכריע bisonאינו

: הבא באופןה • יועדף שמאלית אסוציאטיביות לאסימון .reduceאם• , ה יועדף ימנית אסוציאטיביות לאסימון .shiftאם

ה – יועדף שלנו .reduceבמקרה השנייה הפרשנות את ונקבל

%left '+'%token '*'%%E: E '+' E {…} | E '*' E {…} ;

Page 27: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

27

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

" י, ע שהוגדרו אסימונים עבור לא אסוציאטיביות%token.ב %– להשתמש עדיפות nonassocניתן עם אסימון להגדיר כדי

. אסוציאטיביות לו שאין

נרצה: • מתמטיים אופרטורים לאילו שאלה? ימנית אסוציאטיביות

– : החזקה- אופרטור a^b^cלמשל

Page 28: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

28

משמעיים רב בדקדוקים טיפולקונפליקט • :shift/reduceסיכום

עדיפות – הגזירה לכלל עדיפות rאם הקלט :tולטרמינל.reduceיבוצע r>tאם •.shiftיבוצע r<tאם •" ) r=tאם • זהה הכלל של האסוציאטיביות פ ע תיקבע הפעולה

:) הטרמינל לאסוציאטיביותשמאלית – .reduceיבוצע אסוציאטיביותימנית – .shiftיבוצע אסוציאטיביותמוגדרת – אינה שגיאה.אסוציאטיביות

:reduce/reduceקונפליקט •של – המחדל ברירת הגזירה bisonהתנהגות בכלל לבחור היא

. בדקדוק קודם שהופיע

–. זה קונפליקט עם שיתמודד כך הדקדוק את לשנות מומלץ

Page 29: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

29

שורה ) כל הבאים מהקלטים אחד כל עבור התוכנית פלט יהיה מה כתבושורה ירידת בסימן ’(:n‘\מסתיימת

1. cbdbc2. cadbc3. caddc4. cadac

ממבחן שאלהה תוכנית :bisonנתונה הבאה

Page 30: תרגול 7 – בניית מנתח תחבירי באמצעות כלי  bison

30

2שאלה ה קובץ את כתב (:grammar.yהבא )bisonסטודנט

. פעולות שתי הסטודנט הוסיף כך אחר שגיאות או אזהרות ללא התקמפל הקובץסמנטיות:

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

. השגיאה מקור את הסבירו