150 likes | 385 Vues
תרגול – בניית מנתח תחבירי. bison (בכל מקום בו כתוב yacc – הכוונה ל- bison ). ( yylex ). קובץ הגדרות משותף לשניהם: y.hpp. המנתח הנוצר על ידי Bison. קוראת ל- yylex ומקבלת אסימון ממנו. קישור בין flex ל- bison. bison מפעיל את המנתח הלקסיקלי ע"י קריאה ל- yylex .
E N D
תרגול – בניית מנתח תחבירי bison (בכל מקום בו כתוב yacc – הכוונה ל-bison)
(yylex) קובץ הגדרות משותף לשניהם: y.hpp
המנתח הנוצר על ידי Bison קוראת ל-yylex ומקבלת אסימון ממנו
קישור בין flex ל-bison bison מפעיל את המנתח הלקסיקלי ע"י קריאה ל-yylex. צריך לתאם בין האסימונים ש-flex מייצר לבין האסימונים ש-bison מכיר. Bison yylval הוא משתנה גלובלי מטיפוס YYSTYPE, שברירת המחדל שלו היא int. ניתן להגדיר את YYSTYPE עצמאית, למשל ע"י
חלק 1 וחלק 3 מועתקים כמו שהם לקובץ שנוצר ע"י Bison. חלק 2 יכול להשתמש בהגדרות שניתנות בחלק 1, למשל עבור הניתוח הלקסיקלי.
חוקים • המשתנה באגף שמאל של החוק הראשון ברשימת החוקים הוא המשתנה התחילי של הדקדוק • חוק ירשם בצורה הבאה: • גישה לתכונות הסמנטיות של משתנים וטרמינלים: • $$ - תכונות המשתנה המופיע באגף שמאל של החוק • n$ - (n>0) תכונות הסימן ה-n באגף ימין של החוק (כולל חוקים סמנטיים) A B C NUM ‘d’ E
חוקים - מרקרים חוקי ε נכתבים ע"י חוק ריק, למשל A : B C | ; X
אסימון (מהניתוח הלקסיקלי) קדימות אסוציאטיביות משתנה תחילי קדימות
עבודה עם bison • bison –d source.ypp • flex source.lex • g++ source.tab.cpplex.yy.c • bison –v source.ypp מייצר קבצי tab.h, tab.cpp מייצר קובץ lex.yy.c מייצר קובץ הרצה מייצר קובץ source.output עם מצבי האוטומט וטבלת המעברים
קובץ t7.hpp קובץ t7.tab.hpp
שאלה ממבחן כתבו מה יהיה פלט התוכנית עבור כל אחד מהקלטים הבאים (כל שורה מסתיימת בסימן ירידת שורה ‘\n’) cbdbc cadbc caddc cadac