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

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

  • Upload
    shani

  • View
    63

  • Download
    0

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

סמנטיים טיפוסים הגדרת

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

15

Lexקובץ

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

16

Bisonקובץ

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

17

המשך - Bisonקובץ

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כעת השגיאה , מתקבלת

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