Download presentation
Presentation is loading. Please wait.
1
تهيه کننده: آرش شیخلو گروه: کامپيوتر
دانشگاه پيام نور اصول طراحي کامپايلر تهيه کننده: آرش شیخلو گروه: کامپيوتر
2
Principles, Techniques, and Tools
شناسنامه منبع عنوان منبع: کامپايلرها مترجم: دلداري انتشارات: باغاني (خراسان) منبع اصلي: Compilers: Principles, Techniques, and Tools
3
جايگاه درس در رشته کامپيوتر
ضرورت اين درس: ضرورت نياز به زبانهای سطح بالا ضرورت ترجمه برنامه های نوشته شده با زبان سطح بالا به برنامه به زبان ماشين تنوع زبانهای برنامه نويسی سطح بالا دروس پيش نياز: نظريه زبانها و ماشين، طراحی و پياده سازی زبانها نوع درس: اجباري تعدادکل ساعات تدريس:30 تعداد جلسات تدريس:10
4
فصل اول: مقدمه اي بر کامپايلر
اهداف رفتاري: دانشجو پس از مطالعه اين فصل با مفاهيم زير آشنا خواهد شد: برنامه هاي تحليل کننده آشنايي با بخش تحليل و بخش سنتز کامپايلر ابزارهای ساخت کامپايلر
5
1-1 نمونه اي از برنامه هاي تحليل کننده
ويرايشگرهاي ساختار چاپگرهاي pretty printer بررسي کننده هاي ايستا مفسرها شکل دهنده هاي متن کامپايلرهاي سيليسيومي مفسرهاي پرس و جو
6
1-2 تعريف كامپايلر کامپايلر «تحليل+ سنتز»
1- ترجمه برنامه از زبان مبدا به برنامه معادل دز زبان مياني مانند اسمبلي 2- گزارش وجود خطاها را در برنامه مبدا به كاربر. کامپايلر «تحليل+ سنتز» برنامه مبدأ برنامه مقصد پيغام خطا
7
1-3 طبقه بندي كامپايلرها تك گذره چند گذره اشكال زدا و Load-and-go
دسته بندي كامپايلرها بر اساس چگونگي ساخت و عمليات: تك گذره چند گذره اشكال زدا و Load-and-go بهينه ساز
8
1-4 عمليات كامپايلر بخش تحليل بخش سنتز
تجزيه برنامه مبدا به اجزاي تشكيل دهنده اش بخش تحليل توليد كد مياني از برنامه مبدا تبديل كد مياني به برنامه مقصد در زبان ديگر بخش سنتز نياز به بيشترين روشهاي خاص
9
1-5 سيستم پردازش زبان اجزاي سيستم پيش پردازشگر كامپايلر اسمبلر
باركننده و ويرايشگر الحاق
10
1-5-1پيش پردازشگر جمع آوري ماژولهاي برنامه مبدا موجود در فايلهاي جداگانه تبديل بخشهاي خلاصه شده بنام درشت دستورات به احكام زبان مبدا
11
1-5-2 ارتباطات در سيستم پردازش زبان
اسكلت برنامه مبدا پيش پردازشگر برنامه مبدا كامپايلر برنامه اسمبلي مقصد اسمبلر كد ماشين جابجاپذير كتابخانه فايل هاي مقصد جابجاپذير باركننده / ويرايشگر الحاق كد ماشين
12
1-6 سه فاز تحليل در عمل کامپايل
تشخيص نشانه ها تحليل خطي(تحليل لغوي يا پويش) گروه بندي نشانه هاي برنامه مبدا به جملات گرامري تحليل سلسله مراتبي(تحليل نحوي يا تجزيه) بررسي خطاهاي معنايي برنامه تحليل معنايي
13
1-7 مراحل كامپايل 1- تحليل لغوي 2- تحليل نحوي 3- تحليل معنايي
جلوبندي( گروه فازهاي متوالي وابسته به زبان مبدا) 4- توليد كد مياني 5- بهينه سازي كد 6- توليد كد نهايي عقب بندي( گروه فازهاي متولي وابسته به زبان مقصد)
14
1-7-1 نمودار مراحل كامپايل
تحليل گر لغوي تحليل گر نحوي تحليل گر معنايي مدير جدول نماد اداره كننده خطا توليد كننده كد مياني بهينه ساز كد توليدكننده كد نهايي
15
1-7-2 مراحل کامپايلر- تحليل گر لغوي
مرور متن برنامه به صورت حرف به حرف تبديل آنها به نشانه ها ( كلمات كليدي، عملگر، جداكننده، ثوابت و شناسه)
16
1-7-2 مراحل كامپايل- تحليل گر نحوي
بررسي خروجي تحليل لغوي ساخت درخت تجزيه از نشانه ها
17
1-7-2 مراحل كامپايل - تحليل گر معنايي
بررسي برنامه مبدا براي يافتن خطاهاي معنايي جمع آوري اطلاعات مربوط به نوع داده ها
18
1-7-2 مراحل كامپايل - توليد كد مياني
خواندن برنامه ورودي تبديل به برنامه اي در زبان مياني مانند اسمبلي
19
1-7-2 مراحل كامپايل - بهينه ساز كد
بهينه كردن كد مياني ( حذف متغيرهاي مياني غير ضروري) سرعت بخشيدن به توليد كد نهايي
20
1-7-2 مراحل كامپايل - توليد كننده كد نهايي
تبديل كد مياني بهينه به كد جابجاپذير يا اسمبلي تعيين مكانهاي حافظه براي متغيرهاي برنامه انتساب متغيرها به ثبات هاي ماشين
21
1-7-2 مراحل كامپايل - مديريت جدول نماد
تعريف ساختمان داده اي شامل ركورد براي شناسه و ميدانهايي براي صفات أن هدف فراهم كردن شناسايي سريع ركورد شناسه بمنظور ذخيره و بازيابي داده هايش
22
مثال از مراحل كامپايل: عبارت Area:= Pos + Rate * 50
تحليل گر لغوي Area:= Pos + Rate * 50 id1:= id2+ id3 * 50 تحليل گر نحوي tem1:=into real 50 tem2:=id3 * tem1 tem3:= id2 + tem2 Id1:= tem3 := := توليد كد مياني + + تحليل معنايي id1 id1 بهينه ساز id2 * * id2 tem1:= id3 * 50.0 Id1:= id2 + tem1 Into real id3 id3 50 توليد كد نهايي 50 Mov id, R2 Mul , R2 Mov R1, id1 Mov id2 , R1 Add R2, R1
23
1-8 ابزارهاي ساخت كامپايلر
مولدهاي تجزيه كننده توليد كننده هاي پويشگر موتورهاي ترجمه نحوگرا مولدهاي كد خودكار موتورهاي جريان داده
24
نحو زبان و تجزيه اهداف رفتاري: فصل دوم : گرامر اشتقاق و تجزيه
دانشجو پس از مطالعه اين فصل با مفاهيم زير آشنا خواهد شد: گرامر اشتقاق و تجزيه تعريف نحوگرا درخت نحوی تجزيه بالا به پايين و پايين به بالا ترجمه
25
2-1 گرامر تعريف کاربرد گرامر: روش ساخت رشته هايي متشكل از نمادها
وسيله تشخيص عضويت يك رشته در زبان مشخص كننده ساختار يك زبان
26
2-2 تعريف رياضي گرامر گرامر 4 گانه {N, T, S, P} = G
27
مثال از يك گرامر رشته توليدي نمونه N = { E, F } T = { +, * , / ,id }
S = E P = { E F * id , F F / E , F F + F } رشته توليدي نمونه id * id+ id
28
2-3 اشتقاق فرآيند توليد رشته از گرامر با شروع از عنصر ابتداي
گرامر و استفاده از قوانين. از چپ: در هر قدم انجام جايگزيني روي سمت چپ ترين غيرپايانه انواع اشتقاق از راست: در هر قدم انجام جايگزيني روي سمت راست ترين غيرپايانه
29
مثال از اشتقاق id + id * id توليد رشته اشتقاق راست اشتقاق چپ
E E + E E + E * E E + E * id E + id * id id + id * id اشتقاق چپ E E + E id + E id + E * E id + id * E id + id * id
30
2-3-1 درخت تجزيه درخت تجزيه نشان دهنده چگونگي اشتقاق رشته اي از زبان
از نماد شروع گرامر ساخت درخت تجزيه - S ريشه درخت فرزندان آن XYZ گره اي در درخت و A = A XYZ قانون فرزندان آن X ,a گره اي در درخت و A = A Xa قانون پايانه ها ( حروف كوچك) تنها در برگها ديده مي شوند.
31
2-3-2 درخت اشتقاق درخت تجزيه اي نشان دهنده مراحل اشتقاق بكار رفته (راست يا چپ) E مثال E E + id + id * id id E E * id id
32
2-4 گرامر مبهم وجود دو اشتقاق راست يا دو اشتقاق چپ راي يك رشته در گرامر id + id * id مثال اشتقاق چپ اول E E + E id + E id + E * E id + id * E id + id * id اشتقاق چپ دوم E E + E id + E id + E * E id + id * id
33
2-5 نشان گذاري پسوندي نشان گذاري يك عبارت مانند E
2- اگر E عبارتي بشكل E1 op E2 باشد كه Op عملگر دودويي است نشان گذاري آن عبارتست از F1 F2 Op كه F1, F2 نشان گذاري E1 , E2 هستند. 3- اگر E عبارتي بشكل (E1)باشد، نشان گذاري براي E1 همان نشان گذاري براي E مي باشد. 9-(5+2) 952+ -
34
2-6 تعريف نحو گرا كاربرد براي ترجمه ساختارهاي زبان.
ترجمه ساختار را بر حسب صفات مربوط به مولفه هاي نحوي تعيين نوع ساختار، مكان اولين دستور توليد شده در برنامه هدف يا تعداد دستورات براي كامپايلر
35
گرامر و مجموعه اي از قواعد معنايي وابسته به آن
2-6-1 تعريف نحوي جهت دار گرامر و مجموعه اي از قواعد معنايي وابسته به آن هر نماد در گرامر مجموعه اي از صفات دارد. در هر مولد يا قانون گرامر مجموعه اي از قواعد معنايي براي محاسبه مقادير صفات نمادها وجود دارد. صفات و محاسبه آنها
36
2-7 ترجمه ساختن درخت ترجمه: الف( ساختن درخت تجزيه براي ورودي
ب) اگر گره n در درخت تجزيه با نماد x از گرامر متناظر باشد، x.a مقدار صفت a از نماد x در آن گره است. ج) مقدارx.a در گره n با استفاده از قواعد معنايي براي صفت a همراه با قانون گرامري استفاده شده درگره n محاسبه مي شود.
37
تعريف نحوگرا براي ترجمه عبارات ميانوندي به عبارت معادل پسوندي
مثال از ترجمه قانون قواعد معنايي expr expr1 + term expr.t := expr1.t // term.t // ,+, expr expr1 - term expr.t := expr1.t // term.t // , - , expr term expr.t := term.t term term.t := , 0, term term.t := , 1, ….. ….. term term.t := , 9, تعريف نحوگرا براي ترجمه عبارات ميانوندي به عبارت معادل پسوندي
38
2- 7-1درخت نحوي - expr.t = 95-2+ expr.t = 95- term.t = 2 expr.t = 9
39
هر گره نماينده يك عملگر و فرزندان آن عملوند آن
2-7-2 انواع درخت نحوي درخت نحو مجرد هر گره نماينده يك عملگر و فرزندان آن عملوند آن درخت نحو واقعي درخت تجزيه اي كه عملگرها خود فرزند محسوب مي شوند.
40
2-8 الگوي ترجمه تفاوت با ترجمه نحوگرا
گرامر مستقل از متني كه قطعه برنامه هايي كه عمليات معنايي ناميده مي شوند در سمت راست قوانين آن اضافه شده اند. تفاوت با ترجمه نحوگرا نمايش ترتيب ارزشيابي قوانين بطور صريح.
41
2-8-1 درخت توليد شده براي الگوي ترجمه
expr طريقه ساخت درخت expr1 + term {print ( ,+, ) } يك برگ اضافي ساخته شده براي عمل معني 1- ساختن فرزند اضافي براي درخت 2- متصل نمودن اين فرزند به گره مربوط به قانون خود در گرامر
42
2-9 تجزيه ( پارسينگ) * تجزيه به كمك تحليلگر نحوي و به نام تحليل نحوي انجام مي گيرد. * در تجزيه تعلق رشته ورودي به زبان مبدا بررسي مي شود. * بررسي طبق ساختار و نحو دستورات زبان مبدا انجام مي گيرد.
43
2-9-1 تجزيه- دسته بندي روشها
روش بالا به پايين : ساخته شدن درخت تجزيه از بالا به پايين. مانند LL(1) روش پايين به بالا: ساخته شدن درخت تجزيه از پايين مانند تجزيه به بالا عملگر0 اولويت و LR
44
2-9-1-1 تجزيه كننده بالا به پايين
آغاز تجزيه از عنصر شروع گرامر جايگزيني قانون يك غير پايانه قانون كاربرد دارد؟ بلي خير عقبگرد به قانون هم سطح ديگر برو به قانون سطح بعد
45
مثال از تجزيه بالا به پايين
S bBe B cf/ ce/c تجزيه: Back tracking Back tracking S S S S b e b B e B b B e b e b B c e c c f
46
2-9-1-2 تجزيه بالا به پايين پيش گويانه
روش تجزيه بالا به پايين بدون ويژگي عقبگرد با نگاه به نماد پيش نگر در مورد استفاده از هر قانون درتصميم گيري نماد پيش نگر مجموعه تمام پايانه هايي است كه در قوانين مربوط به غير پايانه در سمت چپ قرار مي گيرند
47
مثال نمادهاي پيش نگر يا مجموعه First A aB /cC / e B dA / c
C cB / a First (A):{ a, c, e } First (B): { d, c } First (C) : {c, a }
48
2-10 بازگشتي چپ ظاهر شدن غير پايانه سمت چپ در سمت راست قانون بعنوان اولين عنصر حذف بازگشتي چپ پيش از تجزيه A xZ / yZ Z aZ / bZ / cZ A Aa / Ab / Ac / x / y
49
مثال حذف بازگشتي چپ S Aa / b A Ac / Sd A Ac / Aad / bd
A bdZ Z cZ / adZ
50
2-11 فاكتور چپ يكسان بودن عنصر سمت چپ در حداقل دو قانون گرامر
فاكتورگيري چپ فاكتورگيري از a A aZ Z B / C A aB / aC
51
مثال فاكتورگيري چپ S iEtSZ /a S iEtS Z eS S iEtSeS / a E b
S iEtS / iEtSes S a E b
52
2-12 تحليل لغوي - دريافت يك رشته كاراكتري از ورودي
- استخراج نشانه ها از آن - تحويل نشانه ها به تجزيه كننده - ارتباط دادن پيامهاي خطاي توليد شده كامپايلر با برنامه مبدا - حذف فضاهاي خالي بين عبارات و توضيحات برنامه - تشخيص شناسه ها و كلمات كليدي زبان
53
Count = count + increment Count = count + increment
مثال Count = count + increment Count = count + increment تحليل لغوي عبارت دستوري تحليل گر لغوي تجزيه كننده id = id + id id = id + id
54
2-12-1 رابط تحليلگر لغوي مصرف نشانه ها براي تعيين ساختار دستورات ورودي
ميانگير خواندن كاراكتر تحليل گر لغوي برگرداندن كاراكتر توليد و ارسال نشانه و صفات آن تحليل گر نحوي ( تجزيه كننده) ميانگير 1- در هر زمان حاوي يك بلوك از كاراكترها 2- اشاره گري به مكان نشانه بعدي پردازش نشده
55
جدولي ساخته شونده توسط. فازهاي تحليل، مورد استفاده فازهاي توليد كد
2-13 تشكيل جدول نماد جدولي ساخته شونده توسط. فازهاي تحليل، مورد استفاده فازهاي توليد كد ذخيره رشته كاراكتري تشكيل دهنده شناسه در جدول. فاز تحليل لغوي اضافه كردن نوع شناسه، مورد استفاده(رويه، متغير و..) فاز تحليل نحوي درج مكان شناسه در حافظه در جدول فاز تحليل معنايي استفاده از اطلاعات جدول براي دسترسي به متغير و توليد كد فاز توليد كد
56
جدول نماد- روالها Lookup ( s ) : Insert ( s , t) : اگر s در جدول است، انديس آن بر مي گردد اگر نه، صفر بر مي گردد انديس وارده جديد مربوط به رشته s نشانه t را بر مي گرداند. عمل Lookup تعيين وجود شناسه در جدول نماد عمل Insert در صورت عدم وجود شناسه ، درج آن در جدول
57
2-13-2 جدول نماد- پياده سازي
كلمات دستوري در متن برنامه mod اشاره گر : ptr :نشانه token صفات : attributes div div mod id d i v m o a دنباله كاراكترهاي ورودي
58
2-14 ماشين پشته انتزاعي ماشين پشته انتزاعي: شكل مرسوم نمايش مياني توليد كد اجزاي ماشين 1- حافظه دستورات 2- حافظه داده ها محاسبات ماشين 1- محاسبات صحيح 2- دستورات دستكاري پشته 3- روند كنترل
59
2-14-1 دستورات محاسباتي ارزشيابي عبارت در ماشين
قابليت پياده سازي مستقيم عملهاي پايه مانند جمع ، تفريق و ... در ماشين انتزاعي پياده سازي. عمليات پيچيده تر با دنباله اي از دستورات اوليه ماشين استفاده از نمايش پسوندي در كد ماشين براي ارزيابي يك عبارت محسباتي استفاده از پشته در حين ارزيابي عبارات ارزشيابي عبارت در ماشين انجام عملگر بر روي مقدار پشته بيرون پراندن عملوندها از پشته قرار دادن نتيجه بر روي پشته
60
مثال ارزيابي عبارت محاسباتي با پشته
13 + 5* عبارت محاسباتي 1- عدد 1 را روي پشته قرار ده 2- عدد 2 را روي پشته قرار ده 3- دوتا از بالاترين عناصر پشته را با هم جمع و آن دو را از پشته بيرون ده 4- نتيجه يعني عدد 4 را روي پشته قرار ده 5- عدد 5 را روي پشته قرار ده 6- دوتا بالاترين عناصر پشته را در هم ضرب و آنها را بيرون ده 7- نتيجه يعني عدد 20 را روي پشته قرار ده
61
2-14-2 دستكاري پشته محتويات مكان L را روي پشته قرار ده
S را روي پشته قرار ده Push s محتويات مكان L را روي پشته قرار ده rvalue l آدرس L را روي پشته قرار ده lvalue l مقدار در بالاي پشته را دور بريز pop r-value بروي پشته در l-value زير آن گذاشته و هر دو از پشته خارج =: يك نسخه از مقدار بالاي پشته را بر روي پشته فشار بده copy
62
مثال عمليات در پشته هنگام محاسبه
day := (1461*y) div 4 + (153*m + 2 ) div 5 + d ترجمه lvalue day push 1461 rvalue y * push 4 push 2 + push 5 div rvalue d := div push 153 rvalue m *
63
2-14-3 كنترل جريان در ماشين تعيين مكان پرش امكان برداشتن عملوند
1- تعيين محل پرش با عملوند دستور 2- تعيين فاصله نسبي براي پرش مثبت يا منفي با عملوند دستور 3- تعيين محل پرش با نماد هاي دستور امكان برداشتن عملوند از بالاي پشته
64
2-14-3-1 كنترل جريان - دستورات
lable l L عدم تاثير در مقصد پرش ها به goto l L اجراي دستور بعدي از حكمي با برچسب gofalse l خارج نمودن مقدار بالاي پشته، پرش در صورت صفر بودن gotrue l خارج نمودن مقدار بالاي پشته ، پرش در صورت صفر نبودن halt توقف اجرا
65
اهداف رفتاري: فصل سوم: تحليلگر لغوي آشنايي با تحليلگر لغوی
فصل سوم: تحليلگر لغوي اهداف رفتاري: دانشجو پس از مطالعه اين فصل با مفاهيم زير آشنا خواهد شد: آشنايي با تحليلگر لغوی عبارات و گرامر باقاعده تحليلگر لغوی Lex ماشين خودکار قطعی و غير قطعی و تبديل آنها به يکدگر
66
3-1 وظايف تحليل گر لغوي 1- خواندن نمادهاي ورودي
2- توليد دنباله اي از نشانه ها 3- ثبت نشانه ها در جدول نمادها 4- حذف توضيحات برنامه، جاي خالي و كاراكتر مربوط به سطر جديد 5- ارتباط دادن پيامهاي خطاي توليد شده كامپايلر با برنامه مبدا
67
3-2 ارتباط با تجزيه كننده ارتباط تحليل گر لغوي با تجزيه كننده
نشانه تحليل گر لغوي تحليل گر نحوي (تجزيه كننده) برنامه مبدا نشانه بعدي را بده جدول نماد ارتباط تحليل گر لغوي با تجزيه كننده
68
3-2-1 دلايل جدايي فازهاي تحليل لغوي و تجزيه
1- ساده تر بودن طراحي دو فاز 2- افزايش كارايي كامپايلر به دليل استفاده از ميانگير بين دو فاز 3- قابليت حمل كامپايلر و محدود شدن تغييرات به تحليلگر لغوي
69
3-3 خطاي مرحله تحليل لغوي منطبق نبودن هيچ كدام از الگوهاي مربوط به تشخيص نشانه ها در زبان مبدا با پيشوندي از ورودي Panic Mode 1- 2- حذف كاراكتر اضافي 3- درج كاراكتر از قلم افتاده 4- جايگزيني يك كاراكتر بجاي كاراكتر غلط 5- جابجا نمودن دو كاراكتر مجاور هم روشهاي پوشش خطا
70
3-3-1 پوشش خطا- Panic mode ساده ترين شيوه پوشش خطا
حذف كاراكترهاي متوالي از باقيمانده ورودي تا پيدا شدن نشانه قابل قبول توسط تحليل گر لغوي كافي بودن براي يك سيستم محاسباتي محاوره اي
71
3-4 تحليلگر لغوي – پياده سازي
روشهاي پياده سازي Lexاستفاده از توليد كننده تحليلگر لغوي مانند كامپايلر نوشتن تحليلگر لغوي به زبانهاي متداول برنامه نويسي I/O سيستم و خواندن رشته ورودي با تسهيلات نوشتن تحليلگر لغوي به اسمبلي و مديريت صريح خواندن رشته ورودي
72
3-5 عبارات با قاعده قواعد تعريف
1- عبارت باقاعده زبان {} (مجموعه حاوي رشته تهي) را مشخص مي نمايد. 2- {a} عبارت باقاعده اي است که زبان a (نمادي از Σ) را مي سازد. 3- اگر a و b عبارات باقاعده باشند، اجتماع، الحاق و Kelin Star آنها هم باقاعده است.
73
مثال عبارات باقاعده اگر ={a,b} باشد آنگاه:
1- از عبارت باقاعده aUb مجموعه {a , b} ساخته مي شود. 2- از عبارت باقاعده (aUb) (aUb) مجموعه { aa, ab,ba,bb} توليد مي شود. 3- عبارت باقاعده a* كليه رشته هايي با صفر يا چند a را توليد مي كند. 4- عبارت باقاعده (aUb) * رشته هايي با صفر يا چند نماد از b يا a را توليد مي كند.
74
3-5-1 عبارات باقاعده – خواص جبري
اصل توصيف / جابجا پذير است. a U b = b U a a U ( b U c)=(a U b U c / شركت پذير است (a b) c = a (b c) الحاق شركت پذير است. الحاق نسبت به / توزيع پذير است a (b U c) = a b U a c ( b U c) a = b a U c a a* = (a U ) a** = a*
75
مثال عبارات با قاعده در زبان پاسكال
تعريف باقاعده مربوط به شناسه ها Letter A \ B \ …\ Z\ a \b\ …\ z Digit 0 \ 1 \ …\ 9 Id letter ( letter / digit ) * تعريف باقاعده اعداد بي علامت Digit 0 \ 1\ … \ 9 Digits digit digit * Optional_fraction . Digits \ Optional_exponent ( E( + \ -\ )digits) \ Num digits optional_fraction_exponent
76
3-6 مجموعه هاي بي قاعده 1- ساختارهاي موازنه اي و لانه اي
1- ساختارهاي موازنه اي و لانه اي 2- رشته هاي تكراري 3- رشته هايي براي مقايسه دو چيز
77
3-7 گرامر با قاعده فرم قوانين گرامر باقاعده a عنصري از الفبا و پايانه
A → a A → λ A → aB a عنصري از الفبا و پايانه B و A غير پايانه
78
مثال چند گرامر با قاعده الف ب پ A Aa G: S aSb/ab ْG: S abSA
G: S bS/cS/aB B aB/cS /bC C aB / bS پ
79
3-8 توليدكننده تحليلگر لغوي Lex -
Lex.yy.c 1- آماده شدن پرونده اي حاوي مشخصه تحليلگر براي Lex مشخصه :Lex.1 كامپايلر Yacc 2- تبديل محتواي پرونده به برنامه در زبان C Lex.yy.c a.out كامپايلر C 3- كامپايل برنامه توليدي همراه كتابخانه برنامه تحليل لغوي خروجي دنباله نشانه ها ورودي a.out 4- خروجي: برنامه تحليلگر
80
ترتيب در متن برنامه مبدا Lex
اعلان ها بخش هاي برنامه مبدا Lex قواعد ترجمه رويه هاي كمكيc اعلان ها %% ترتيب در متن برنامه مبدا Lex قواعد ترجمه %% رويه هاي كمكيc
81
3-8 توليدكننده تحليلگر لغوي
اعلان متغيرها بخش اعلان برنامه اعلان ثوابت صريح تعاريف باقاعده (اجزاي عبارات باقاعده مورد استفاده در قواعد ترجمه)
82
بخش قوانين ترجمه بلافاصله پس از %%
Lexاجزاي برنامه بخش قوانين ترجمه بلافاصله پس از %% P : {عمل معنايي 1 } عمل مناسب عبارت باقاعده P : {عمل معنايي 2 } : {عمل معنايي 3 } . C رويه هاي كمكي مورد استفاده دراجراي اعمال
83
3-9 ماشين خودكار متناهي ابزاري براي تشخيص ساختارهاي موجود زبان در دنباله ورودي از نشانه ها و پذيرفتن يا نپذيرفتن دنباله كاراكترهاي ورودي 1- ماشين خودكار متناهي قطعي DFA انواع ماشين هاي خودكار 2- ماشين خودكار متناهي غير قطعي NFA
84
يك مدل رياضي است متشكل از 5تايي
3-9-1 ماشين خودكار قطعي يك مدل رياضي است متشكل از 5تايي الفباي زبان تابع گذر M= (Q , , , q0, F) زيرمجموعه اي از Q به نام حالات نهايي مجموعه متناهي از حالات ماشين حالت ابتدايي يا شروع ماشين
85
3-9-2 ماشين خودكار غير قطعي
DFA اي كه مي توان از هر حالت با عناصر ورودي يكسان به حالات مختلفي رسيد. q4 a a a q3 q4 q7 q3 a q1 DFA NFA
86
مثال ازDFA تبديل به ماشين قطعي S aS / aA A bA / b اشتقاق محاسبه
Z اشتقاق محاسبه رشته پردازش شده S aS aaA aabA aabb a aa aab aabb [S , aabb] [S , abb] [A,bb] [A , b] [Z, ] پذيرفته توسط ماشين
87
مثال ازNFA زبان: ( a U b)* abb شروع a b b 1 2 3 b
88
3-9-3 تبديل NFA به DFA تعريف : هبستگي لامبدا يا - closure (qi) به صورت بازگشتي : 1- پايه: qi -closure (qi) 2- مرحله بازگشت: اگر qj يك عنصر از closure(qj)- باشد و اگر qk (gj , ) آنگاه qk -closure (qj) است. 3- همبستگي : qj در -closure (qi) است اگر بتواند با تكرار متناهي از مرحله بازگشت بدست آيد.
89
مثال همبستگي لامبدا - - - - - a b a q0 q1 a a b c q2 حالت c
{ q1 , q2, q0 } - - q0 - - {q1} q1 - { q1 , q2} {q1} q2
90
مثال تبديل NFA به DFA NFA DFA e e a b a q1 , q2, q0 q0 a b , c q0 q1 a
a , c b q1 b پذيرش a
91
3-9-4 ساخت NFA از عبارات با قاعده
قاعده اول = اجتماع ماشين M1 1 1 q0 2 ماشين M2 2 L (M2) U L (M1)
92
مثال اجتماع دو عبارت با قاعده
اجتماع دو عبارت a و (aUb ) = b a q0 1 b q0 2 a 1 1 q0 b 2 2
93
3-9-4 ساخت NFA از عبارات با قاعده
قاعده دوم= الحاق ماشين M1 ماشين M2 q0 1 2 الحاق L ( m1 ) , L ( M2) يا L(M1) L (M2)
94
مثال الحاق دو عبارت با قاعده
ab يا a , b الحاق دو عبارت a b q0 q0 b a q0 2
95
3-9-4 ساخت NFA از عبارات با قاعده
قاعده سوم- kelin star ماشين M1 q0 1 1 L (M1) kelin star يا L (M1) *
96
مثال كلين استار يك عبارت باقاعده
a* يا a كلين استار عبارت a q0 1 1 a*
97
مثال تشكيل NFA از عبارات باقاعده
(a U b)*ab زبان a q0 b q0 مرحله 1 b a q0 1 2 ab
98
مثال تشكيل NFA از عبارات باقاعده
مرحله 2 (a U b) q0 b مرحله 3 a (a U b)* q0 b
99
مثال تشكيل NFA از عبارات باقاعده
مرحله 4 (a / b)*ab a b شروع a b پذيرش نهايي
100
مثال يك الگو براي تحليل گر لغوي
الگوي تشخيص ساختار IF با كمك ماشين قطعي رقم يا حرف = Letter any letter F شروع I ( ) 1 2 3 4 5 6 پذيرش نهايي
101
اهداف رفتاري: فصل چهارم: تحليل نحوي تحليل گر نحوی و خطاهای نحوی
دانشجو پس از مطالعه اين فصل با مفاهيم زير آشنا خواهد شد: تحليل گر نحوی و خطاهای نحوی گرامر و گرامر مستقل از متن تجزيه بالا به پايين و پايين به بالا تجزيه پيشگو گرامرهای LL(1)، LR، SLR و LALR
102
4-1 فوايد گرامرها 1- نمايش دقيق و قابل فهمي براي زبان
2- امكان ايجاد پارسرهاي كارآمد با قابليت تشخيص ساختارهاي نحوي درست و دقيق 3- ايجاد ساختاري مناسب براي زبان جهت ترجمه صحيح و آشكارسازي خطا توسط گرامر درست طراحي شده 4- سادگي اضافه نمودن ساختارهاي جديد به زبان
103
رفع خطا براي پردازش ادامه ورودي بر اساس خطاهاي متداول
4-2 تجزيه كننده دريافت رشته اي از نشانه ها از تحليل گر لغوي و بررسي تعلق رشته به زبان توسط گرامر انجام بررسي طبق ساختارهاي نحوي زبان و هر مرحله گزارش خطاهاي نحوي به اداره كننده خطا رفع خطا براي پردازش ادامه ورودي بر اساس خطاهاي متداول
104
4-2-1 تجزيه كننده- ارتباطات
برنامه مبدا تحليل گر لغوي نشانه تجزيه كننده (پارسر) درخت تجزيه باقيمانده جلوبندي كامپايلر كد مياني درخواست نشانه بعدي جدول نماد موقعيت تجزيه كننده در مدل كامپايلر
105
4-3 خطاي نحوي الف سطوح خطا 1- لغوي. مانند ديكته غلط شناسه ، كلمه كليدي يا عملگر 2- نحوي. مانند عبارت محاسباتي با پرانتزهاي نامتعادل 3- معنايي. مانند استفاده از عملگر با عملوندهاي ناسازگار 4- منطقي. مانند فراخواني بازگشتي بي نهايت
106
4-3 خطاي نحوي ب- ويژگي اداره كننده خطاي نحوي
توانايي گزارش حضور خطاها را با وضوح و با دقت پوشش هر خطا با سرعت كافي به جهت امكان آشكارسازي خطاهاي بعدي عدم كاهش بيش از حد سرعت پردازش برنامه هاي صحيح
107
ج- استراتژي هاي پوشش خطاي نحوي
4-3 خطاي نحوي ج- استراتژي هاي پوشش خطاي نحوي -Panic Mode -Phrase level -Error production -Global correction
108
4-3 خطاي نحوي Panic mode - ويژگي روش كار - ساده ترين روش پوشش
- قابل استفاده اكثر روشهاي تجزيه - وارد حلقه بي نهايت نمي شود. روش كار صرف نظر از يك نماد در هر مرحله تا زمان پيداشدن نشانه هماهنگ با زبان
109
4-3 خطاي نحوي Phrase Level -
ويژگي - استفاده از تصحيح موضعي - عدم ورود به حلقه بي نهايت با دقت در انتخاب جايگزيني - ضعف در برخورد با خطاهاي اصلي قبل از نقطه تشخيص قادر به تصحيح هر رشته ورودي روش كار پيشوندي از باقيمانده ورودي را جايگزين رشته اي مي نمايد كه امكان ادامه تجزيه باشد.
110
4-3 خطاي نحوي Error production -
روش كار اضافه نمودن ساختارهاي مولد خطا به زبان از قبل تشخيص آنها در زمان تجزيه در رشته ورودي
111
4-3 خطاي نحوي Global Correction -
روش كار انتخاب الگوريتم هاي تصحيح خطا با قابليت ايجاد كمترين تغييرات در ورودي براي رفع خطا رخ دادن حداقل تعداد درج ها، حذفها در رشته ورودي
112
4-4 گرامر مستقل از متن مجموعه متغيرها يا غير پايانه ها
قوانين : اعضاي مجموعه V * ( V U Σ ) G ( V , Σ , P , S) اجزاي گرامر عنصر شروع گرامر عناصر پايانه ويژگي زبان (اگر و تنها اگر L S ( A u ( A V , u ( U V ) +
113
4-4-1 گرامر مستقل از متن - تعاريف
يك فرم جمله ايست اگر يك w (V U ) رشته وجود داشته باشد w به S اشتقاق از . فرم جمله اي يك جمله است اگر يك w* رشته وجود داشته باشد w به S اشتقاق از جمله نشان مي دهند، مجموعه L(G ) كه با G زبان } است. w* { زبان
114
4- 4گرامر مستقل از متن نمونه اشتقاقهاي يك رشته
S AA A AAA \ bA\ Ab\ a ababaa رشته S AA aA aAAA abAAA abaAA ababAA ababaA ababaa S AA ََََ AAAA aAAA abAAA abaAA ababAA ababaA ababaa S AA Aa AAAa AAbAa AAbaa AbAbaa Ababaa ababaa S AA aA aAAA aAAa abAAa abAbAa ababAa ababaa
115
مثال گرامرهاي مستقل از متن
S aSb \ aSbb S aSdd \A A bAc \ bc S aSa \ aBa B bB \ b S abScB B bB \b S aS aB B bB b
116
4-5 عبارات باقاعده- دلايل استفاده براي نحو زبان
1- عدم نياز به نمايش نوع قوي مانند گرامر براي توصيف قوانين ساده لغوي زبان 2- امكان نمايش مختصرتر و قابل فهم تري براي نشانه ها نسبت به گرامر 3- ايجاد تحليل گرهاي لغوي كاراتر به صورت خودكار 4- راه مناسبي براي پيمانه سازي جلوبندي كامپايلر به دو بخش قابل مديريت با تقسيم ساختار زبان به لغوي و غيرلغوي
117
4-6 تجزيه- نوع بالا به پايين
1- سعي در يافتن سمت چپ ترين اشتقاق براي رشته ورودي دارد. 2- سعي در ساختن درخت تجزيه براي رشته ورودي با شروع از ريشه و ايجاد گره هاي درخت بصورت پيش ترتيب LL (1) 1- گرامرهاي بدون عقبگرد انواع پارسرهاي بالا به پايين 2- گرامرهاي با عقبگرد
118
4-6 تجزيه- نوع بالا به پايين
تجزيه كننده بازگشتي – كاهشي ( پيشگو) تهيه مجموعه اي از پايانه هايي كه در هر قانون براي يك غير پايانه در سمت راست ظاهر مي شوند. بررسي دنباله رشته ورودي بر طبق مجموعه بالا بررسي بالا با مقايسه نماد پيش نگر در ورودي با عناصر مجموعه بالا
119
4-6-1 تجزيه كننده پيشگو – پياده سازي
ايجاد نمودار انتقال 1- حذف بازگشتي چپ در گرامر در صورت وجود 2- ايجاد حال شروع و حالت نهايي براي گرامر AX1, X2,…,Xn 3- رسم يك مسير از حالت شروع به نهايي براي هر قانون به شكل X1,X2,…,Xn 4- دادن برچسب به لبه ها يا يالهاي مسير به صورت
120
مثال تجزيه كننده پيشگو- نمودار انتقال
E TE` E` +TE` \ T FT` T` * FT` \ F (E) \ id T E` مرحله 1 1 2 E: T T E` 3 4 5 6 E`: مرحله 2 F T` 7 8 9 T: مرحله 3
121
مثال تجزيه كننده پيشگو- نمودار انتقال
T F T` 10 11 12 13 T`: مرحله 4 ( E ) 14 15 16 17 مرحله 5 F: id
122
مثال تجزيه پيشگو cad دنباله ورودي S cAd A ab \ a S S S c A d c A d
(الف) (ب) (پ)
123
4-6-2 تجزيه كننده پيشگوي غير بازگشتي
بخشهاي يك تجزيه كننده غير بازگشتي ميانگير ورودي حاوي رشته ورودي براي تجزيه با علامت $ در انتهاي آن پشته دنباله اي از نمادهاي گرامر در هر لحظه براي تجزيه با $ در ته آن جدول تجزيه يك پايانه a يك غير پايانه و A،[A,a] آرايه دو بعدي عناصر دنباله خروجي دنباله تجزيه شده تا آن زمان
124
4-6-2 تجزيه كننده پيشگوي غير بازگشتي
a + b $ ورودي اشاره گر پشته برنامه تجزيه كننده پيشگو خروجي X Y Z $ جدول تجزيه M
125
4-6-2 تجزيه غير بازگشتي پيشگو – عملكرد
باشد توقف تجزيه كننده اعلام خاتمه موفق تجزيه X= a = $ 1- اگر از پشته ، انتقال اشاره گر ورودي به X خروج X= a $ 2- اگر نماد بعدي در ورودي [A , a] يك غير پايانه باشد مراجعه به وارده در جدول X 3-اگر و جايگزيني قانون مناسب آن از جدول
126
مثال تجزيه كننده غير بازگشتي پيشگو
مثال تجزيه كننده غير بازگشتي پيشگو E TM M TM \ T FN N * FN \ F (E) \ id E TE` E` +TE` \ T FT` T` * FT` \ F (E) \ id جدول تجزيه ( ) غير پايانه id + * $ E TE` E E TE` E` E` +TE` E` E` T T FT` T FT` T` T` T` * FT` T` T` F F id F (E)
127
مثال تجزيه كننده غير بازگشتي پيشگو
مثال تجزيه كننده غير بازگشتي پيشگو $E $E`T $E`T`F $E`T`id $E`T` $E` $E`T``F $E`T`F* $ Id + id * id$ +id * id$ Id * id$ *id$ Id$ $ E TE` T FT` F id T` E +TE` T FT` F id T` * FT` F id T` E`
128
4-7 مجموعه Follow و First First هر رشته اي از نمادهاي گرامري باشد، مجموعه پايانه هايي a اگر رشته كه است.first (a) شروع مي شوند ، a رشته هاي مشتق شده ازآنها با Follow بلافاصله بعد از آن هستند. مجموعه اي از پايانهاست كه در هر شبه جملهA براي غير پايانه
129
4-7-1 محاسبه Follow ( A) 1- $ در Follow (S) قرار داده مي شود كه نماد شروع گرامر است و $ نماد انتهاي سمت راست رشته وروديست. 2- اگر قانوني به صورت A EBF وجود دارد آنگاه هرچيزي در First (F) بجز به مجموعه Follow (B) اضافه مي شود. 3- اگر قانونهايي بشكل A EB يا A EBF كه First (F) حاوي باشد ( ) هر چيزي در مجموعه Follow(A) به Follow (B) اضافه مي شود.
130
4-7-1 محاسبه First ( A) 1- اگر X پايانه باشد، First (X) برابرست با {X}
3- اگر X غيرپايانه و X Y1Y2…Yn قانون گرامر، براي هر a ,i در مجموعه First(Yi) باشد و در تمام مجموعه هاي First ( Y1)…First (Yn) قرار داشته باشد، a به مجموعه First (X) اضافه مي شود.
131
مثال مجموعه هاي Follow و First
E TM M TM \ T FN N * FN \ F (E) \ id E TE` E` +TE` \ T FT` T` * FT` \ F (E) \ id First (E) = First (T) = First (F) = { ( , id } First (E`) = { + , } First (T`) = { * , } Follow (E) = Follow (E`) = { ) , $ } Follow (T) = Follow (T`) = { + , ) , $ } Follow (F) = { + , * , ) ,$ }
132
4-8 ايجاد جدول تجزيه 1- براي هر قانون از گرامر بصورت A a مراحل 2 و 3 تكرار شود. 2- براي هر پايانه a در مجموعه First (E)، A E به M[A , a] اضافه شود. 3- اگر در First (E) باشد، A a براي هر پايانهb در Follow (A) به M[A , b] اضافه شود. اگر در First (E) و $ در Follow ( A) باشد، A a به M [ A , $] اضافه شود.
133
مثال جدول تجزيه First (TE`) = First (T) = { ( , id} E TE`
T FT` T` * FT` \ F (E) \ id First (TE`) = First (T) = { ( , id} ( ) غير پايانه id + * $ E TE` E E TE`
134
4-9 شناسايي گرامر LL(1) 1- گرامري كه ابهام يا بازگشتي چپ ندارد.
2- اگرA E \ F دو قانون از Gباشند براي هيچ پايانه اي مانند a، هر دوي Eو F رشته هاي شروع شونده با a توليد نمي كنند. 3- حداكثر يكي از E و Fمي توانند رشته تهي توليد كنند. 4- اگر F ، E رشته اي شروع شونده با پايانه هاي مجموعه Follow ( A) توليد نمي كند.
135
مثال گرامر LL (1) گرامر LL (1) است زيرا :
E TE` E` +TE` \ T FT` T` * FT` \ F (E) \ id گرامر LL (1) است زيرا : First ( +TE`) = { + }, First ( ) , { } ( + ) = First ( E` ) = { + , } , follow ( E` ) = { $ , ) } , { + , } { $ , ) } = First ( *FT) = { * } , First ( ) = { } , { * } { } = First ( T`) = { , * } , Follow ( T`) = { $ , ) , + } , { , * } { $ , ) + } = First ((E)) { ( } , First ( id ) = { id } , { ( } { id } =
136
مثال گرامر LL (1) گرامر LL (1) نيست. جدول تجزيه S iEtSF 1 S a 2
F eS F S E b جدول تجزيه i t a e b $ S 1 2 F 3 , 4 4 E 5 گرامر LL (1) نيست.
137
4-10 پوشش خطا در تجزيه پيشگو
نوع خطا 1- عدم تطابق پايانه موجود در بالاي پشته با نماد ورودي بعدي 2- خالي بودن وارده جدول براي غير پايانهA در بالاي پشته و پايانه a بعنوان نماد ورودي بعدي روش پوشش خطا كنار گذاردن نمادهاي ورودي بعدي تا زمان ظاهر شدن شناسه اي متعلق به مجموعه اي از شناسه هاي هماهنگ كننده
138
4-10-1 انتخاب مجموعه هماهنگ كننده
گذاردن تمام نمادهاي Follow (A) در مجموعه هماهنگ كننده غير مجموعه پايانه و بررسي ورودي تا زمان ظاهر شدن يك عضو از آن 1 گذاردن مجموعه نمادهاي شروع كننده ساختارهاي سطح بالاتر زبان به همراه مجموعه هماهنگ كننده ساختارهاي سطوح پايين تر زبان مانند كلمات كليدي به اضافه مجموعه Follow ها 2 3 گذاردن مجموعه First (A) به مجموعه هماهنگ كننده غير پايانه A قانونهاي توليد كننده غير پايانه تهي براي غير پايانه هاي قادر به اشتقاق تهي 4
139
مثال بروز خطا در تجزيه پيشگو
1- در صورت خالي بودن وارده جدول ، نماد ورودي حذف 2- در صورت وروديsynch ( از مجموعه نشانه هاي هماهنگ كننده Follow ) خروج غير پايانه بالاي پشته براي امكان ادامه تجزيه 3- در صورت عدم تطابق نشانه بالاي پشته با نماد ورودي ، خروج نشانه از پشته
140
مثال بروز خطا در تجزيه پيشگو
E TE` E` +TE` \ T FT` T` * FT` \ F (E) \ id )id + * id رشته ورودي داراي خطاي مرحله 1 ( ) غير پايانه id + * $ E TE` E E TE` E` E` +TE` E` E` T T FT` T FT` T` T` T` * FT` T` T` F F id F (E)
141
مثال بروز خطا در تجزيه پيشگو
مرحله 2 ( ) غير پايانه id + * $ E TE` synch synch E E TE` E` E` +TE` E` E` T T FT` synch T FT` synch synch T` T` T` * FT` T` T` F F id F (E) synch synch synch synch
142
مثال بروز خطا در تجزيه پيشگو
مرحله 3 $E $E`T` $E`T`F $E`T`id $E`T`F* $E` $E`T+ $E`T $ )Id *+ id$ Id *+ id$ *+ id$ + id$ id$ Id$ $ error , skip ) id is in First ( E) Error M [F, + ] = synch F has been poped
143
4-11 تجزيه بالا به پايين – انتقال كاهش
سعي در ايجاد درخت تجزيه با شروع از برگها و رفتن به سمت ريشه = كاهش جايگزيني يك زيررشته خاص منطبق با سمت راست يك قانون با نماد سمت چپ همان قانون
144
مثال تجزيه بالا به پايين – انتقال كاهش
abbcde دنباله ورودي S aABe A Abc \ b B d abbcdeانتقال aAbcde كاهش aAdeانتقال aABeكاهش S S aABe aAde aAbcde abbcdeاشتقاق
145
4-11-1 تجزيه انتقال كاهش - دستگيره
تجزيه انتقال كاهش - دستگيره زير رشته اي منطبق بر سمت راست يك قانون و ايجاد كننده يك كاهش به غير پايانه سمت چپ آن قانون ويژگي دستگيره زير رشته اي كه با عمل كاهش با توانايي هدايت تجزيه كننده به عنصر شروع گرامر
146
مثال دستگيره abbcde دنباله ورودي abbcdeانتقال aAbcde كاهش aAdeانتقال
aABeكاهش S S aABe A Abc \ b B d A b َA Abc B d دستگيره ها
147
مثال دستگيره گرامر سمت راست ترين اشتقاق E + E * E E + E * id3
E + id2 * id3 id1 + id2 * id3 مرحله 1
148
مثال دستگيره دستگيره ها جمله دستگيره id1 + id2 * id3 E + id2 * id3
E + E * id3 E + E * E id1 id2 id3 E * E دستگيره ها
149
4-11-1-1 دستگيره- هرس نمودن توانايي توليد معكوس سمت راست ترين اشتقاق
مزيت هرس نمودن توانايي توليد معكوس سمت راست ترين اشتقاق مراحل هرس نمودن 1- اگر W جمله گرامر براي تجزيه باشد، آنگاه W = Yn شبه جمله راست n ام از سمت راست ترين اشتقاق نامشخص . 2- يافتن دستگيره Bn-1 درYn-1و كاهش آن تا بدست آمدن شبه جمله راست Yn-2. 3- توقف عمليات در صورت رسيدن به عنصر شروع گرامر S
150
مثال هرس نمودن دستگيره شبه جمله راست دستگيره قانون كاهشي (1) E E + E
(4) E id id1 + id2 * id3 شبه جمله راست دستگيره قانون كاهشي E id E E * E E E + E id1 + id2 * id3 E + id2 * id3 E + E * id3 E + E * E E + E E id1 id2 id3 E * E E + E
151
4-11-2 مشكلات هرس نمودن دستگيره
1- تعيين زير رشته مناسب براي كاهش در يك شبه جمله راست 2- انتخاب قانون مناسب در موارد وجود دو يا بيشتر قانون با زير رشته يكسان در سمت راست
152
4-12 تجزيه انتقال كاهش با پشته
استفاده از پشته به منظور نگهداري نمادهاي گرامر استفاده از ميانگير ورودي جهت نگهداري رشته مورد نظر براي تجزيه 1- انتقال صفر يا چند نماد به پشته توسط تجزيه كننده روند تجزيه 2- ادامه مرحله 1 تا زمان پيدا شدن يك دستگيره در بالاي پشته 3- كاهش دستگيره پيدا شده به سمت چپ قانون گرامري مناسب آن
153
4-12-1 عمليات انتقال كاهش با پشته
انتقال نماد بعدي ورودي به بالاي پشته وجود انتهاي سمت راست دستگيره در بالاي پشته و يافتن سمت چپ آن و تصميم گيري براي جايگزيني كاهش پذيرش اعلام تكميل موفقيت آميز عمل تجزيه خطا تشخيص خطاي نحوي و فراخواني رويه پوشش خطا
154
مثال تجزيه انتقال كاهش با پشته
(1) E E + E (2) E E * E (3) E ( E ) (4) E id گرامر E E + E E + E * E E + E * id3 E + id2 * id3 id1 + id2 * id3 رشته id1 + id2 * id3
155
مثال تجزيه انتقال كاهش با پشته
ورودي عمل پشته $ $id1 $E $E + $E + id2 $E + E $E + E * $E + E * id3 $ E + E * E $ E + E id1 + id2 * id3 $ + id2 * id3 $ id2 * id3 $ * id3 $ id3 4 $ Shift Reduce by E id Reduce by E E * E Reduce E E + E accept
156
4- 13 تجزيه انتقال كاهش – پيشوند قابل وقوع
مجموعه پيشوندهاي شبه جملات راست ظاهر شونده در پشته يك تجزيه كننده انتقال كاهش يا پيشوندي از يك شبه جمله راست عبور نكننده از انتهاي راست سمت راست ترين دستگيره آن شبه جمله
157
4-14 تجزيه انتقال كاهش- تناقض ها
تناقض انتقال - كاهش ترديد در عمل انتقال يا عمل كاهش در زمان تصميم گيري براي تجزيه كننده تناقض كاهش كاهش وجود چند قانون براي كاهش يك رشته در يك زمان
158
4-14 تجزيه كننده عملگر اولويت
گرامر نوع عملگر نداشته باشد. قوانين 2- در سمت راست قوانين توليد، هيچ كدام از دو پايانه كنار هم نباشند.
159
مثال عملگر اولويت – گرامر عملگر
E EAE \ ( E ) \ - E \ id A + \ - \ / \ وجود دو غير پايانه در سمت راست قانون گرامر عملگر نيست
160
4-14-1 نقطه ضعفهاي روش عملگر اولويت
دشوار بودن اداره نمودن نشانه هايي مانند علامت منها با دو اولويت متفاوت ( دوديي يا يگاني) عدم اطمينان از نتيجه درست تجزيه به دليل رابطه نزديك بين گرامر زبان در حال تجزيه و تجزيه كننده عملگر اولويت قابليت تجزيه بر روي تنها رده كوچكي از گرامرها
161
4-14-2 عملگر اولويت – تعيين اولويتها
تعريف 3 رابطه اولويت مجزاي بين هر زوج از پايانه ها مفهوم رابطه a <. b اولويت a كمتر از b است. اولويت a و b يكسان است. a = b اولويت a بيش از b است. a . > b
162
4-14-2 عملگر اولويت روشهاي تعيين اولويت
1- استفاده از شركت پذيري و اولويت موجود بين خود عملگرها در زبان مانند اولويت هاي زير * .> , + < . * 2- ايجاد گرامر غير مبهمي براي زبان و درخت تجزيه آن با قابليت انعكاس شركت پذيري و اولويت صحيح بين عناصر پايانه در درخت
163
مثال عملگر اولويت – تعيين اولويتها
E TE` E` +TE` \ T FT` T` * FT` \ F (E) \ id + * ( ) id $ .> <. = Id
164
استفاده از اولويت ها 1- قرار دادن روابط اولويت بين پايانه ها در رشته ورودي به تجزيه 2- قرار دادن علامت $ ابتدا و انتهاي رشته ورودي به همراه اولويت آن نسبت به اولين پايانه و آخرين پايانه رشته 3- حذف غير پايانه ها از جمله ورودي 4- پويش از انتهاي چپ رشته تا رسيدن به اولين اولويت >.
165
استفاده از اولويت ها 5- پويش به عقب ( چپ ) از همان نقطه با پشت سرگذاردن هر = تا رسيدن به <. . > 6- تعيين دستگيره شامل هر چيزي در سمت چپ اولين راست 5. در مرحله < و سمت
166
مثال استفاده از اولويت ها
رشته ورودي به تجزيه id + id * id $ <. Id .> + <. Id .> * <. id .> $. زمان ديدن اولين >. از سمت چپ بين اولين id و + مرحله 1: پويش به عقب ردشدن از روي = در صورت وجود برخورد با < اولين . مرحله 2:
167
مثال استفاده از اولويت ها
دستگيره بين اولين >. و .< يعني اولين id سمت چپ و تبديل آن به E مرحله 3: تشخيص ساير دستگيره هاي مشابه { id2 , id3 } و باقيمانده دنباله ورودي به شكل $ <. + < . * .> $ مرحله 4: دستگيره بعدي بين + و * و انتهاي راست آن بين * و $ يعنيE * E و تبديل به E مرحله 5: دستگيره بعدي بين + و $ يعني E + E و تبديل به E و پايان تجزيه انتقال كاهش – عملگر اولويت مرحله6:
168
4-14-4 عملگر اولويت – اولويتهاي بديهي
1- اگر عملگر A اولويت بيشتر از عملگر B داشته باشد، روابط A . > B و B <. A بين آنها برقرار است. 2- اگر A و B عملگرهاي با اولويت يكسان باشند، اگر هر دو شركت پذير از راست هستند: B <. A , A <. B و پركت پذير از چپ : B .> A , A .> B
169
4-14-4 عملگر اولويت – اولويتهاي بديهي
3- براي تمام عملگرهاي مانند A روابط زير برقرار است. $ <. A A .> $ A .> ) ) .> A ( <. A A <. ( id .> A A <. id 4- روابط زير هميشه برقرارند: ( = ) ( <. ( ( <. id $ <. ( id .> $ id .> ) $ <. id ) .> $ ) .> ) . .
170
مثال عملگر اولويت- جدول اولويت
( توان ) بالاترين اولويت و شركت پذير از 1 - راست فرضيات 2- * و / بالاترين اولويت بعدي و شركت پذير از چپ 3- + و – پايين ترين اولويت و شركت پذير از چپ
171
مثال عملگر اولويت - جدول اولويت
+ - * / id ( ) $ .> <. Id = جدول اولويت ها
172
4-14-5 عملگر اولويت - توابع اولويت
دو تابعf و g براي كدگذاري جدول اولويت براي پارسر 1- f( a ) <. g ( b ) هر گاه a <. b 2- f( a ) = g ( b ) هر گاه a = b 3- f( a ) .> g ( b ) هر گاه a .> b
173
مثال عملگر اولويت - توابع اولويت
+ - * / ( ) id $ f 2 4 6 g 1 3 5 جدول اولويت * < . Id f ( * ) < g( id ) id .> id f ( id ) > g ( id )
174
مثال عملگر اولويت - گراف روابط اولويت
+ * Id $ f 2 4 g 1 3 5 g (id) f (id) f (*) g (*) g (+) f (+) f ($) g ($)
175
4-14-5 تجزيه عملگر اولويت- پوشش خطا
1- عدم وجود رابطه بين عنصر بالاي پشته و عنصر ورودي انواع خطا 2- عدم تطابق مجموعه عناصر پيمايش شده در پشته و آماده كاهش با هيچ كدام از قوانين گرامر در حالت اول: قرار گرفتن اشاره گرهايي به توابع رفع خطا و فراخواني آنها هنگام وقوع خطا پوشش خطا
176
4- 15 تجزيه كننده هاي LR دلايل پر طرفداربودن تجزيه كننده هاي LR
1- قابليت تشخيص ساختارهاي زبانهاي مستقل از متن 2- عمومي ترين روش تجزيه انتقال كاهش غير بازگشتي 3- توانايي تجزيه رده گرامرهاي قابل تجزيه پيش گو 4- سريعترين تشخيص خطاي نحوي با پويش چپ به راست
177
تجزيه LR- نقاط ضعف 1-كار زياد در ساخت آن براي گرامر زبان بشكل دستي 2- نيازمند ابزار مولد تجزيه كننده LR براي ايجاد
178
4-15-2 تجزيه LR- انواع ساده ترين كمترين توانايي قدرتمند ترين گرانترين
LR ساده ياSLR LR متعارف يا CLR قدرتمند ترين گرانترين جدول تجزيه متفاوت قدرت متوسط هزينه متوسط كار كم براي ايجاد و قابليت تجزيه اكثر گرامرها LR پيش نگر يا LALR
179
4-15-3 تجزيه - LR اجزاء a1 … ai b an a . S $ برنامه تجزيه Action goto
خروجي برنامه تجزيه Action goto
180
تصميم گيري الگوريتم در هر لحظه
تصميم گيري تجزيه LR نشانه ورودي a تصميم گيري الگوريتم در هر لحظه عنصر بالاي پشته(S) رشته اي به شكل s0X1s1X2s2….Xmsmكه sm در بالاي پشته قرار دارد. عنصر پشته يك نماد گرامر يك حالت تجزيه
181
تجزيه LR – جدول تجزيه تابع انتقالي goto ( دريافت يك حالت و نماد و توليد حالت جديد) اجزاي جدول تجزيه تابع عملكرد action action [sm , ai] action goto a1 a2 … ai m جدول تجزيه
182
مقادير مختلف موجود جدول برايaction [ sm ,ai]
تجزيه LR – جدول تجزيه مقادير مختلف موجود جدول برايaction [ sm ,ai] error accept rn=reduce sn = shift پايان موفق تجزيه انجام عمل كاهش با دستور n ام پشته a روي پشته قرار داده و بعد n روي پشته مي رود خطاي نحوي
183
تجزيه LR – روال تجزيه 1- قرار دادن رشته ورودي w به همراه علامت $ در انتهاي آن در ميانگير ورودي 2- گذاردن s0 در پشته به عنوان اوليه حالت 3- خواندن وارده جدول تجزيه براي [s0 , $] 4- اجراي عمل در نظر گرفته شده در جدول [ shift , reduce, accept , error]
184
4-15-6 تجزيه LR – روال تجزيه 5- اگر پپكربندي پشته در يك لحظه بصورت:
S0 X1 s1 X2 s2….Xm sm , ai ai+1 …. an $ 6- با خواندن a نماد ورودي جاري و s حالت بالاي پشته مراجعه به جدول و انجام يك مورد : Shift , reduce 7- تبديل رشته روي پشته پس ازs Shift بصورت : S0 X1 s1 X2 s2…Xm sm ai s, ai+1…an $
185
تجزيه LR – روال تجزيه 8- تبديل رشته روي پشته پس از A reduce بصورت: S0 X1 s1 X2 s2… Xm-r sm-r A s , ai ai+1… an $ 9- اعلام پايان موفق تجزيه با ديدنaccept در جدول 10- فراخواني رويه پوشش خطا با ديدنerror
186
مثال تجزيه LR 1 E E + T 2 E T 3 T T * F 4 T F 5 F (E)
6 F id action goto id + * ( ) $ E T F 1 2 3 4 5 6 7 8 9 10 11 s5 s4 1 2 3 s6 acc r2 s7 r2 r2 r4 r4 r4 r4 s5 s4 8 2 3 r6 r6 r6 r6 s5 s4 9 3 s5 s4 10 s6 s11 r1 s7 r1 r1 r3 r3 r3 r3 r5 r5 r5 r5
187
مثال تجزيه LR پشته ورودي عمل جدول تجزيهid * id + id 0 id 5 0 F 3 0 T 2
0 id 5 0 F 3 0 T 2 0 T 2 * 7 0 T 2 * 7 id 5 0 T 2 * 7 F 10 0 E 1 0 E 1 + 6 0 E id 5 0 E F 3 0 E T 9 id * id + id $ *id + id $ + id $ id $ $ s5 r5 r3 s7 r2 r1 s6 r9 acc
188
4-15-7 تفاوت گرامر LL و LR گرامر LL(K) گرامر LR(K)
توانايي تشخيص وقوع سمت راست يك رشته با ديدن تمام آنچه كه از آن سمت راست مشتق شده ، با استفاده از K نماد پيش نگر گرامر LR(K) توانايي تشخيص وقوع سمت راست تنها با ديدن اولينK نماد از آنچه توسط سمت راست آن مشتق شده
189
يك قلم براي LR قانوني از گرامر با يك نقطه در
4-16 تجزيه SLR يك قلم براي LR قانوني از گرامر با يك نقطه در مكاني در سمت راست آن تعريف يك قلم مثال اقلام مختلف قانون A XYZ A . XYZ A X .YZ A XY .Z A XYZ.
190
4-16 تجزيه SLR تقسيم بندي اقلام
اقلام هسته شامل قلم اوليهS` S و تمام اقلامي كه نقطه آنها در انتهاي چپ نيست. اقلام غير هسته اقلامي كه نقطه در انتهاي چپ است.
191
4-16-1 تجزيه SLR-ايجاد قلم مرحله1: تعيين يك نقطه شروع براي گرامر
S AaAb S BbBa A B مرحله1: تعيين يك نقطه شروع براي گرامر S` S S AaAb S BbBa A B S` . S S .AaAb S .BbBa A . B . مرحله2: گذاردن نقطه در اولين مكان سمت راست قانونها
192
تجزيه SLR-ايجاد قلم مرحله3: گذاردن نقطه در مكانهاي بعدي در سمت راست قانونها S` S . S A .aAb S B .bBa S Aa .Ab S Bb .Ba A . B . S AaA .b S BbB .a S AaAb . S BbBa .
193
4-16-2 تجزيه SLR- گروه اقلام
گروه اقلام LR(0) يا گروه LR(0) متعارف فراهم كننده مبناي ساخت تجزيه كننده هاي SLR ساخت به وسيله دو تابعclosure و goto به همراه گرامر افزوده
194
4-16-2 تجزيه SLR- گروه اقلام
1- اضافه شدن هر قلم موجود در مجموعه اقلامI به مجموعهclosure تابع closure 2- اضافه شدن قلم B .K درصورت وجودA M .BN درclosure و وجود قانون B K در گرامر
195
مثال تجزيه SLR- گروه اقلام
يك گروه قلم داده شده I ={ [E` .E] } E` E E E + T \ T T T * F \ T F (E) \ id E` .E E .E + T E .T T .T * F T .F F .(E) F id Closure (I) =
196
4-16-2 تجزيه SLR- اقلام معتبر
يك قلم به صورتA B1.B2 براي پيشوند قابل وقوع MB1 معتبر است اگر: اشتقاقي به صورتS` M A W M B1B2 W وجود داشته باشد. * *
197
مثال تجزيه SLR- اقلام معتبر
E` E E E + T \ T T T * F \ T F (E) \ id E + T * 1 يك پيشوند قابل وقوع 4 كه پس از خواندن آن رفتن به حالت I7 T T * .F F .(E) F .id 2 3 I7: اقلام معتبر براي
198
4-16-2 تجزيه SLR- گروه اقلام
مجموعه closure بر روي مجموعه [A Q X K] با شرط وجود A [ Q . X K] در I . تابع goto(I , X ) يا مجموعه اي از اقلام معتبر براي پيشوند قابل وقوع R X با وجود مجموعه اقلام معتبر براي R در I . مجموعه اقلام نماد گرامر
199
مثال تجزيه SLR- گروه اقلام
گروه قلم داده شدهI ={ [E` E.] , [ E` E. + T] } E` E E E + T \ T T T * F \ T F (E) \ id E E + . T T .T * F T .F F .(E) F .id goto (I , +) =
200
4-16-2 تجزيه SLR- ايجادگروه اقلامLR(0)
1- گذاردن closure { [ S` .S ]} در مجموعه گروه C 2- براي هر مجموعه اقلام I در C و هر نماد مانندX انجام بده: 2- 1- اگر goto ( I , X) تهي نيست و درC نيست انجام بده: goto ( I , X) را به C اضافه كن. عقبگرد، تا زماني كه هيچ مجموعه باي اضافه شدن نمانده
201
مثال تجزيه SLR- ايجادگروه اقلام
E` .E E .E + T E .T T .T * F T .F F .(E) F .id E T. T T. * F I2: E` E E E + T \ T T T * F \ T F (E) \ id I0: I3: T F. F (.E) E .E + T E .T T .T * F T .F F .(E) F .id I5: F id. I4: E` E. E E. + T I1:
202
مثال تجزيه SLR- ايجادگروه اقلام
E E + .T T .T * F T .F F .(E) F .id E` E E E + T \ T T T * F \ T F (E) \ id F (E.) E E. + T I6: I8: E E + T. T T. * F I9: I11: F (E). T T * .F F .(E) F .id I7: I10: T T * F.
203
مثال تجزيه SLR- ايجادگروه اقلام
S` S S L=R \ R L * R \ id R L I3: S R. I7: L *R. R L. I4: L *.R I8: I0: S` .S S L=R. I9: I5: L id. I1: S` S. I2: R L.=R R L. I6: S L=.R
204
4-16-2 تجزيه SLR- ايجاد جدول تجزيه
1- ايجاد گروه مجموعه هاي اقلام براي گرامر افزوده G` ( با يك نقطه شروع مانند S` ) بصورت C = { I0 , I1 ,…In } 2- ساختن حالت i از Ii ( مانند I2)، تعيين action هاي تجزيه براي حالتi بصورت زير: الف- action [i , a] = shift j در صورت وجود [A Q .aK] در Ii وgoto (Ii , a )=Ij ب- قرار گرفتن action [i , a] = reduce A Q براي تمام پايانه هاي a در Follow (A =S`) صورت وجود [A Q.] در Ii پ- قرار گرفتن action [i , $] =accept صورت وجود [S` S.] در Ii
205
4-16-2 تجزيه SLR- ايجاد جدول تجزيه
3 - ايجاد تغيير حالتهايgoto براي حالتi و براي تمام غير پايانه هاي A با استفاده از قانون : اگر=Ij ) goto ( Ii , Aآنگاه goto ( I , A ) = j 4– گذاردنerror براي تمام ورودي هاي تعريف نشده با قوانين 2 و 3 الگوريتم 5 - ايجاد حالت اوليه تجزيه كننده با استفاده از مجموعه اقلام حاوي [S` .S]
206
مثال تجزيه SLR- ايجاد جدول تجزيه
E` .E E .E + T E .T T .T * F T .F F .(E) F .id E` E E E + T \ T T T * F \ T F (E) \ id مرحله 1 no action I0: action [ 0 , ( ] = shift 4 action [ 0 , id] = shift 5 E` E. E E. + T action [ 1, $ ] = accept مرحله 2 I1: action [ 1 , + ] = shift 6
207
مثال تجزيه SLR- ايجاد جدول تجزيه
Follow (E) = { $ , +, ) } مرحله 3 action [ 2 , $ ] = action [ 2 , + ]=action [ 2 , ) ] = reduce E T E T. T T. * F I2: action [ 2 , * ] = shift 7 . ادامه مراحل مطابق نمونه ها.
208
4-17 تجزيه CLR- تعريف قلم [A Q.K , a]
عملكرد اعلام كاهش با Q در زمان مشاهده a به عنوان نماد ورودي بعدي
209
4-17 تجزيه CLR-پيشوند قابل وقوع
شرايط قلم معتبر [A Q.K , a] براي يك پيشوند قابل وقوع y * * 1- وجود اشتقاق S &AW &QKW كه: y = &Q و يا a اولين نماد W يا W برابر تهي و a برابر $
210
4-17 تجزيه CLR- ايجاد مجموعه اقلامLR(1)
محاسبه closure 1- براي هر قلم مثل [A Q.BK , a] در مجموعه I انجام بده : براي قانونهاي مانندB y در گرامر و هر پايانه مانندb درFirst (K) : اگر قلم [B .y , b] در I نيست آنرا اضافه كن برگشت به مرحله 1 اگر قلمي باقيمانده
211
4-17 تجزيه CLR- ايجاد مجموعه اقلام
محاسبه goto J را مساوي مجموعه قلمهاي [A QX.K , a] كه در I موجودند، در نظر بگير closure ( J) را برگردان.
212
4-17 تجزيه CLR- ايجاد مجموعه اقلام
محاسبه item (G`) C= { closure ( { S` .S , $ }) } قرار ده و تكرار كن : براي هر مجموعه از اقلام I در C و هر نماد گرامر مانندX : اگر goto ( I , X) تهي نبوده و در C نيست انجام بده: goto ( I , X) را به C اضافه كن. برگشت اگر قلمي باقيمانده
213
مثال تجزيه CLR- ايجاد مجموعه اقلام
S` S S CC C cC \d S C.C , $ C .cC , $ C .d , $ I2 S` .S , $ S .CC , $ C .cC , c \ d C .d , c \ d I4 C d. , c \ d I0 I5 S CC. , $ C c.C , c \ d C .cC , c \ d C .d , c \ d I3 I1 S` S. , $
214
مثال تجزيه CLR- ايجاد مجموعه اقلام
C c.C , $ C .cC , $ C .d , $ I6 I9 C cC. , $ I7 C d. , $ خاتمه كار بدليل نتيجه ندادن ساير اقلام. I8 C cC. , c \ d
215
مثال تجزيه CLR- ايجاد مجموعه اقلام
S I0 I1 گراف goto براي مثال C C I2 I5 c c C I6 I9 d d I7 c c C I3 I8 d d I4
216
4-17 تجزيه CLR- ساخت جدول تجزيه
1- ساخت گروه مجموعه هاي اقلام به صورت C = { I0 , I1 , …, In} براي G` 2- ايجاد حالت i از تجزيه كننده با استفاده ازI و مقداردهي بخش action بصورت زير: الف- action [ I , a ] = shift j در صورت وجود [ A Q.aK , b] در Ii وgoto(Ii , a) = Ij ب- reduce A a action [ I , a ] =درصورت وجود [A Q. , a] در Ii و A = S`
217
4-17 تجزيه CLR- ساخت جدول تجزيه
پ- action [ i , $]= accept در صورت وجود [S` S. , $] درIi 3- goto ( i , a) = j اگر goto ( Ii , A ) = Ij 4- قرار گرفتنerror براي تمام ورودي هاي تعريف نشده با قوانين 2 و3 الگوريتم قرار دادن حالت اوليه تجزيه كننده مساوي حالت بدست آمده از مجموعه حاوي [S` .S , $]
218
مثال تجزيه CLR- ساخت جدول تجزيه
action goto 1 S` S 2 S CC 3 C cC \d c d $ S C 1 2 3 4 5 6 7 8 9 s3 s4 1 2 acc s6 s7 5 s3 s4 8 r3 r3 r1 s6 s7 9 r3 r2 r2 r2
219
4-18 تجزيه LALR- ساخت جدول تجزيه
1- ايجاد گروه مجموعه هاي اقلام بصورت C= { I0 , I1 , … In} 2- پيدا كردن تمام مجموعه هايي با قلم هسته يكسان در بين قلمهاي موجود 3- ايجاد مجموعه نتايج اقلام موجود بصورت C= { J0 , J1 , …Jn} و محاسبه action الف- action [ I , a ] = shift j در صورت وجود [ A Q.aK , b] در Ii وgoto(Ii , a) = Ij
220
4-18 تجزيه LALR- ساخت جدول تجزيه
ب- reduce A a action [ I , a ] =درصورت وجود [A Q. , a] در Ii و A = S` پ- action [ i , $]= accept در صورت وجود [S` S. , $] درIi 4- ساخت جداول goto بصورت زير: الف اگرJ اجتماع يك يا چند مجموعه اقلام ( I0 I1…Ik ) باشد، آنگاه قلمهاي هسته goto ( I1,X), goto (I2,X),…goto (Ik,X) مشابه هستند.
221
4-18 تجزيه LALR- ساخت جدول تجزيه
ب اگر K اجتماع تمام مجموعه اقلام ( I0 I1…Ik ) باشد كه دراي قلمهاي هسته مانند goto(I1, X) هستند، goto (J,X)=X
222
مثال تجزيه LALR- ساخت جدول تجزيه
1 S` S 2 S CC 3 C cC \d ادغام مجموعه هاي اقلام و جايگزين شدن با اجتماعشان I3 , I6 I4 , I7 I8 , I9 C c.C , c \ d \ $ C .cC, c \ d \ $ C .d , c \ d \ $ C d. , c\ d \ $ C cC. , c \ d \ $
223
مثال تجزيه LALR- ساخت جدول تجزيه
action goto c d $ S C 1 2 36 47 5 89 s36 s47 1 2 acc 5 s36 s47 s36 s47 89 r3 r3 r3 r1 r2 r2 r2
224
مثال پوشش خطا در تجزيه LR و LALR
0 c 3 c 3 d 4 ورودي داراي خطاي ccd$ action goto [ 4, $ ]= e پشته آشكارسازي خطا تشخيص خطا در يك مرحله
225
مثال پوشش خطا در تجزيه LR و LALR
0 c 36 c 36 d 47 ورودي داراي خطاي ccd$ action goto [47,$]= r3 C d [89,$]=r2 C cC. پشته 0 c 36 c 36 C 89 0 c 36 C 89 0 C 2 …. آشكارسازي خطا تشخيص خطا پس از چند كاهش
226
4-18 تجزيه LALR- ساخت جدول تجزيه بهينه
چند اصلاح در الگوريتم ساخت جدول تجزيه 1- نشان دادن مجموعه اي از اقلام I با هسته آن 2- بدست آوردن بخش تابع action تنها بوسيله هسته 3- نحوه محاسبه تغيير حالتهاي goto با استفاده از هسته
227
4-18 تجزيه LALR- تعيين پيش نگرها
1- براي هر قلم مانند B y.V در مجموعه هسته يا K انجام بده: J` := closure ({[B y.v , #]})2- 3- اگر [A M.XN , a] درJ` نبوده و a = # 4- توليد نماد پيش نگرa براي قلم A MX.N در goto ( I , X)
228
4-18 تجزيه LALR- تعيين پيش نگرها
5 -اگر [A M.XN , #] در مجموعه J` نيست، پيش نگرها ازB y.v در مجموعه I به A MX.N در goto ( I , X) انتشار مي يابند.
229
4-18 LALR- محاسبه هسته هاي گروه اقلام
1- ساختن هسته اقلامLR بخش تجزيه LR) 2-اجراي الگوريتم تعيين پيش نگر بر روي هسته هر مجموعه از اقلامLR و نماد گرامرX 3- تشكيل و مقداردهي جدول معين كننده پيش نگرها كه براي هر قلم هسته در هر مجموعه اقلام 4- تكرار چند گذر بر روي هر مجموعه اقلام
230
4-18 LALR- محاسبه هسته هاي گروه اقلام
5- مراجعه به آن دسته اقلام هسته كه i پيش نگرهاي خود را منتشر مي سازد، هنگام مشاهده هر قلم. 6- استفاده از اطلاعات ثبت شده توسط مرحله 2 و اضافه نمودن مجموعه جاري پيش نگرها براي i به پيش نگرهايي مرحله قبل 7- تكرار مرحله 4-6
231
مثال LALR- محاسبه هسته هاي گروه اقلام
S` S S L=R \ R L * R \ id R L I3: S R. I7: L *R. I4: L *.R R L. I8: I0: S` .S I5: L id. I1: S` S. I9: S L=R. I2: R L.=R R L. I6: S L=.R
232
مثال LALR- محاسبه هسته هاي گروه اقلام
مرحله 2 : اجراي الگوريتم محاسبه پيش نگرها S .S , # S .L=R , # S .R , # L .*R , # \ = L .id , # \ = R .L , # Closure ( {[S` .S , #]})
233
مثال LALR- محاسبه هسته هاي گروه اقلام
مرحله 3 : انتشار پيش نگرها در بين اقلام هسته از به I0: S` .S I1: S` S. I2: R L.=R R L. I3: S R. I4: L *.R I5: L id. I2: R L.=R I6: S L=.R
234
مثال LALR- محاسبه هسته هاي گروه اقلام
از به I4: L *.R I4: L *.R I5: L id. I7: L *R. R L. I8: I4: L *.R I6: S L=.R I5: L id. I8: R L. I9: S L=R.
235
مثال LALR- محاسبه هسته هاي گروه اقلام
مرحله 4 : مقداردهي جدول پيش نگرها و انجام گذرها پيش نگرها قلم مجموعه INIT PASS1 PASS2 PASS3 S` .S $ $ $ $ I0: S` S. $ $ $ I1: R L.=R I2: $ $ $ R L. I2: $ $ $ S R. $ $ $ I3: L *.R = =$ =$ =$ I4: L id. = =$ =$ =$ I5: S L=.R $ $ I6: L *R. = =$ =$ I7: R L. = =$ =$ I8: S L=R. I9: $
236
4-18 LALR- فشرده سازي جدول مشابه بودن سطرهاي زيادي از جدول action
237
مثال LALR- فشرده سازي جدول
1 E E + T 2 E T 3 T T * F 4 T F 5 F (E) 6 F id action goto id + * ( ) $ E T F 1 2 3 4 5 6 7 8 9 10 11 s5 s4 1 2 3 s6 acc r2 s7 r2 r2 r4 r4 r4 r4 s5 s4 8 2 3 r6 r6 r6 r6 s5 s4 9 3 مرحله 1 s5 s4 10 s6 s11 r1 s7 r1 r1 r3 r3 r3 r3 r5 r5 r5 r5
238
مثال LALR- فشرده سازي جدول
مرحله 2 عمل نماد تبديل به مساوي بودن بخش action براي حالت هاي 0,4,6,7 Id s5 ( s4 any error ليست مشابهي براي حالت 1 عمل نماد تبديل به s6 $ acc any error
239
مثال LALR- فشرده سازي جدول
مرحله 3 عمل نماد تبديل به جايگزيني وارده هاي خطا در حالت2 * s7 any r2 عمل نماد تبديل به جايگزيني وارده هاي خطاي حالت 3 any r4 مساوي بودن بخش action براي حالت هاي 5,10,11 و ادغام آنها
240
مثال LALR- فشرده سازي جدول
مرحله 4 عمل نماد جايگزيني وارده هاي حالت 8 تبديل به * s6 ) s11 any error تبديل به جايگزيني وارده هاي حالت 9 عمل نماد * s7 any r1
241
4-19 وقوع خطا در تجزيه LR تشخيص خطا تنها با مراجعه به جدول action
اعلام خطا به محض نيافتن ادامه مناسب براي ورودي در حال پويش عدم كاهش دنباله روي پشته عدم ورود نماد ايجاد كننده خطا به پشته
242
4-20 پويش خطا در تجزيه LR روش panic mode
1- پويش پشته به پايين تا يافتن حالت s با goto با پايانه خاص A 2- صرف نظر از يك يا چند نماد ورودي تا يافتن نماد دقيقا مناسب براي A 3- انتقال حالت goto [s , A] به پشته و ادامه تجزيه
243
4-20 پويش خطا در تجزيه LR روش Phrase level
1- آزمايش هر وارده خطا در جدول تجزيه 2- تصميم گيري در مرورد منشاء بروز خطا 3- ايجاد رويه پوششي مناسب براي خطا
244
4-21 توليد كننده تجزيه كننده - Yacc
مشخصه :translate.y 1- آماده شدن پرونده اي حاوي مشخصه مترجم براي Yacc y.tab.c كامپايلر Yacc 2- تبديل محتواي پرونده به برنامه در زبان C y.tab.c a.out كامپايلر C 3- كامپايل برنامه توليدي همراه كتابخانه برنامه تجزيهLR خروجي (تجزيه كننده) ورودي a.out 4- خروجي: برنامه تجزيه كننده
245
بخش هاي برنامه مبدا Yacc ترتيب در متن برنامه مبدا Yacc
اعلان ها بخش هاي برنامه مبدا Yacc قوانين ترجمه روالهاي حاميc اعلان ها %% ترتيب در متن برنامه مبدا Yacc قوانين ترجمه %% روالهاي حاميc
246
Yaccاعلان اعلان هاي معمول در c و محصور بين %} , %{ اعلان لغات موقت بخش اعلان برنامه اعلان نشانه هاي گرامر
247
بخش قوانين ترجمه بلافاصله پس از %%
Yaccقوانين ترجمه بخش قوانين ترجمه بلافاصله پس از %% عمل معنايي مولد يا قانون < سمت چپ > : <انتخاب 1 > {عمل معنايي 1} : <انتخاب 2 > {عمل معنايي 2 } : <انتخاب 3 > {عمل معنايي 3 } .
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.