osole tarahi compailer

Document Sample
osole tarahi compailer Powered By Docstoc
					 ‫اصول طراحي کامپايلر‬

‫تهيه کننده: سيده فاطمه نوراني‬
       ‫گروه: کامپيوتر‬
                                                        ‫شناسنامه منبع‬

                                                 ‫کامپايلرها‬
                                                       ‫دلداري‬
                                            ‫باغاني (خراسان)‬

                              ‫:‪Compilers‬‬
                                  ‫‪Principles, Techniques, and Tools‬‬




‫صفحه: 2‬   ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                                     ‫جايگاه درس در رشته کامپيوتر‬

                                                     ‫ضرورت اين درس:‬     ‫‪‬‬
                                   ‫‪ ‬ضرورت نياز به زبانهای سطح باال‬
‫‪ ‬ضرورت ترجمه برنامه های نوشته شده با زبان سطح باال به برنامه به‬
                                                         ‫زبان ماشين‬
                                ‫‪ ‬تنوع زبانهای برنامه نويسی سطح باال‬
    ‫دروس پيش نياز: نظريه زبانها و ماشين، طراحی و پياده سازی زبانها‬      ‫‪‬‬
                                                      ‫نوع درس: اجباري‬   ‫‪‬‬
                                             ‫تعدادکل ساعات تدريس:03‬     ‫‪‬‬
                                                ‫تعداد جلسات تدريس:01‬    ‫‪‬‬




‫صفحه: 3‬      ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                         ‫فصل اول: مقدمه اي بر کامپايلر‬

                                            ‫اهداف رفتاري:‬
      ‫دانشجو پس از مطالعه اين فصل با مفاهيم زير آشنا خواهد شد:‬

                                ‫‪ ‬برنامه هاي تحليل کننده‬
              ‫‪ ‬آشنايي با بخش تحليل و بخش سنتز کامپايلر‬
                               ‫‪ ‬ابزارهای ساخت کامپايلر‬




‫صفحه: 4‬    ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
          ‫1-1 نمونه اي از برنامه هاي تحليل کننده‬

                                         ‫‪ ‬ويرايشگرهاي ساختار‬
                                  ‫‪ ‬چاپگرهاي ‪pretty printer‬‬
                                       ‫‪ ‬بررسي کننده هاي ايستا‬
                                                      ‫‪ ‬مفسرها‬
                                          ‫‪ ‬شکل دهنده هاي متن‬
                                      ‫‪ ‬کامپايلرهاي سيليسيومي‬
                                         ‫‪ ‬مفسرهاي پرس و جو‬



‫صفحه: 5‬   ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                             ‫1-2 تعريف كامپايلر‬

  ‫1- ترجمه برنامه از زبان مبدا به برنامه معادل دز زبان مياني‬
                                               ‫مانند اسمبلي‬

            ‫2- گزارش وجود خطاها را در برنامه مبدا به كاربر.‬


   ‫برنامه مبدأ‬
                            ‫کامپايلر‬                    ‫برنامه مقصد‬
                      ‫«تحليل+ سنتز»‬

                            ‫پيغام خطا‬

‫صفحه: 6‬    ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                                  ‫1-3 طبقه بندي كامپايلرها‬

     ‫دسته بندي كامپايلرها بر اساس چگونگي ساخت و عمليات:‬


                                                     ‫تك گذره‬
                                                    ‫چند گذره‬
                      ‫اشكال زدا و ‪Load-and-go‬‬
                                                    ‫بهينه ساز‬


‫صفحه: 7‬   ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                         ‫1-4 عمليات كامپايلر‬


‫تجزيه برنامه مبدا به اجزاي تشكيل دهنده اش‬
                                                      ‫بخش تحليل‬
              ‫توليد كد مياني از برنامه مبدا‬


‫تبديل كد مياني به برنامه مقصد در زبان ديگر‬            ‫بخش سنتز‬
            ‫نياز به بيشترين روشهاي خاص‬




  ‫صفحه: 8‬     ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                  ‫1-5 سيستم پردازش زبان‬

                                                    ‫اجزاي سيستم‬
                  ‫‪ ‬پيش پردازشگر‬
                             ‫‪ ‬كامپايلر‬
                              ‫‪ ‬اسمبلر‬
          ‫‪ ‬باركننده و ويرايشگر‬
                          ‫الحاق‬

‫صفحه: 9‬   ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                   ‫1-5-1پيش پردازشگر‬



‫‪ ‬جمع آوري ماژولهاي برنامه مبدا موجود در فايلهاي جداگانه‬


  ‫‪ ‬تبديل بخشهاي خالصه شده بنام درشت دستورات به احكام‬
                                           ‫زبان مبدا‬




‫صفحه: 01‬   ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
               ‫1-5-2 ارتباطات در سيستم پردازش زبان‬
‫اسكلت برنامه‬
     ‫مبدا‬              ‫پيش پردازشگر‬
                                       ‫برنامه مبدا‬

                            ‫كامپايلر‬
                                   ‫برنامه اسمبلي مقصد‬

                            ‫اسمبلر‬
                                       ‫كد ماشين جابجاپذير‬
                  ‫باركننده / ويرايشگر الحاق‬                   ‫كتابخانه فايل‬
                                                               ‫هاي مقصد‬
                          ‫كد ماشين‬                              ‫جابجاپذير‬

 ‫صفحه: 11‬      ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                          ‫1-6 سه فاز تحليل در عمل کامپايل‬

        ‫تشخيص نشانه ها‬
                                         ‫خطي(تحليل لغوي يا پويش)‬     ‫تحليل‬


‫گروه بندي نشانه هاي برنامه مبدا به‬      ‫مراتبي(تحليل نحوي يا‬     ‫تحليل سلسله‬
           ‫جمالت گرامري‬
                                                        ‫تجزيه)‬


  ‫بررسي خطاهاي معنايي برنامه‬                       ‫تحليل معنايي‬



 ‫صفحه: 21‬       ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                                               ‫1-7 مراحل كامپايل‬

        ‫1- تحليل لغوي‬          ‫جلوبندي( گروه فازهاي متوالي وابسته به زبان مبدا)‬
       ‫2- تحليل نحوي‬
       ‫3- تحليل معنايي‬


      ‫4- توليد كد مياني‬
     ‫5- بهينه سازي كد‬         ‫عقب بندي( گروه فازهاي متولي وابسته به زبان مقصد)‬

      ‫6- توليد كد نهايي‬



‫صفحه: 31‬    ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                                 ‫1-7-1 نمودار مراحل كامپايل‬
                          ‫تحليل گر لغوي‬

                         ‫تحليل گر نحوي‬

                         ‫تحليل گر معنايي‬

 ‫اداره كننده خطا‬       ‫توليد كننده كد مياني‬          ‫مدير جدول نماد‬

                          ‫بهينه ساز كد‬

                       ‫توليدكننده كد نهايي‬


‫صفحه: 41‬      ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                ‫1-7-2 مراحل کامپايلر- تحليل گر لغوي‬


           ‫مرور متن برنامه به صورت حرف به حرف‬




    ‫تبديل آنها به نشانه ها ( كلمات كليدي، عملگر، جداكننده،‬
                      ‫ثوابت و شناسه)‬



‫صفحه: 51‬     ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
              ‫1-7-2 مراحل كامپايل- تحليل گر نحوي‬



                 ‫بررسي خروجي تحليل لغوي‬



              ‫ساخت درخت تجزيه از نشانه ها‬




‫صفحه: 61‬   ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
               ‫1-7-2 مراحل كامپايل - تحليل گر معنايي‬



           ‫بررسي برنامه مبدا براي يافتن خطاهاي معنايي‬




            ‫جمع آوري اطالعات مربوط به نوع داده ها‬



‫صفحه: 71‬      ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                         ‫1-7-2 مراحل كامپايل - توليد كد مياني‬




                       ‫خواندن برنامه ورودي‬



           ‫تبديل به برنامه اي در زبان مياني مانند اسمبلي‬




‫صفحه: 81‬      ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                 ‫1-7-2 مراحل كامپايل - بهينه ساز كد‬


  ‫بهينه كردن كد مياني ( حذف متغيرهاي مياني غير ضروري)‬




             ‫سرعت بخشيدن به توليد كد نهايي‬




‫صفحه: 91‬   ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
           ‫1-7-2 مراحل كامپايل - توليد كننده كد نهايي‬


           ‫تبديل كد مياني بهينه به كد جابجاپذير يا اسمبلي‬



            ‫تعيين مكانهاي حافظه براي متغيرهاي برنامه‬



                ‫انتساب متغيرها به ثبات هاي ماشين‬


‫صفحه: 02‬       ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
           ‫1-7-2 مراحل كامپايل - مديريت جدول نماد‬
                                                    ‫تعريف‬
‫ساختمان داده اي شامل ركورد براي شناسه و ميدانهايي براي‬
                        ‫صفات أن‬

                                                    ‫هدف‬
     ‫فراهم كردن شناسايي سريع ركورد شناسه بمنظور‬
                ‫ذخيره و بازيابي داده هايش‬



‫صفحه: 12‬    ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
   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                                             Into real
                                                         id3                               id3
 Id1:= id2 + tem1                                                                                    50
                                                                   50


                             Mov id, R2
                                              Mov id2 , R1
                             Mul 50.0 , R2
                             Mov R1, id1      Add R2, R1


   22 :‫صفحه‬          ‫اصول طراحي کامپايلرها‬              ‫گروه کامپيوتر‬
                             ‫1-8 ابزارهاي ساخت كامپايلر‬

                                      ‫مولدهاي تجزيه كننده‬
                                   ‫توليد كننده هاي پويشگر‬
                                   ‫موتورهاي ترجمه نحوگرا‬
                                       ‫مولدهاي كد خودكار‬
                                     ‫موتورهاي جريان داده‬


‫صفحه: 32‬   ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                          ‫فصل دوم : نحو زبان و تجزيه‬

                                              ‫اهداف رفتاري:‬
      ‫دانشجو پس از مطالعه اين فصل با مفاهيم زير آشنا خواهد شد:‬

                                                        ‫‪ ‬گرامر‬
                                             ‫‪‬اشتقاق و تجزيه‬
                                               ‫‪‬تعريف نحوگرا‬
                                                ‫‪ ‬درخت نحوی‬
                          ‫‪ ‬تجزيه باال به پايين و پايين به باال‬
                                                        ‫‪‬ترجمه‬
‫صفحه: 42‬   ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                                      ‫2-1 گرامر‬

                                                        ‫تعريف‬

     ‫گرامر: روش ساخت رشته هايي متشكل از نمادها‬

                                                        ‫کاربرد‬
           ‫وسيله تشخيص عضويت يك رشته در زبان‬

                ‫مشخص كننده ساختار يك زبان‬



‫صفحه: 52‬      ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                     ‫2-2 تعريف رياضي گرامر‬

                           ‫گرامر 4 گانه }‪G = {N, T, S, P‬‬

                        ‫مجموعه غير پايانه ها‬           ‫‪=N‬‬
                             ‫مجموعه پايانه ها‬          ‫‪=T‬‬
                                   ‫عضو شروع‬            ‫‪=S‬‬
           ‫مجموعه قوانين توليد رشته هاي زبان‬           ‫‪=P‬‬




‫صفحه: 62‬     ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                             ‫مثال از يك گرامر‬

 ‫} ‪N = { E, F‬‬
 ‫} ‪T = { +, * , / ,id‬‬
 ‫‪S=E‬‬
 ‫} ‪P = { E  F * id , F  F / E , F  F + F‬‬



   ‫‪id * id+ id‬‬                         ‫رشته توليدي نمونه‬


‫صفحه: 72‬   ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                                     ‫2-3 اشتقاق‬
        ‫فرآيند توليد رشته از گرامر با شروع از عنصر ابتداي‬
                    ‫گرامر و استفاده از قوانين.‬


 ‫از چپ: در هر قدم انجام جايگزيني روي‬
             ‫سمت چپ ترين غيرپايانه‬
                                                       ‫انواع اشتقاق‬
‫از راست: در هر قدم انجام جايگزيني روي‬
            ‫سمت راست ترين غيرپايانه‬


  ‫صفحه: 82‬   ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                                     ‫مثال از اشتقاق‬

                                     ‫توليد رشته ‪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‬‬




 ‫صفحه: 92‬    ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                            ‫2-3-1 درخت تجزيه‬

  ‫درخت تجزيه نشان دهنده چگونگي اشتقاق رشته اي از زبان‬
                   ‫از نماد شروع گرامر‬

                                                   ‫ساخت درخت تجزيه‬
                                            ‫‪ - S‬ريشه درخت‬

‫قانون ‪ A = A  XYZ‬گره اي در درخت و ‪ XYZ‬فرزندان آن‬

 ‫قانون ‪ A = A  Xa‬گره اي در درخت و ‪ X ,a‬فرزندان آن‬

           ‫پايانه ها ( حروف كوچك) تنها در برگها ديده مي شوند.‬


‫صفحه: 03‬       ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                                   ‫2-3-2 درخت اشتقاق‬

‫درخت تجزيه اي نشان دهنده مراحل اشتقاق بكار رفته (راست يا چپ)‬



                            ‫‪E‬‬
                                                                      ‫مثال‬
                   ‫‪E‬‬            ‫‪E‬‬
                            ‫+‬                                     ‫‪id + id * id‬‬
            ‫‪id‬‬              ‫‪E‬‬            ‫‪E‬‬
                                 ‫*‬

                       ‫‪id‬‬                    ‫‪id‬‬



 ‫صفحه: 13‬        ‫اصول طراحي کامپايلرها‬            ‫گروه کامپيوتر‬
                                                      ‫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‬‬




  ‫صفحه: 23‬      ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                                       ‫2-5 نشان گذاري پسوندي‬
                                        ‫نشان گذاري يك عبارت مانند ‪E‬‬

             ‫1- اگر ‪ E‬متغير و يا ثابت باشد نشان گذاري آن خودش مي شود.‬

 ‫2- اگر ‪ E‬عبارتي بشكل 2‪ E1 op E‬باشد كه ‪ Op‬عملگر دودويي است نشان‬
  ‫گذاري آن عبارتست از ‪ F1 F2 Op‬كه 2‪ F1, F‬نشان گذاري 2‪ E1 , E‬هستند.‬

‫3- اگر ‪ E‬عبارتي بشكل )1‪ (E‬باشد، نشان گذاري براي 1‪ E‬همان نشان گذاري‬
                                                   ‫براي ‪ E‬مي باشد.‬

   ‫)2+5(-9‬                    ‫- +259‬



‫صفحه: 33‬       ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                        ‫2-6 تعريف نحو گرا‬


                         ‫كاربرد براي ترجمه ساختارهاي زبان.‬

      ‫ترجمه ساختار را بر حسب صفات مربوط به مولفه هاي‬
                                                       ‫نحوي‬
  ‫تعيين نوع ساختار، مكان اولين دستور توليد شده در برنامه‬
                         ‫هدف يا تعداد دستورات براي كامپايلر‬




‫صفحه: 43‬    ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                             ‫2-6-1 تعريف نحوي جهت دار‬


      ‫گرامر و مجموعه اي از قواعد معنايي وابسته به آن‬



           ‫هر نماد در گرامر مجموعه اي از صفات دارد.‬    ‫1.‬
                                                              ‫صفات و‬
       ‫در هر مولد يا قانون گرامر مجموعه اي از قواعد‬    ‫2.‬
                                                            ‫محاسبه آنها‬
  ‫معنايي براي محاسبه مقادير صفات نمادها وجود دارد.‬




‫صفحه: 53‬      ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                                                      ‫2-7 ترجمه‬

                                              ‫ساختن درخت ترجمه:‬


                               ‫الف( ساختن درخت تجزيه براي ورودي‬


‫ب) اگر گره ‪ n‬در درخت تجزيه با نماد ‪ x‬از گرامر متناظر باشد، ‪x.a‬‬
                           ‫مقدار صفت ‪ a‬از نماد ‪ x‬در آن گره است.‬

‫ج) مقدار ‪ x.a‬در گره ‪ n‬با استفاده از قواعد معنايي براي صفت ‪ a‬همراه‬
           ‫با قانون گرامري استفاده شده درگره ‪ n‬محاسبه مي شود.‬



‫صفحه: 63‬    ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                                               ‫مثال از ترجمه‬

           ‫قانون‬                        ‫قواعد معنايي‬
   ‫‪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‬‬    ‫0‬                  ‫,0 , =: ‪term.t‬‬
   ‫‪term‬‬    ‫1‬                  ‫,1 , =: ‪term.t‬‬
    ‫..…‬                         ‫..…‬
   ‫‪term‬‬     ‫9‬                 ‫,9 , =: ‪term.t‬‬


   ‫تعريف نحوگرا براي ترجمه عبارات ميانوندي به عبارت معادل پسوندي‬



‫صفحه: 73‬        ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                                              ‫2- 7-1درخت نحوي‬

                                        ‫+2-59 = ‪expr.t‬‬


                ‫-59 = ‪expr.t‬‬                             ‫2 = ‪term.t‬‬

 ‫9 = ‪expr.t‬‬                ‫5 = ‪term.t‬‬



 ‫9 = ‪term.t‬‬


    ‫9‬              ‫-‬           ‫5‬          ‫+‬
                                                           ‫2‬




‫صفحه: 83‬      ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                    ‫2-7-2 انواع درخت نحوي‬

                                                  ‫درخت نحو مجرد‬

   ‫هر گره نماينده يك عملگر و فرزندان آن عملوند آن‬


                                                       ‫درخت نحو واقعي‬

‫درخت تجزيه اي كه عملگرها خود فرزند محسوب مي شوند.‬



 ‫صفحه: 93‬   ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                            ‫2-8 الگوي ترجمه‬

     ‫گرامر مستقل از متني كه قطعه برنامه هايي كه عمليات معنايي‬
      ‫ناميده مي شوند در سمت راست قوانين آن اضافه شده اند.‬


                     ‫تفاوت با ترجمه نحوگرا‬


             ‫نمايش ترتيب ارزشيابي قوانين بطور صريح.‬



‫صفحه: 04‬     ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
           ‫2-8-1 درخت توليد شده براي الگوي ترجمه‬

                ‫‪expr‬‬

                                               ‫طريقه ساخت درخت‬
                                ‫1‪expr‬‬
   ‫+‬
           ‫‪term‬‬
                  ‫} ) ,+, ( ‪{print‬‬


   ‫يك برگ اضافي ساخته شده براي عمل معني‬


                                  ‫1- ساختن فرزند اضافي براي درخت‬
       ‫2- متصل نمودن اين فرزند به گره مربوط به قانون خود در‬
                                                      ‫گرامر‬
‫صفحه: 14‬       ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                          ‫2-9 تجزيه ( پارسينگ)‬




  ‫* تجزيه به كمك تحليلگر نحوي و به نام تحليل نحوي انجام مي گيرد.‬

           ‫* در تجزيه تعلق رشته ورودي به زبان مبدا بررسي مي شود.‬

     ‫* بررسي طبق ساختار و نحو دستورات زبان مبدا انجام مي گيرد.‬




‫صفحه: 24‬       ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                           ‫2-9-1 تجزيه- دسته بندي روشها‬

                                            ‫روش باال به پايين :‬
                                       ‫ساخته شدن درخت تجزيه از‬
                                        ‫باال به پايين. مانند )1(‪LL‬‬

                   ‫روش پايين به باال:‬
           ‫ساخته شدن درخت تجزيه از پايين‬
                   ‫مانند تجزيه به باال‬
                    ‫عملگر0 اولويت و‬
                            ‫‪LR‬‬



‫صفحه: 34‬       ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                      ‫2-9-1-1 تجزيه كننده باال به پايين‬

                 ‫آغاز تجزيه از عنصر شروع گرامر‬


                   ‫جايگزيني قانون يك غير پايانه‬


                         ‫قانون كاربرد دارد؟‬
                      ‫خير‬                     ‫بلي‬

‫عقبگرد به قانون هم سطح ديگر‬                   ‫برو به قانون سطح بعد‬



‫صفحه: 44‬    ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                           ‫مثال از تجزيه باال به پايين‬

‫‪S  bBe‬‬
‫‪B  cf/ ce/c‬‬
                                                               ‫تجزيه:‬

                          ‫‪Back tracking‬‬     ‫‪Back tracking‬‬
                                           ‫‪S‬‬                   ‫‪S‬‬
           ‫‪S‬‬              ‫‪S‬‬
                                                           ‫‪b‬‬       ‫‪e‬‬
                                       ‫‪b B‬‬         ‫‪e‬‬           ‫‪B‬‬
     ‫‪bb B‬‬      ‫‪e‬‬     ‫‪b B‬‬          ‫‪e‬‬
                                       ‫‪c‬‬       ‫‪e‬‬
                                                               ‫‪c‬‬
                      ‫‪c‬‬       ‫‪f‬‬




‫صفحه: 54‬       ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
              ‫2-9-1-2 تجزيه باال به پايين پيش گويانه‬


                 ‫روش تجزيه باال به پايين بدون ويژگي عقبگرد‬

    ‫با نگاه به نماد پيش نگر در مورد استفاده از هر قانون درتصميم گيري‬


                                                       ‫نماد پيش نگر‬

‫مجموعه تمام پايانه هايي است كه در قوانين مربوط به غير پايانه در سمت‬
                                                  ‫چپ قرار مي گيرند‬


‫صفحه: 64‬      ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                                                            ‫مثال‬

                               ‫نمادهاي پيش نگر يا مجموعه ‪First‬‬


     ‫‪A  aB /cC / e‬‬
     ‫‪B  dA / c‬‬
     ‫‪C  cB / a‬‬
                                    ‫} ‪First (A):{ a, c, e‬‬
                                    ‫} ‪First (B): { d, c‬‬
                                    ‫} ‪First (C) : {c, a‬‬



‫صفحه: 74‬   ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                           ‫2-01 بازگشتي چپ‬

   ‫ظاهر شدن غير پايانه سمت چپ در سمت راست قانون بعنوان‬
                                            ‫اولين عنصر‬

                                 ‫حذف بازگشتي چپ پيش از تجزيه‬


                                       ‫‪A  xZ / yZ‬‬
  ‫‪A  Aa / Ab / Ac / x / y‬‬
                                       ‫‪Z  aZ / bZ / cZ‬‬




‫صفحه: 84‬     ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                      ‫مثال حذف بازگشتي چپ‬


 ‫‪S  Aa / b‬‬

 ‫‪A  Ac / Sd‬‬


                         ‫‪A  Ac / Aad / bd‬‬

                         ‫‪S  Aa / b‬‬

                                                   ‫‪S  Aa / b‬‬

                                                   ‫‪A  bdZ‬‬

                                                   ‫‪Z  cZ / adZ‬‬



‫صفحه: 94‬      ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                                             ‫2-11 فاكتور چپ‬

     ‫يكسان بودن عنصر سمت چپ در حداقل دو قانون گرامر‬


                                                     ‫فاكتورگيري چپ‬

            ‫فاكتورگيري از ‪a‬‬         ‫‪A  aZ‬‬
 ‫‪A  aB / aC‬‬
                                    ‫‪ZB/C‬‬




‫صفحه: 05‬    ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                                      ‫مثال فاكتورگيري چپ‬

 S  iEtS                                      S  iEtSZ /a
 S  iEtSeS / a                                Z  eS
 Eb
                                               Eb



                    S iEtS / iEtSes
                    S a
                    Eb



51 :‫صفحه‬   ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                           ‫2-21 تحليل لغوي‬

                          ‫- دريافت يك رشته كاراكتري از ورودي‬
                                       ‫- استخراج نشانه ها از آن‬
                                ‫- تحويل نشانه ها به تجزيه كننده‬
  ‫- ارتباط دادن پيامهاي خطاي توليد شده كامپايلر با برنامه مبدا‬



 ‫- حذف فضاهاي خالي بين عبارات و توضيحات برنامه‬
            ‫- تشخيص شناسه ها و كلمات كليدي زبان‬



‫صفحه: 25‬    ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                                           ‫مثال‬

     ‫‪Count = count + increment‬‬
     ‫‪Count = count + increment‬‬     ‫تحليل لغوي عبارت دستوري‬


                                   ‫تحليل گر لغوي‬




           ‫‪id = id + id‬‬
            ‫‪id = id + id‬‬                     ‫تجزيه كننده‬



‫صفحه: 35‬   ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                   ‫2-21-1 رابط تحليلگر لغوي‬

                                                          ‫مصرف نشانه ها‬
‫ورودي‬                                      ‫ميانگير‬      ‫براي تعيين ساختار‬
                                                                 ‫دستورات‬
                    ‫تحليل گر لغوي‬
                                                         ‫تحليل گر نحوي‬
                                                         ‫( تجزيه كننده)‬



             ‫1- در هر زمان حاوي يك بلوك از كاراكترها‬        ‫ميانگير‬
        ‫2- اشاره گري به مكان نشانه بعدي پردازش نشده‬


‫صفحه: 45‬       ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                                          ‫2-31 تشكيل جدول نماد‬
     ‫جدولي ساخته شونده توسط. فازهاي تحليل، مورد استفاده فازهاي‬
                               ‫توليد كد‬

   ‫ذخيره رشته كاراكتري تشكيل دهنده شناسه در جدول.‬          ‫فاز تحليل لغوي‬

‫اضافه كردن نوع شناسه، مورد استفاده(رويه، متغير و..)‬        ‫فاز تحليل نحوي‬

                 ‫درج مكان شناسه در حافظه در جدول‬           ‫فاز تحليل معنايي‬

    ‫استفاده از اطالعات جدول براي دسترسي به متغير و‬           ‫فاز توليد كد‬
                                          ‫توليد كد‬

    ‫صفحه: 55‬      ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                                      ‫2-31-1 جدول نماد- روالها‬

        ‫: ) ‪Lookup ( s‬‬                          ‫: )‪Insert ( s , t‬‬



‫اگر ‪ s‬در جدول است، انديس آن بر‬       ‫انديس وارده جديد مربوط به رشته ‪s‬‬
‫مي گردد اگر نه، صفر بر مي گردد‬                 ‫نشانه ‪ t‬را بر مي گرداند.‬


                ‫عمل ‪ Lookup‬تعيين وجود شناسه در جدول نماد‬
   ‫در صورت عدم وجود شناسه ، درج آن در جدول‬           ‫‪Insert‬‬         ‫عمل‬



‫صفحه: 65‬     ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                                        ‫2-31-2 جدول نماد- پياده سازي‬

‫كلمات دستوري‬         ‫‪mod‬‬
                                            ‫‪ : ptr‬اشاره گر‬   ‫‪ : attributes‬صفات ‪: token‬نشانه‬
                     ‫‪div‬‬
‫در متن برنامه‬                                                    ‫‪div‬‬
                                                                 ‫‪mod‬‬

                                                                 ‫‪id‬‬




        ‫‪d‬‬       ‫‪i‬‬          ‫‪v‬‬             ‫‪m‬‬         ‫‪o‬‬         ‫‪d‬‬              ‫‪a‬‬
                               ‫دنباله كاراكترهاي ورودي‬

  ‫صفحه: 75‬          ‫اصول طراحي کامپايلرها‬            ‫گروه کامپيوتر‬
                                   ‫2-41 ماشين پشته انتزاعي‬

    ‫ماشين پشته انتزاعي: شكل مرسوم نمايش مياني توليد‬
    ‫كد‬
                         ‫1- حافظه دستورات‬              ‫اجزاي ماشين‬

                            ‫2- حافظه داده ها‬

                                                      ‫محاسبات ماشين‬
                        ‫1- محاسبات صحيح‬
              ‫2- دستورات دستكاري پشته‬
                               ‫3- روند كنترل‬

‫صفحه: 85‬   ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                 ‫2-41-1 دستورات محاسباتي‬
‫قابليت پياده سازي مستقيم عملهاي پايه مانند جمع ، تفريق و ... در ماشين‬‫‪‬‬
                                                                     ‫‪‬‬
      ‫انتزاعي سازي. عمليات پيچيده تر با دنباله اي از دستورات اوليه ماشين‬
                                                                 ‫پياده‬
 ‫استفاده از نمايش پسوندي در كد ماشين براي ارزيابي يك عبارت محسباتي‬   ‫‪‬‬
                                ‫استفاده از پشته در حين ارزيابي عبارات‬‫‪‬‬
                      ‫ارزشيابي عبارت در ماشين‬
                     ‫انجام عملگر بر روي مقدار پشته‬
                      ‫بيرون پراندن عملوندها از پشته‬
                       ‫قرار دادن نتيجه بر روي پشته‬


‫صفحه: 95‬      ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                     ‫مثال ارزيابي عبارت محاسباتي با پشته‬

                                                  ‫عبارت محاسباتي *5 + 31‬

                                         ‫1- عدد 1 را روي پشته قرار ده‬
                                         ‫2- عدد 2 را روي پشته قرار ده‬
‫3- دوتا از باالترين عناصر پشته را با هم جمع و آن دو را از پشته بيرون ده‬
                               ‫4- نتيجه يعني عدد 4 را روي پشته قرار ده‬
                                         ‫5- عدد 5 را روي پشته قرار ده‬
          ‫6- دوتا باالترين عناصر پشته را در هم ضرب و آنها را بيرون ده‬
                             ‫7- نتيجه يعني عدد 02 را روي پشته قرار ده‬


   ‫صفحه: 06‬      ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                        ‫2-41-2 دستكاري پشته‬


‫‪Push s‬‬                                             ‫‪S‬را روي پشته قرار ده‬
‫‪rvalue l‬‬                           ‫محتويات مكان ‪ L‬را روي پشته قرار ده‬
‫‪lvalue l‬‬                                  ‫آدرس ‪ L‬را روي پشته قرار ده‬
     ‫‪pop‬‬                                ‫مقدار در باالي پشته را دور بريز‬
‫=:‬   ‫‪ r-value‬بروي پشته در ‪ l-value‬زير آن گذاشته و هر دو از پشته خارج‬
 ‫‪copy‬‬             ‫يك نسخه از مقدار باالي پشته را بر روي پشته فشار بده‬




‫صفحه: 16‬       ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                             ‫مثال عمليات در پشته هنگام محاسبه‬

 day := (1461*y) div 4 + (153*m + 2 ) div 5 + d           ‫ترجمه‬

           lvalue day            push 2
           push 1461             +
           rvalue y              push 5
           *                     div
           push 4                +
           div
                                 rvalue d
           push 153
                                 +
           rvalue m
                                 :=
           *

62 :‫صفحه‬       ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                ‫2-41-3 كنترل جريان در ماشين‬

                                                     ‫تعيين مكان پرش‬

                        ‫1- تعيين محل پرش با عملوند دستور‬
‫2- تعيين فاصله نسبي براي پرش مثبت يا منفي با عملوند دستور‬
                     ‫3- تعيين محل پرش با نماد هاي دستور‬


                                                  ‫امكان برداشتن عملوند‬
                                                      ‫از باالي پشته‬


     ‫صفحه: 36‬      ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                            ‫2-41-3-1 كنترل جريان - دستورات‬


    ‫‪lable l‬‬                                  ‫عدم تاثير در مقصد پرش ها به ‪L‬‬


    ‫‪goto l‬‬                             ‫اجراي دستور بعدي از حكمي با برچسب ‪L‬‬


   ‫‪gofalse l‬‬           ‫خارج نمودن مقدار باالي پشته، پرش در صورت صفر بودن‬

   ‫‪gotrue l‬‬          ‫خارج نمودن مقدار باالي پشته ، پرش در صورت صفر نبودن‬

    ‫‪halt‬‬                                                        ‫توقف اجرا‬




‫صفحه: 46‬       ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                                   ‫فصل سوم: تحليلگر لغوي‬

                                              ‫اهداف رفتاري:‬
      ‫دانشجو پس از مطالعه اين فصل با مفاهيم زير آشنا خواهد شد:‬

                                 ‫‪ ‬آشنايي با تحليلگر لغوی‬
                                 ‫‪ ‬عبارات و گرامر باقاعده‬
                                     ‫‪‬تحليلگر لغوی ‪Lex‬‬
   ‫‪ ‬ماشين خودکار قطعی و غير قطعی و تبديل آنها به يکدگر‬



‫صفحه: 56‬   ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                       ‫3-1 وظايف تحليل گر لغوي‬

                                           ‫1- خواندن نمادهاي ورودي‬
                                         ‫2- توليد دنباله اي از نشانه ها‬
                                       ‫3- ثبت نشانه ها در جدول نمادها‬
‫4- حذف توضيحات برنامه، جاي خالي و كاراكتر مربوط به سطر جديد‬
   ‫5- ارتباط دادن پيامهاي خطاي توليد شده كامپايلر با برنامه مبدا‬




    ‫صفحه: 66‬   ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                                         ‫3-2 ارتباط با تجزيه كننده‬
                  ‫نشانه‬

‫برنامه مبدا‬
              ‫تحليل گر لغوي‬                          ‫تحليل گر نحوي‬
                              ‫نشانه بعدي را بده‬      ‫(تجزيه كننده)‬




                                 ‫جدول نماد‬


               ‫ارتباط تحليل گر لغوي با تجزيه كننده‬

 ‫صفحه: 76‬        ‫اصول طراحي کامپايلرها‬            ‫گروه کامپيوتر‬
   ‫3-2-1 داليل جدايي فازهاي تحليل لغوي و تجزيه‬


                  ‫1- ساده تر بودن طراحي دو فاز‬

           ‫2- افزايش كارايي كامپايلر به دليل استفاده از‬
                        ‫ميانگير بين دو فاز‬


     ‫3- قابليت حمل كامپايلر و محدود شدن تغييرات به‬
                     ‫تحليلگر لغوي‬


‫صفحه: 86‬       ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                             ‫3-3 خطاي مرحله تحليل لغوي‬

‫منطبق نبودن هيچ كدام از الگوهاي مربوط به تشخيص نشانه ها‬
           ‫در زبان مبدا با پيشوندي از ورودي‬



                           ‫1- ‪Panic Mode‬‬
                   ‫2- حذف كاراكتر اضافي‬
                                                    ‫روشهاي پوشش‬
              ‫3- درج كاراكتر از قلم افتاده‬
                                                            ‫خطا‬
 ‫4- جايگزيني يك كاراكتر بجاي كاراكتر غلط‬
     ‫5- جابجا نمودن دو كاراكتر مجاور هم‬


‫صفحه: 96‬    ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                    ‫3-3-1 پوشش خطا- ‪Panic mode‬‬

                                     ‫‪ ‬ساده ترين شيوه پوشش خطا‬


‫‪ ‬حذف كاراكترهاي متوالي از باقيمانده ورودي تا پيدا شدن نشانه‬
                                 ‫قابل قبول توسط تحليل گر لغوي‬


            ‫‪ ‬كافي بودن براي يك سيستم محاسباتي محاوره اي‬



 ‫صفحه: 07‬    ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                 ‫3-4 تحليلگر لغوي – پياده سازي‬

                                                ‫روشهاي پياده سازي‬

‫استفاده از توليد كننده تحليلگر لغوي مانند كامپايلر ‪Lex‬‬


‫نوشتن تحليلگر لغوي به زبانهاي متداول برنامه نويسي‬
  ‫سيستم و خواندن رشته ورودي با تسهيالت ‪I/O‬‬

      ‫نوشتن تحليلگر لغوي به اسمبلي و مديريت‬
           ‫صريح خواندن رشته ورودي‬


 ‫صفحه: 17‬      ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                                                   ‫3-5 عبارات با قاعده‬

                                                                ‫قواعد تعريف‬

‫1- عبااارت باقاعااده ‪ ‬زبااان {‪( }‬مجموعااه حاااوي رشااته تهااي) را مشااخص مااي‬
                                                                               ‫نمايد.‬
          ‫2- }‪ {a‬عبارت باقاعده اي است که زبان ‪( a‬نمادي از ‪ )Σ‬را مي سازد.‬
‫3- اگاار ‪ a‬و ‪ b‬عبااارات باقاعااده باشااند، اجتماااع، الحاااق و ‪ Kelin Star‬آنهااا هاام‬
                                                                      ‫باقاعده است.‬




  ‫صفحه: 27‬        ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                                                   ‫مثال عبارات باقاعده‬

                                               ‫اگر }‪ ={a,b‬باشد آنگاه:‬

                     ‫1- از عبارت باقاعده ‪ aUb‬مجموعه }‪ {a , b‬ساخته مي شود.‬

 ‫2- از عبارت باقاعده )‪ (aUb) (aUb‬مجموعه }‪ { aa, ab,ba,bb‬توليد مي شود.‬

             ‫3- عبارت باقاعده *‪ a‬كليه رشته هايي با صفر يا چند ‪ a‬را توليد مي كند.‬

‫4- عبارت باقاعده * )‪ (aUb‬رشته هايي با صفر يا چند نماد از ‪b‬يا ‪ a‬را توليد مي كند.‬




‫صفحه: 37‬       ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                            ‫3-5-1 عبارات باقاعده – خواص جبري‬

           ‫اصل‬                               ‫توصيف‬

  ‫‪aUb=bUa‬‬                                               ‫/ جابجا پذير است.‬
  ‫‪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‬‬




‫صفحه: 47‬          ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                      ‫مثال عبارات با قاعده در زبان پاسكال‬
                                       ‫تعريف باقاعده مربوط به شناسه ها‬
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

 75 :‫صفحه‬      ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                               ‫3-6 مجموعه هاي بي قاعده‬


                 ‫1- ساختارهاي موازنه اي و النه اي‬


                                   ‫2- رشته هاي تكراري‬


                  ‫3- رشته هايي براي مقايسه دو چيز‬




‫صفحه: 67‬   ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                             ‫3-7 گرامر با قاعده‬


                                          ‫فرم قوانين گرامر باقاعده‬


           ‫‪A→a‬‬
                          ‫‪ a‬عنصري از الفبا و پايانه‬
           ‫‪A→λ‬‬
                                    ‫‪ B‬و ‪ A‬غير پايانه‬
           ‫‪A → aB‬‬




‫صفحه: 77‬    ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                                   ‫مثال چند گرامر با قاعده‬

                                   ‫ْ ‪G: S  abSA‬‬
                                                     ‫الف‬
                                      ‫‪A  Aa‬‬


  ‫‪G: S  aSb/ab‬‬            ‫ب‬


                                   ‫‪G: S  bS/cS/aB‬‬

                                   ‫‪B  aB/cS /bC‬‬       ‫پ‬
                                   ‫‪C  aB / bS‬‬




‫صفحه: 87‬   ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                     ‫3-8 توليدكننده تحليلگر لغوي - ‪Lex‬‬
                                           ‫روش ايجاد تحليلگر توسط ‪Lex‬‬

   ‫مشخصه‬                ‫‪Lex.yy.c‬‬                ‫1- آماده شدن پرونده اي حاوي‬
          ‫كامپايلر ‪Yacc‬‬
   ‫:1.‪Lex‬‬                                        ‫مشخصه تحليلگر براي ‪Lex‬‬

                                                   ‫2- تبديل محتواي پرونده به‬
‫‪Lex.yy.c‬‬                   ‫‪a.out‬‬                            ‫برنامه در زبان ‪C‬‬
            ‫كامپايلر ‪C‬‬

                                               ‫3- كامپايل برنامه توليدي همراه‬
  ‫ورودي‬                         ‫خروجي‬              ‫كتابخانه برنامه تحليل لغوي‬
             ‫‪a.out‬‬
                         ‫دنباله نشانه ها‬
                                                   ‫4- خروجي: برنامه تحليلگر‬



‫صفحه: 97‬     ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                                 ‫3-8-1 ‪ - Lex‬اجزاي برنامه‬
              ‫اعالن ها‬

            ‫قواعد ترجمه‬                ‫بخش هاي برنامه مبدا ‪Lex‬‬

           ‫رويه هاي كمكي ‪c‬‬

              ‫اعالن ها‬
                ‫%%‬
             ‫قواعد ترجمه‬               ‫ترتيب در متن برنامه مبدا ‪Lex‬‬
                ‫%%‬
           ‫رويه هاي كمكي‪c‬‬

‫صفحه: 08‬      ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                 ‫3-8 توليدكننده تحليلگر لغوي‬

                      ‫اعالن متغيرها‬


               ‫اعالن ثوابت صريح‬               ‫بخش اعالن برنامه‬


‫تعاريف باقاعده (اجزاي عبارات باقاعده‬
        ‫مورد استفاده در قواعد ترجمه)‬



   ‫صفحه: 18‬    ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                  ‫3-8-1 ‪ - Lex‬اجزاي برنامه‬
                                       ‫بخش قوانين ترجمه بالفاصله پس از %%‬

‫1‪P‬‬         ‫} عمل معنايي 1{ :‬
‫2‪P‬‬         ‫} عمل معنايي 2{ :‬                ‫عمل مناسب‬        ‫عبارت باقاعده‬

           ‫}عمل معنايي 3 { :‬
      ‫.‬
      ‫.‬
      ‫.‬

                                                 ‫رويه هاي كمكي ‪C‬‬
          ‫مورد استفاده دراجراي اعمال‬



‫صفحه: 28‬       ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                                       ‫3-9 ماشين خودكار متناهي‬

‫ابزاري براي تشخيص ساختارهاي موجود زبان در دنباله ورودي از‬
        ‫نشانه ها و پذيرفتن يا نپذيرفتن دنباله كاراكترهاي ورودي‬



    ‫‪DFA‬‬            ‫1- ماشين خودكار متناهي قطعي‬
                                                      ‫انواع ماشين هاي خودكار‬
   ‫‪NFA‬‬    ‫2- ماشين خودكار متناهي غير قطعي‬




  ‫صفحه: 38‬     ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                                       ‫3-9-1 ماشين خودكار قطعي‬

                              ‫يك مدل رياضي است متشكل از 5تايي‬

                ‫الفباي زبان‬                   ‫تابع گذر‬
                         ‫)‪M= (Q ,  ,  , q0, F‬‬

                                            ‫زيرمجموعه اي از ‪ Q‬به نام‬
                                                           ‫حاالت نهايي‬
‫حالت ابتدايي يا شروع ماشين مجموعه متناهي از حاالت ماشين‬




     ‫صفحه: 48‬      ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                            ‫3-9-2 ماشين خودكار غير قطعي‬

           ‫‪ DFA‬اي كه مي توان از هر حالت با عناصر‬
             ‫ورودي يكسان به حاالت مختلفي رسيد.‬

                                                        ‫4‪q‬‬
                                                 ‫‪a‬‬
                    ‫‪a‬‬
                                                  ‫‪a‬‬
           ‫3‪q‬‬               ‫4‪q‬‬                          ‫7‪q‬‬
                                        ‫3‪q‬‬
                                                  ‫‪a‬‬
                    ‫‪DFA‬‬                   ‫‪NFA‬‬           ‫1‪q‬‬




‫صفحه: 58‬        ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                                           ‫مثال از ‪DFA‬‬
                    ‫تبديل به‬
                     ‫ماشين‬           ‫‪a‬‬              ‫‪b‬‬
   ‫‪S  aS / aA‬‬       ‫قطعي‬
                                          ‫‪a‬‬                     ‫‪b‬‬
   ‫‪A  bA / b‬‬                    ‫‪S‬‬                 ‫‪A‬‬                      ‫‪Z‬‬




   ‫اشتقا‬                        ‫محاسبه‬               ‫رشته پردازش شده‬
      ‫ق‬
 ‫‪S  aS‬‬               ‫]‪[S , aabb]  [S , abb‬‬               ‫‪a‬‬

    ‫‪ aaA‬‬                                ‫]‪[A,bb‬‬            ‫‪aa‬‬
                                                           ‫‪aab‬‬
    ‫‪ aabA‬‬                               ‫]‪[A , b‬‬
                                                           ‫‪aabb‬‬
    ‫‪ aabb‬‬                               ‫] ,‪[Z‬‬
                                                                    ‫پذيرفته توسط ماشين‬

‫صفحه: 68‬     ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                                                        ‫مثال از ‪NFA‬‬

                                           ‫‪( a U b)* abb‬‬        ‫زبان:‬



     ‫شروع‬              ‫‪a‬‬            ‫‪b‬‬                   ‫‪b‬‬
             ‫0‬                  ‫1‬              ‫2‬            ‫3‬


               ‫‪b‬‬




‫صفحه: 78‬    ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                                       ‫3-9-3 تبديل ‪ NFA‬به ‪DFA‬‬

                        ‫تعريف : هبستگي المبدا يا )‪- closure (qi‬به صورت‬
                                                              ‫بازگشتي :‬
                                          ‫1- پايه: )‪qi   -closure (qi‬‬

  ‫2- مرحله بازگشت: اگر ‪ qj‬يك عنصر از )‪  -closure(qj‬باشد و اگر ) ‪qk (gj , ‬‬
                                            ‫آنگاه )‪ qk   -closure (qj‬است.‬


‫3- همبستگي : ‪ qj‬در )‪  -closure (qi‬است اگر بتواند با تكرار متناهي از مرحله بازگشت‬
                                                                         ‫بدست آيد.‬




     ‫صفحه: 88‬        ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                                                      ‫مثال همبستگي المبدا‬

      ‫‪a‬‬                ‫‪b‬‬

               ‫‪a‬‬
  ‫0‪q‬‬                 ‫1‪q‬‬

  ‫‪a‬‬
              ‫2‪q‬‬                      ‫حالت‬       ‫‪a‬‬              ‫‪b‬‬         ‫‪c‬‬
          ‫‪c‬‬
                                       ‫} 0‪q0 { q1 , q2, q‬‬       ‫-‬          ‫-‬

                                       ‫1‪q‬‬         ‫-‬            ‫}1‪{q‬‬        ‫-‬

                                       ‫2‪q‬‬         ‫-‬            ‫}1‪{q‬‬   ‫}2‪{ q1 , q‬‬



‫صفحه: 98‬           ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                                             DFA ‫ به‬NFA ‫مثال تبديل‬
    a   NFA           b                                   a         q1 , q2, q0
                                                 q0
            a                                     b,c
q0               q1

a                                                 e
            q2
        c
                                                  a
                            a         q1 , q2, q0
                 q0
                                                              c              c
                      b,c                    b
                                                                  q1 , q2         DFA
a , b, c         e              a,c
                                                      b
                                            q1
                                        b        ‫پذيرش‬

                                                                    a
90 :‫صفحه‬          ‫اصول طراحي کامپايلرها‬                  ‫گروه کامپيوتر‬
            ‫3-9-4 ساخت ‪ NFA‬از عبارات با قاعده‬

                                               ‫قاعده اول = اجتماع‬

                        ‫ماشين‬
              ‫1‬          ‫1‪M‬‬         ‫1‬

   ‫0‪q‬‬

              ‫2‬         ‫ماشين‬       ‫2‬
                         ‫2‪M‬‬


                  ‫)1‪L (M2) U L (M‬‬




‫صفحه: 19‬   ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                           ‫مثال اجتماع دو عبارت با قاعده‬

       ‫‪a‬‬                               ‫اجتماع دو عبارت ‪ a‬و = ) ‪(aUb‬‬
  ‫0‪q‬‬       ‫1‬                                                    ‫‪b‬‬



       ‫‪b‬‬
  ‫0‪q‬‬       ‫2‬                              ‫‪a‬‬
                                   ‫1‬               ‫1‬


                             ‫0‪q‬‬

                                         ‫‪b‬‬
                                   ‫2‬               ‫2‬




‫صفحه: 29‬   ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
             ‫3-9-4 ساخت ‪ NFA‬از عبارات با قاعده‬

                                                         ‫قاعده دوم=‬
                                                              ‫الحاق‬


            ‫ماشين‬                                ‫ماشين‬
   ‫0‪q‬‬        ‫1‪M‬‬           ‫1‬         ‫2‬             ‫2‪M‬‬




           ‫الحاق )2‪ L ( m1 ) , L ( M‬يا )2‪L(M1) L (M‬‬




‫صفحه: 39‬    ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                                     ‫مثال الحاق دو عبارت با قاعده‬

                                                           ‫الحاق دو عبارت ‪ a , b‬يا ‪ab‬‬


               ‫‪a‬‬                           ‫‪b‬‬
    ‫0‪q‬‬                             ‫0‪q‬‬




           ‫‪a‬‬                                   ‫‪b‬‬
  ‫0‪q‬‬                                                  ‫2‬




‫صفحه: 49‬           ‫اصول طراحي کامپايلرها‬           ‫گروه کامپيوتر‬
            ‫3-9-4 ساخت ‪ NFA‬از عبارات با قاعده‬

                                             ‫قاعده سوم- ‪kelin star‬‬




                            ‫ماشين‬
 ‫0‪q‬‬              ‫1‬           ‫1‪M‬‬         ‫1‬




             ‫‪ L (M1) kelin star‬يا * )1‪L (M‬‬




‫صفحه: 59‬   ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                      ‫مثال كلين استار يك عبارت باقاعده‬

                                               ‫كلين استار عبارت ‪ a‬يا *‪a‬‬




                             ‫‪a‬‬
 ‫0‪q‬‬              ‫1‬                      ‫1‬




                                 ‫*‪a‬‬




‫صفحه: 69‬   ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                  ‫مثال تشكيل ‪ NFA‬از عبارات باقاعده‬

                                               ‫‪a‬‬
   ‫زبان ‪(a U b)*ab‬‬                     ‫0‪q‬‬

                                              ‫‪b‬‬
                                       ‫0‪q‬‬



                                                   ‫مرحله 1‬
                  ‫‪a‬‬                       ‫‪b‬‬
  ‫‪ab‬‬       ‫0‪q‬‬             ‫1‬        ‫2‬




‫صفحه: 79‬   ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                    ‫مثال تشكيل ‪ NFA‬از عبارات باقاعده‬
                                     ‫‪a‬‬

   ‫)‪(a U b‬‬                                               ‫مرحله 2‬
                  ‫0‪q‬‬
                                     ‫‪b‬‬


                                                           ‫مرحله 3‬
                                         ‫‪a‬‬

  ‫*)‪(a U b‬‬
             ‫0‪q‬‬
                                         ‫‪b‬‬




‫صفحه: 89‬     ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                    ‫مثال تشكيل ‪ NFA‬از عبارات باقاعده‬

                                                      ‫مرحله 4‬
                             ‫‪(a / b)*ab‬‬

                ‫‪a‬‬

                                                        ‫‪b‬‬
‫شروع‬                                          ‫‪a‬‬

               ‫‪b‬‬                                       ‫پذيرش نهايي‬




  ‫صفحه: 99‬   ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                             ‫مثال يك الگو براي تحليل گر لغوي‬

                    ‫الگوي تشخيص ساختار ‪ IF‬با كمك ماشين قطعي‬

   ‫رقم يا حرف = ‪Letter‬‬

                                             ‫‪any‬‬

                         ‫‪F‬‬                                  ‫‪letter‬‬
 ‫شروع‬           ‫‪I‬‬                       ‫(‬          ‫)‬
            ‫0‬        ‫1‬       ‫2‬      ‫3‬       ‫4‬          ‫5‬             ‫6‬
                                                               ‫پذيرش نهايي‬




‫صفحه: 001‬       ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                                    ‫فصل چهارم: تحليل نحوي‬

                                               ‫اهداف رفتاري:‬
       ‫دانشجو پس از مطالعه اين فصل با مفاهيم زير آشنا خواهد شد:‬

                     ‫‪ ‬تحليل گر نحوی و خطاهای نحوی‬
                          ‫‪ ‬گرامر و گرامر مستقل از متن‬
                     ‫‪ ‬تجزيه باال به پايين و پايين به باال‬
                                          ‫‪ ‬تجزيه پيشگو‬
               ‫‪ ‬گرامرهای )1(‪ SLR ،LR ،LL‬و ‪LALR‬‬


‫صفحه: 101‬   ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                              ‫4-1 فوايد گرامرها‬

                                ‫1- نمايش دقيق و قابل فهمي براي زبان‬

   ‫2- امكان ايجاد پارسرهاي كارآمد با قابليت تشخيص ساختارهاي نحوي‬
                                                   ‫درست و دقيق‬

 ‫3- ايجاد ساختاري مناسب براي زبان جهت ترجمه صحيح و آشكارسازي‬
                           ‫خطا توسط گرامر درست طراحي شده‬

                     ‫4- سادگي اضافه نمودن ساختارهاي جديد به زبان‬




‫صفحه: 201‬    ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                              ‫4-2 تجزيه كننده‬

       ‫دريافت رشته اي از نشانه ها از تحليل گر لغوي و بررسي تعلق‬
                     ‫رشته به زبان توسط گرامر‬


       ‫انجام بررسي طبق ساختارهاي نحوي زبان و هر مرحله گزارش‬
                  ‫خطاهاي نحوي به اداره كننده خطا‬


       ‫رفع خطا براي پردازش ادامه ورودي بر اساس خطاهاي متداول‬




‫صفحه: 301‬   ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                                              ‫4-2-1 تجزيه كننده- ارتباطات‬

‫برنامه مبدا‬                      ‫نشانه‬                     ‫درخت تجزيه‬                    ‫كد مياني‬
                                           ‫تجزيه كننده‬                       ‫باقيمانده‬
              ‫تحليل گر لغوي‬
                                            ‫(پارسر)‬                     ‫جلوبندي كامپايلر‬
                               ‫درخواست‬
                              ‫نشانه بعدي‬




                                              ‫جدول نماد‬


                                 ‫موقعيت تجزيه كننده در مدل كامپايلر‬


   ‫صفحه: 401‬           ‫اصول طراحي کامپايلرها‬                ‫گروه کامپيوتر‬
                                                 ‫4-3 خطاي نحوي‬

                                                         ‫الف سطوح خطا‬


  ‫1- لغوي. مانند ديكته غلط شناسه ، كلمه كليدي يا عملگر‬
   ‫2- نحوي. مانند عبارت محاسباتي با پرانتزهاي نامتعادل‬

‫3- معنايي. مانند استفاده از عملگر با عملوندهاي ناسازگار‬
            ‫4- منطقي. مانند فراخواني بازگشتي بي نهايت‬




‫صفحه: 501‬     ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                                  ‫4-3 خطاي نحوي‬

                                       ‫ب- ويژگي اداره كننده خطاي نحوي‬




                 ‫- توانايي گزارش حضور خطاها را با وضوح و با دقت‬
‫- پوشش هر خطا با سرعت كافي به جهت امكان آشكارسازي خطاهاي بعدي‬
             ‫- عدم كاهش بيش از حد سرعت پردازش برنامه هاي صحيح‬




 ‫صفحه: 601‬     ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                              ‫4-3 خطاي نحوي‬

                               ‫ج- استراتژي هاي پوشش خطاي نحوي‬



             ‫‪-Panic Mode‬‬
             ‫‪-Phrase level‬‬
             ‫‪-Error production‬‬
             ‫‪-Global correction‬‬




‫صفحه: 701‬   ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                         ‫4-3 خطاي نحوي - ‪Panic mode‬‬

                                                              ‫ويژگي‬
                             ‫- ساده ترين روش پوشش‬
                      ‫- قابل استفاده اكثر روشهاي تجزيه‬
                        ‫- وارد حلقه بي نهايت نمي شود.‬

                                                           ‫روش كار‬

  ‫صرف نظر از يك نماد در هر مرحله تا زمان پيداشدن نشانه هماهنگ با زبان‬




‫صفحه: 801‬     ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                       ‫4-3 خطاي نحوي - ‪Phrase Level‬‬


                                     ‫- استفاده از تصحيح موضعي‬
                                                                        ‫ويژگي‬
          ‫- عدم ورود به حلقه بي نهايت با دقت در انتخاب جايگزيني‬
          ‫- ضعف در برخورد با خطاهاي اصلي قبل از نقطه تشخيص‬
                                ‫- قادر به تصحيح هر رشته ورودي‬


                                                                    ‫روش كار‬
 ‫پيشوندي از باقيمانده ورودي را جايگزين رشته اي مي نمايد كه امكان ادامه تجزيه باشد.‬




‫صفحه: 901‬       ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
               ‫4-3 خطاي نحوي - ‪Error production‬‬



                                                       ‫روش كار‬

            ‫اضافه نمودن ساختارهاي مولد خطا به زبان از قبل‬
                ‫تشخيص آنها در زمان تجزيه در رشته ورودي‬




‫صفحه: 011‬     ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                   ‫4-3 خطاي نحوي- ‪Global Correction‬‬


                                                                    ‫روش كار‬
‫انتخاب الگوريتم هاي تصحيح خطا با قابليت ايجاد كمترين تغييرات در ورودي براي رفع خطا‬




                  ‫رخ دادن حداقل تعداد درج ها، حذفها در رشته ورودي‬




‫صفحه: 111‬         ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                                        ‫4-4 گرامر مستقل از متن‬
‫مجموعه متغيرها يا غير پايانه ها‬                  ‫قوانين : اعضاي مجموعه‬
                                                       ‫)‪V*(V UΣ‬‬

                     ‫گرامر )‪G ( V , Σ , P , S‬‬   ‫اجزاي‬


                 ‫عناصر پايانه‬          ‫عنصر شروع گرامر‬

                                                                ‫ويژگي زبان‬

                ‫(اگر و تنها اگر ‪S (   L‬‬
                ‫) ‪A  u ( A  V , u  ( U V‬‬                ‫+‬


‫صفحه: 211‬      ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                   ‫4-4-1 گرامر مستقل از متن - تعاريف‬

    ‫رشته )‪ w (V U ‬يك فرم جمله ايست اگر يك‬
         ‫اشتقاق از .‪ S‬به ‪ w‬وجود داشته باشد‬                 ‫فرم جمله اي‬


         ‫رشته *‪ w‬يك جمله است اگر يك‬
        ‫اشتقاق از ‪ S‬به ‪ w‬وجود داشته باشد‬                      ‫جمله‬



    ‫زبان ‪ G‬كه با ) ‪ L(G‬نشان مي دهند، مجموعه‬                   ‫زبان‬
                 ‫{*‪ }w‬است.‬




‫صفحه: 311‬     ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
   ‫4- 4گرامر مستقل از متن نمونه اشتقاقهاي يك رشته‬

 S     AA
                                                       ababaa ‫رشته‬
 A     AAA \ bA\ Ab\ a




S  AA          S        AA         S     AA         S      AA
   aA          َ        AAAA            Aa                 aA
   aAAA                 aAAA            AAAa               aAAA
   abAAA                abAAA           AAbAa              aAAa
   abaAA                abaAA           AAbaa              abAAa
   ababAA               ababAA          AbAbaa             abAbAa
   ababaA               ababaA          Ababaa             ababAa
   ababaa               ababaa          ababaa             ababaa



114 :‫صفحه‬    ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                               ‫مثال گرامرهاي مستقل از متن‬


                                                 S  aSa \ aBa
                        S  aSdd \A
 S  aSb \ aSbb                                  B  bB \ b
                        A  bAc \ bc




            S  aS aB                S  abScB
            B  bB b                 B  bB \b




115 :‫صفحه‬    ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
          ‫4-5 عبارات باقاعده- داليل استفاده براي نحو زبان‬


‫1- عدم نياز به نمايش نوع قوي مانند گرامر براي توصيف قوانين ساده لغوي‬
                                                                ‫زبان‬
  ‫2- امكان نمايش مختصرتر و قابل فهم تري براي نشانه ها نسبت به گرامر‬

                    ‫3- ايجاد تحليل گرهاي لغوي كاراتر به صورت خودكار‬

‫4- راه مناسبي براي پيمانه سازي جلوبندي كامپايلر به دو بخش قابل مديريت‬
                               ‫با تقسيم ساختار زبان به لغوي و غيرلغوي‬



‫صفحه: 611‬     ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                     ‫4-6 تجزيه- نوع باال به پايين‬

     ‫1- سعي در يافتن سمت چپ ترين اشتقاق براي رشته ورودي دارد.‬
  ‫2- سعي در ساختن درخت تجزيه براي رشته ورودي با شروع از ريشه‬
                      ‫و ايجاد گره هاي درخت بصورت پيش ترتيب‬




       ‫1- گرامرهاي بدون عقبگرد )1( ‪LL‬‬
                                           ‫انواع پارسرهاي باال به پايين‬
                 ‫2- گرامرهاي با عقبگرد‬




‫صفحه: 711‬    ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                                  ‫4-6 تجزيه- نوع باال به پايين‬

                                   ‫تجزيه كننده بازگشتي – كاهشي ( پيشگو)‬

        ‫تهيه مجموعه اي از پايانه هايي كه در هر قانون براي يك غير پايانه در‬
                           ‫سمت راست ظاهر مي شوند.‬



                 ‫بررسي دنباله رشته ورودي بر طبق مجموعه باال‬



        ‫بررسي باال با مقايسه نماد پيش نگر در ورودي با عناصر مجموعه باال‬



‫صفحه: 811‬     ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
              ‫4-6-1 تجزيه كننده پيشگو – پياده سازي‬

                            ‫ايجاد نمودار انتقال‬


               ‫1- حذف بازگشتي چپ در گرامر در صورت وجود‬


                ‫2- ايجاد حال شروع و حالت نهايي براي گرامر‬


‫3- رسم يك مسير از حالت شروع به نهايي براي هر قانون به شكل ‪AX1, X2,…,Xn‬‬


       ‫4- دادن برچسب به لبه ها يا يالهاي مسير به صورت ‪X1,X2,…,Xn‬‬



‫صفحه: 911‬     ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                               ‫مثال تجزيه كننده پيشگو- نمودار انتقال‬

 ‫‪E ‬‬    ‫`‪TE‬‬
 ‫‪E` ‬‬    ‫‪+TE` \ ‬‬
 ‫‪T ‬‬    ‫`‪FT‬‬                          ‫‪T‬‬             ‫`‪E‬‬               ‫مرحله 1‬
                       ‫:‪E‬‬       ‫0‬           ‫1‬              ‫2‬
 ‫‪T` ‬‬   ‫‪* FT` \ ‬‬
 ‫‪F ‬‬    ‫‪(E) \ id‬‬


                                 ‫‪T‬‬          ‫‪T‬‬             ‫`‪E‬‬
                ‫:`‪E‬‬        ‫3‬            ‫4‬           ‫5‬           ‫6‬   ‫مرحله 2‬




                                     ‫‪F‬‬               ‫`‪T‬‬
                      ‫:‪T‬‬        ‫7‬           ‫8‬               ‫9‬        ‫مرحله 3‬



‫صفحه: 021‬       ‫اصول طراحي کامپايلرها‬           ‫گروه کامپيوتر‬
                     ‫مثال تجزيه كننده پيشگو- نمودار انتقال‬


                    ‫‪T‬‬            ‫‪F‬‬             ‫`‪T‬‬
    ‫:`‪T‬‬     ‫01‬            ‫11‬              ‫21‬         ‫31‬         ‫مرحله 4‬




                      ‫(‬          ‫‪E‬‬              ‫)‬               ‫مرحله 5‬
     ‫:‪F‬‬     ‫41‬             ‫51‬             ‫61‬         ‫71‬




                                     ‫‪id‬‬



‫صفحه: 121‬        ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                                                       ‫مثال تجزيه پيشگو‬

       ‫‪S  cAd‬‬                                            ‫دنباله ورودي ‪cad‬‬
       ‫‪A  ab \ a‬‬



       ‫‪S‬‬                              ‫‪S‬‬                                 ‫‪S‬‬


  ‫‪c‬‬    ‫‪A‬‬      ‫‪d‬‬              ‫‪c‬‬        ‫‪A‬‬         ‫‪d‬‬               ‫‪c‬‬       ‫‪A‬‬     ‫‪d‬‬



                                 ‫‪a‬‬          ‫‪b‬‬                       ‫‪a‬‬         ‫‪b‬‬

      ‫(الف)‬                           ‫(ب)‬                               ‫(پ)‬



‫صفحه: 221‬     ‫اصول طراحي کامپايلرها‬             ‫گروه کامپيوتر‬
                     ‫4-6-2 تجزيه كننده پيشگوي غير بازگشتي‬

                                        ‫بخشهاي يك تجزيه كننده غير بازگشتي‬

‫حاوي رشته ورودي براي تجزيه با عالمت $ در انتهاي آن‬           ‫ميانگير ورودي‬


 ‫دنباله اي از نمادهاي گرامر در هر لحظه براي تجزيه با $‬           ‫پشته‬

                                                  ‫در ته آن‬
                                                               ‫جدول تجزيه‬
‫آرايه دو بعدي عناصر ]‪ A،[A,a‬يك غير پايانه و ‪ a‬يك پايانه‬

                           ‫دنباله تجزيه شده تا آن زمان‬         ‫دنباله خروجي‬



 ‫صفحه: 321‬      ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
            ‫4-6-2 تجزيه كننده پيشگوي غير بازگشتي‬

            ‫ورودي‬            ‫‪a‬‬        ‫+‬   ‫‪b‬‬        ‫$‬

                           ‫اشاره گر‬
    ‫پشته‬

                        ‫برنامه تجزيه كننده پيشگو‬          ‫خروجي‬
     ‫‪X‬‬
     ‫‪Y‬‬
     ‫‪Z‬‬
                             ‫‪ M‬جدول تجزيه‬
     ‫$‬



‫صفحه: 421‬    ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
       ‫4-6-2 تجزيه غير بازگشتي پيشگو – عملكرد‬


      ‫1- اگر $ = ‪X= a‬باشد توقف تجزيه كننده اعالم خاتمه موفق تجزيه‬




      ‫2- اگر $ ‪ X= a ‬خروج ‪ X‬از پشته ، انتقال اشاره گر ورودي به‬
                          ‫نماد بعدي در ورودي‬



       ‫3-اگر ‪X‬يك غير پايانه باشد مراجعه به وارده در جدول ]‪[A , a‬‬
                 ‫و جايگزيني قانون مناسب آن از جدول‬




‫صفحه: 521‬     ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                        ‫مثال تجزيه كننده غير بازگشتي پيشگو‬

 E  TM
 E    TE`
 M  +TM \ \ 
 E`    +TE`
 T  FN
      FT`
 N  * * FT` \ 
 T`    FN \
 F  (E) \ \ id
      (E) id
 F                                        ‫جدول تجزيه‬

  ‫غير پايانه‬      id        +        *                (          )       $

      E        E  TE`                           E  TE`
      E`                 E`  +TE`                           E`     E`  
      T        T  FT`                           T  FT`
      T`                 T`        T` * FT`              T`      T`  
      F        F  id                            F  (E)



126 :‫صفحه‬         ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                   ‫مثال تجزيه كننده غير بازگشتي پيشگو‬
     $E                          Id + id * id$
     $E`T                        Id + id * id$               E  TE`
     $E`T`F                      Id + id * id$               T  FT`
     $E`T`id                     Id + id * id$                F  id
     $E`T`                             +id * id$
     $E`                               +id * id$               
                                                              T`
     $E`T                              +id * id$              E +TE`
     $E`T                               Id * id$
     $E`T``F                            Id * id$              T  FT`
     $E`T`id                            Id * id$              F  id
     $E`T`                                 *id$
     $E`T`F*                               *id$              T`    * FT`
     $E`T`F                                 Id$
     $E`T`id                                Id$               F     id
     $E`T`                                    $
     $E`                                      $              T`
     $                                        $              E`  


127 :‫صفحه‬      ‫اصول طراحي کامپايلرها‬               ‫گروه کامپيوتر‬
                                 ‫4-7 مجموعه ‪ Follow‬و ‪First‬‬

                                                                             ‫‪First‬‬




‫اگر رشته كه ‪ a‬هر رشته اي از نمادهاي گرامري باشد، مجموعه پايانه هايي‬
         ‫رشته هاي مشتق شده ازآنها با ‪ a‬شروع مي شوند ، )‪first (a‬است.‬

                                                                            ‫‪Follow‬‬



   ‫براي غير ‪ A‬مجموعه اي از پايانهاست كه در هر شبه جمله بالفاصله بعد از آن هستند.‬
                                                                            ‫پايانه‬



  ‫صفحه: 821‬        ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                                ‫4-7-1 محاسبه )‪Follow ( A‬‬

   ‫1- $ در )‪ Follow (S‬قرار داده مي شود كه نماد شروع گرامر است و $ نماد‬
                                 ‫انتهاي سمت راست رشته وروديست.‬

  ‫)‪First (F‬‬   ‫2- اگر قانوني به صورت ‪ A  EBF‬وجود دارد آنگاه هرچيزي در‬
                           ‫بجز ‪ ‬به مجموعه )‪ Follow (B‬اضافه مي شود.‬


 ‫3- اگر قانونهايي بشكل ‪ A  EB‬يا ‪ A  EBF‬كه )‪ First (F‬حاوي ‪ ‬باشد (‬
      ‫) هر چيزي در مجموعه )‪ Follow(A‬به )‪ Follow (B‬اضافه مي شود.‬




‫صفحه: 921‬       ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                     ‫4-7-1 محاسبه )‪First ( A‬‬

                               ‫}‪{X‬‬   ‫1- اگر ‪ X‬پايانه باشد، )‪ First (X‬برابرست با‬



            ‫2- اگر ‪ X  ‬قانون گرامر باشد، ‪ ‬به )‪ First (X‬اضافه مي شود.‬



‫3- اگر ‪ X‬غيرپايانه و ‪ X  Y1Y2…Yn‬قانون گرامر، براي هر ‪ a ,i‬در مجموعه‬
‫)‪ First(Yi‬باشد و ‪ ‬در تمام مجموعه هاي )‪ First ( Y1(…First )Yn‬قرار داشته‬
                             ‫باشد، ‪ a‬به مجموعه )‪ First (X‬اضافه مي شود.‬


‫صفحه: 031‬      ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                    First ‫ و‬Follow ‫مثال مجموعه هاي‬

 E  TM
 E    TE`
 M  +TM \ \ 
 E`    +TE`
 T  FN
      FT`
                            First (E) = First (T) = First (F) = { ( , id }
 N  * * FT` \ 
 T`    FN \
 F  (E) \ \ id
 F    (E) id
                            First (E`) = { + ,  }

                            First (T`) = { * ,  }

                            Follow (E) = Follow (E`) = { ) , $ }

                            Follow (T) = Follow (T`) = { + , ) , $ }

                            Follow (F) = { + , * , ) ,$ }



131 :‫صفحه‬      ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                                        ‫4-8 ايجاد جدول تجزيه‬

      ‫1- براي هر قانون از گرامر بصورت ‪ A  a‬مراحل 2 و 3 تكرار شود.‬



 ‫در مجموعه )‪ A  E ،First (E‬به ]‪ M[A , a‬اضافه شود.‬       ‫‪a‬‬   ‫2- براي هر پايانه‬


‫‪M[A‬‬ ‫3- اگر در )‪ First (E‬باشد، ‪ A  a‬براي هر پايانه ‪ b‬در )‪ Follow (A‬به ]‪, b‬‬
‫اضافه شود. اگر ‪ ‬در )‪ First (E‬و $ در )‪ Follow ( A‬باشد، ‪ A  a‬به , ‪M [ A‬‬
                                                          ‫]$ اضافه شود.‬



‫صفحه: 231‬      ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                                       ‫مثال جدول تجزيه‬
‫‪E ‬‬    ‫`‪TE‬‬
‫‪E` ‬‬    ‫‪+TE` \ ‬‬
‫‪T ‬‬    ‫`‪FT‬‬
‫‪T` ‬‬   ‫‪* FT` \ ‬‬
                                 ‫}‪First (TE`) = First (T) = { ( , id‬‬
‫‪F ‬‬    ‫‪(E) \ id‬‬



  ‫غير پايانه‬       ‫‪id‬‬        ‫+‬       ‫*‬             ‫(‬          ‫)‬   ‫$‬

       ‫‪E‬‬       ‫`‪E  TE‬‬                        ‫`‪E  TE‬‬




‫صفحه: 331‬          ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                        ‫4-9 شناسايي گرامر )1(‪LL‬‬

                                    ‫1- گرامري كه ابهام يا بازگشتي چپ ندارد.‬

  ‫2- اگر‪ A  E \ F‬دو قانون از ‪ G‬باشند براي هيچ پايانه اي مانند ‪ ،a‬هر دوي‬
                    ‫‪E‬و ‪ F‬رشته هاي شروع شونده با ‪ a‬توليد نمي كنند.‬

                      ‫3- حداكثر يكي از ‪ E‬و ‪ F‬مي توانند رشته تهي توليد كنند.‬

‫)‪Follow ( A‬‬   ‫رشته اي شروع شونده با پايانه هاي مجموعه‬       ‫‪E،F ‬‬     ‫4- اگر‬
                                                            ‫توليد نمي كند.‬




‫صفحه: 431‬       ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                                                   LL (1) ‫مثال گرامر‬

 E     TE`
 E`     +TE` \ 
 T     FT`
 T`    * FT` \ 
                                                   : ‫ است زيرا‬LL (1) ‫گرامر‬
 F     (E) \ id



First ( +TE`) = { + }, First (  ) , {  }  ( + ) = 
First ( E` ) = { + ,  } , follow ( E` ) = { $ , ) } , { + ,  } { $ , ) } = 
First ( *FT) = { * } , First (  ) = {  } , { * }  {  } = 
First ( T`) = {  , * } , Follow ( T`) = { $ , ) , + } , { , * }  { $ , ) + } = 
First ((E)) { ( } , First ( id ) = { id } , { ( } { id } = 




135 :‫صفحه‬       ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                                                ‫مثال گرامر )1( ‪LL‬‬

  ‫‪S  iEtSF‬‬   ‫1‬
  ‫‪Sa‬‬         ‫2‬
  ‫‪F  eS‬‬      ‫3‬
  ‫‪FS‬‬         ‫4‬
  ‫‪Eb‬‬         ‫5‬                       ‫‪i‬‬    ‫‪t‬‬     ‫‪a‬‬        ‫‪e‬‬   ‫‪b‬‬   ‫$‬
                               ‫‪S‬‬      ‫1‬           ‫2‬

                               ‫‪F‬‬                      ‫4,3‬         ‫4‬

                               ‫‪E‬‬                              ‫5‬


                                                      ‫گرامر )1( ‪ LL‬نيست.‬


‫صفحه: 631‬     ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                        ‫4-01 پوشش خطا در تجزيه پيشگو‬

                                                               ‫نوع خطا‬

       ‫1- عدم تطابق پايانه موجود در باالي پشته با نماد ورودي بعدي‬
‫2- خالي بودن وارده جدول براي غير پايانه ‪ A‬در باالي پشته و پايانه‬
                                     ‫‪ a‬بعنوان نماد ورودي بعدي‬


                                                          ‫روش پوشش خطا‬

       ‫كنار گذاردن نمادهاي ورودي بعدي تا زمان ظاهر شدن شناسه اي‬
           ‫متعلق به مجموعه اي از شناسه هاي هماهنگ كننده‬


 ‫صفحه: 731‬      ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                 ‫4-01-1 انتخاب مجموعه هماهنگ كننده‬

‫گذاردن تمام نمادهاي )‪ Follow (A‬در مجموعه هماهنگ كننده غير مجموعه‬
              ‫پايانه و بررسي ورودي تا زمان ظاهر شدن يك عضو از آن‬

‫گذاردن مجموعه نمادهاي شروع كننده ساختارهاي سطح باالتر زبان به‬
‫همراه مجموعه هماهنگ كننده ساختارهاي سطوح پايين تر زبان مانند كلمات‬
                                   ‫كليدي به اضافه مجموعه ‪ Follow‬ها‬

       ‫گذاردن مجموعه )‪ First (A‬به مجموعه هماهنگ كننده غير پايانه ‪A‬‬

‫قانونهاي توليد كننده غير پايانه تهي براي غير پايانه هاي قادر به اشتقاق‬
                                                                  ‫تهي‬


 ‫صفحه: 831‬      ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                              ‫مثال بروز خطا در تجزيه پيشگو‬

                   ‫1- در صورت خالي بودن وارده جدول ، نماد ورودي حذف‬


‫2- در صورت ورودي ‪ ( synch‬از مجموعه نشانه هاي هماهنگ كننده ‪) Follow‬‬
                     ‫خروج غير پايانه باالي پشته براي امكان ادامه تجزيه‬


    ‫3- در صورت عدم تطابق نشانه باالي پشته با نماد ورودي ، خروج نشانه از‬
                                                                   ‫پشته‬




  ‫صفحه: 931‬     ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                                 ‫مثال بروز خطا در تجزيه پيشگو‬
 ‫‪E ‬‬      ‫`‪TE‬‬
                                            ‫رشته ورودي داراي خطاي ‪)id + * id‬‬
 ‫‪E` ‬‬      ‫‪+TE` \ ‬‬
 ‫‪T ‬‬      ‫`‪FT‬‬
 ‫‪T` ‬‬     ‫‪* FT` \ ‬‬
 ‫‪F ‬‬      ‫‪(E) \ id‬‬
                                                                     ‫مرحله 1‬

 ‫غير پايانه‬      ‫‪id‬‬       ‫+‬         ‫*‬               ‫(‬            ‫)‬       ‫$‬

     ‫‪E‬‬        ‫`‪E  TE‬‬                           ‫`‪E  TE‬‬
     ‫`‪E‬‬                 ‫`‪E`  +TE‬‬                          ‫‪E`  ‬‬    ‫‪E`  ‬‬
     ‫‪T‬‬        ‫`‪T  FT‬‬                           ‫`‪T  FT‬‬
     ‫`‪T‬‬                 ‫‪T`  ‬‬      ‫`‪T` * FT‬‬              ‫‪T`  ‬‬    ‫‪T`  ‬‬
     ‫‪F‬‬        ‫‪F  id‬‬                            ‫)‪F  (E‬‬



‫صفحه: 041‬         ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                                 ‫مثال بروز خطا در تجزيه پيشگو‬

                                                                 2 ‫مرحله‬



 ‫غير پايانه‬      id       +        *          (            )     $

     E        E  TE`                     E  TE`      synch   synch
     E`               E`  +TE`                   E`   E`  
     T        T  FT` synch               T  FT`  synch synch
     T`                 T`      T` * FT`      T`   T`  
     F        F  id     synch     synch F  (E)  synch synch




141 :‫صفحه‬         ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                             ‫مثال بروز خطا در تجزيه پيشگو‬
                                                                                   3 ‫مرحله‬
     $E                            )Id *+ id$                      error , skip )
     $E                                Id *+ id$                   id is in First ( E)
     $E`T`                             Id *+ id$
     $E`T`F                            Id *+ id$
     $E`T`id                           Id *+ id$
     $E`T`                               *+ id$
     $E`T`F*                             *+ id$
     $E`T`F                               + id$                    Error M [F, + ] = synch
     $E`T`                                + id$                    F has been poped
     $E`                                  + id$
     $E`T+                                + id$
     $E`T                                   id$
     $E`T`F                                 Id$
     $E`T`id                                Id$
     $E`T`                                    $
     $E`                                      $
     $                                        $


142 :‫صفحه‬      ‫اصول طراحي کامپايلرها‬               ‫گروه کامپيوتر‬
               ‫4-11 تجزيه باال به پايين – انتقال كاهش‬



     ‫سعي در ايجاد درخت تجزيه با شروع از برگها و رفتن به سمت ريشه = كاهش‬




        ‫جايگزيني يك زيررشته خاص منطبق با سمت راست يك قانون با نماد‬
                             ‫سمت چپ همان قانون‬




‫صفحه: 341‬     ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                  ‫مثال تجزيه باال به پايين – انتقال كاهش‬
                                                ‫دنباله ورودي ‪abbcde‬‬
    ‫‪S‬‬   ‫‪ aABe‬‬
    ‫‪A‬‬   ‫‪ Abc \ b‬‬
    ‫‪B‬‬   ‫‪ d‬‬
                                   ‫‪abbcde‬‬       ‫انتقال‬
                                   ‫‪aAbcde‬‬       ‫كاهش‬
                                   ‫‪aAde‬‬         ‫انتقال‬
                                   ‫‪aABe‬‬         ‫كاهش‬
                                   ‫‪S‬‬




   ‫‪S‬‬       ‫‪aABe  aAde ‬‬        ‫‪aAbcde ‬‬   ‫اشتقاق ‪abbcde‬‬


‫صفحه: 441‬      ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
              ‫4-11-1 تجزيه انتقال كاهش - دستگيره‬

   ‫زير رشته اي منطبق بر سمت راست يك قانون و ايجاد كننده يك كاهش‬
                   ‫به غير پايانه سمت چپ آن قانون‬


                                                       ‫ويژگي دستگيره‬



      ‫زير رشته اي كه با عمل كاهش با توانايي هدايت تجزيه كننده‬
                       ‫به عنصر شروع گرامر‬



‫صفحه: 541‬    ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                                       ‫مثال دستگيره‬
                                               ‫دنباله ورودي ‪abbcde‬‬

                        ‫‪abbcde‬‬       ‫انتقال‬
 ‫‪S‬‬   ‫‪ aABe‬‬
                        ‫‪aAbcde‬‬       ‫كاهش‬
 ‫‪A‬‬   ‫‪ Abc \ b‬‬          ‫‪aAde‬‬         ‫انتقال‬
 ‫‪B‬‬   ‫‪ d‬‬                ‫‪aABe‬‬         ‫كاهش‬
                        ‫‪S‬‬




                                       ‫‪Ab‬‬
                       ‫دستگيره ها‬      ‫‪َA  Abc‬‬
                                       ‫‪Bd‬‬



‫صفحه: 641‬    ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                                                      ‫مثال دستگيره‬
                                        ‫‪(1) E  E + E‬‬
                ‫گرامر‬                   ‫‪(2) E  E * E‬‬

                                        ‫) ‪(3) E  ( E‬‬

                                        ‫‪(4) E  id‬‬

            ‫سمت راست ترين‬                ‫‪EE+E‬‬
                ‫اشتقاق‬                                          ‫مرحله 1‬
                                            ‫‪E+E*E‬‬
                                            ‫3‪ E + E * id‬‬
                                            ‫3‪ E + id2 * id‬‬
                                            ‫3‪ id1 + id2 * id‬‬


‫صفحه: 741‬     ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                                         ‫مثال دستگيره‬


                                        ‫جمله‬               ‫دستگيره‬


                                 ‫3‪id1 + id2 * id‬‬         ‫1‪id‬‬
                                 ‫3‪E + id2 * id‬‬           ‫2‪id‬‬
       ‫دستگيره ها‬
                                 ‫3‪E + E * id‬‬             ‫3‪id‬‬
                                 ‫‪E+E*E‬‬                   ‫‪E*E‬‬




‫صفحه: 841‬    ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                           ‫4-11-1-1 دستگيره- هرس نمودن‬

     ‫توانايي توليد معكوس سمت راست ترين اشتقاق‬                   ‫مزيت هرس نمودن‬


                                                                ‫مراحل هرس نمودن‬
 ‫1- اگر ‪ W‬جمله گرامر براي تجزيه باشد، آنگاه ‪ W = Yn‬شبه جمله‬
        ‫راست ‪ n‬ام از سمت راست ترين اشتقاق نامشخص .‬


         ‫2- يافتن دستگيره 1-‪ Bn‬در1-‪Yn‬و كاهش آن تا‬
              ‫بدست آمدن شبه جمله راست 2-‪.Yn‬‬


          ‫3- توقف عمليات در صورت رسيدن به عنصر‬
                      ‫شروع گرامر ‪S‬‬



‫صفحه: 941‬        ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                                         ‫مثال هرس نمودن دستگيره‬
 ‫‪(1) E  E + E‬‬

 ‫‪(2) E  E * E‬‬
                                                            ‫3‪id1 + id2 * id‬‬
 ‫) ‪(3) E  ( E‬‬
 ‫‪(4) E  id‬‬

     ‫شبه جمله راست‬            ‫دستگيره‬              ‫قانون كاهشي‬
                                             ‫‪E  id‬‬
      ‫3‪id1 + id2 * id‬‬       ‫1‪id‬‬
        ‫3‪E + id2 * id‬‬       ‫2‪id‬‬              ‫‪E  id‬‬

          ‫3‪E + E * id‬‬       ‫3‪id‬‬              ‫‪E  id‬‬
              ‫‪E+E*E‬‬         ‫‪E*E‬‬              ‫‪EE*E‬‬
                 ‫‪E+E‬‬        ‫‪E+E‬‬              ‫‪EE+E‬‬
                     ‫‪E‬‬
‫صفحه: 051‬        ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
             ‫4-11-2 مشكالت هرس نمودن دستگيره‬


   ‫1- تعيين زير رشته مناسب براي كاهش در يك شبه جمله راست‬

 ‫2- انتخاب قانون مناسب در موارد وجود دو يا بيشتر قانون با زير‬
                                  ‫رشته يكسان در سمت راست‬




‫صفحه: 151‬   ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                            ‫4-21 تجزيه انتقال كاهش با پشته‬

          ‫استفاده از پشته به منظور نگهداري نمادهاي گرامر‬
 ‫استفاده از ميانگير ورودي جهت نگهداري رشته مورد نظر براي تجزيه‬



            ‫1- انتقال صفر يا چند نماد به پشته توسط تجزيه كننده‬

                                                                 ‫روند تجزيه‬
   ‫2- ادامه مرحله 1 تا زمان پيدا شدن يك دستگيره در باالي پشته‬


‫3- كاهش دستگيره پيدا شده به سمت چپ قانون گرامري مناسب آن‬




‫صفحه: 251‬       ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                 ‫4-21-1 عمليات انتقال كاهش با پشته‬


                ‫انتقال نماد بعدي ورودي به باالي پشته‬   ‫انتقال‬

     ‫وجود انتهاي سمت راست دستگيره در باالي پشته و‬
                                                       ‫كاهش‬
      ‫يافتن سمت چپ آن و تصميم گيري براي جايگزيني‬


                  ‫اعالم تكميل موفقيت آميز عمل تجزيه‬    ‫پذيرش‬


     ‫تشخيص خطاي نحوي و فراخواني رويه پوشش خطا‬           ‫خطا‬


‫صفحه: 351‬   ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                           ‫مثال تجزيه انتقال كاهش با پشته‬
                                                       ‫‪(1) E  E + E‬‬

                        ‫گرامر‬                          ‫‪(2) E  E * E‬‬

                                                       ‫) ‪(3) E  ( E‬‬

                                                       ‫‪(4) E  id‬‬


  ‫‪EE+E‬‬
    ‫‪E+E*E‬‬
                                                     ‫رشته 3‪id1 + id2 * id‬‬
    ‫3‪ E + E * id‬‬
    ‫3‪ E + id2 * id‬‬
    ‫3‪ id1 + id2 * id‬‬



‫صفحه: 451‬    ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                  ‫مثال تجزيه انتقال كاهش با پشته‬
             ‫پشته‬                   ‫ورودي‬                         ‫عمل‬

  $                               id1 + id2 * id3 $   Shift
  $id1                                + id2 * id3 $   Reduce by E  id
  $E                                  + id2 * id3 $   Shift
  $E +                                  id2 * id3 $   Shift
  $E + id2                                  * id3 $   Reduce by E  id
  $E + E                                    * id3 $   Shift
  $E + E *                                   id3 4    Shift
  $E + E * id3                                   $    Reduce by E  id
  $E+E*E                                         $    Reduce by E  E * E
  $E+E                                           $    Reduce E  E + E
  $E                                             $    accept




155 :‫صفحه‬           ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
     ‫4- 31 تجزيه انتقال كاهش – پيشوند قابل وقوع‬


            ‫مجموعه پيشوندهاي شبه جمالت راست ظاهر شونده در‬
                     ‫پشته يك تجزيه كننده انتقال كاهش‬



                                     ‫يا‬
            ‫پيشوندي از يك شبه جمله راست عبور نكننده از انتهاي‬
              ‫راست سمت راست ترين دستگيره آن شبه جمله‬




‫صفحه: 651‬    ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                         ‫4-41 تجزيه انتقال كاهش- تناقض ها‬


  ‫ترديد در عمل انتقال يا عمل كاهش در زمان تصميم‬
                                                ‫تناقض انتقال - كاهش‬
                        ‫گيري براي تجزيه كننده‬




  ‫وجود چند قانون براي كاهش يك رشته در يك زمان‬         ‫تناقض كاهش كاهش‬




‫صفحه: 751‬    ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                          ‫4-41 تجزيه كننده عملگر اولويت‬

                                                     ‫گرامر نوع عملگر‬

                  ‫1- قوانين ‪‬نداشته باشد.‬

 ‫2- در سمت راست قوانين توليد، هيچ كدام از‬
                     ‫دو پايانه كنار هم نباشند.‬




‫صفحه: 851‬     ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                      ‫مثال عملگر اولويت – گرامر عملگر‬



  ‫‪E  EAE \ ( E ) \ - E \ id‬‬          ‫وجود دو غير پايانه در سمت راست قانون‬
  ‫\ /\-\+ ‪A ‬‬




                               ‫گرامر عملگر نيست‬




‫صفحه: 951‬     ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
         ‫4-41-1 نقطه ضعفهاي روش عملگر اولويت‬


      ‫دشوار بودن اداره نمودن نشانه هايي مانند عالمت منها با دو اولويت متفاوت‬
                                ‫( دوديي يا يگاني)‬

 ‫عدم اطمينان از نتيجه درست تجزيه به دليل رابطه نزديك بين گرامر زبان در حال تجزيه و‬
                            ‫تجزيه كننده عملگر اولويت‬


                   ‫قابليت تجزيه بر روي تنها رده كوچكي از گرامرها‬




‫صفحه: 061‬       ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
            ‫4-41-2 عملگر اولويت – تعيين اولويتها‬

        ‫تعريف 3 رابطه اولويت مجزاي بين هر زوج از پايانه ها‬


                     ‫مفهوم‬                         ‫رابطه‬
             ‫اولويت ‪ a‬كمتر از ‪ b‬است.‬             ‫‪a‬‬     ‫‪<. b‬‬

            ‫اولويت ‪ a‬و ‪ b‬يكسان است.‬              ‫‪a = b‬‬

             ‫اولويت ‪ a‬بيش از ‪ b‬است.‬              ‫‪a.> b‬‬




‫صفحه: 161‬   ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
     ‫4-41-2 عملگر اولويت روشهاي تعيين اولويت‬


            ‫1- استفاده از شركت پذيري و اولويت موجود بين خود عملگرها‬
                         ‫در زبان مانند اولويت هاي زير‬


  ‫+ >. *‬    ‫*.< +,‬


             ‫2- ايجاد گرامر غير مبهمي براي زبان و درخت تجزيه آن با‬
              ‫قابليت انعكاس شركت پذيري و اولويت صحيح بين عناصر‬
                                ‫پايانه در درخت‬




‫صفحه: 261‬   ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                                ‫مثال عملگر اولويت – تعيين اولويتها‬

‫‪E ‬‬    ‫`‪TE‬‬
‫‪E` ‬‬    ‫‪+TE` \ ‬‬
‫‪T ‬‬    ‫`‪FT‬‬
‫‪T` ‬‬   ‫‪* FT` \ ‬‬
‫‪F ‬‬    ‫‪(E) \ id‬‬                             ‫$ ‪+ * ( ) id‬‬
                                       ‫+‬    ‫>. .< >. .< .< >.‬
                                       ‫*‬    ‫>.‬     ‫>. .< >. .< >.‬
                                        ‫(‬   ‫.<‬     ‫.< = .< .<‬
                                        ‫)‬   ‫>.‬     ‫>.‬    ‫>.‬    ‫>.‬
                                      ‫‪Id‬‬    ‫>.‬     ‫>.‬    ‫>.‬    ‫>.‬
                                       ‫$‬    ‫.<‬     ‫.< .<‬    ‫= .<‬


‫صفحه: 361‬          ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                                  ‫4-41-3 استفاده از اولويت ها‬

    ‫1- قرار دادن روابط اولويت بين پايانه ها در رشته ورودي به تجزيه‬


            ‫2- قرار دادن عالمت $ ابتدا و انتهاي رشته ورودي به همراه‬
                    ‫اولويت آن نسبت به اولين پايانه و آخرين پايانه رشته‬

                                    ‫3- حذف غير پايانه ها از جمله ورودي‬


            ‫>.‬   ‫4- پويش از انتهاي چپ رشته تا رسيدن به اولين اولويت‬



‫صفحه: 461‬        ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                             ‫4-41-3 استفاده از اولويت ها‬


     ‫5- پويش به عقب ( چپ ) از همان نقطه با پشت سرگذاردن هر = تا‬
                                                    ‫رسيدن به .<‬

  ‫6- تعيين دستگيره شامل هر چيزي در سمت چپ اولين راست 5. در >.‬
                                               ‫و سمت <مرحله‬




‫صفحه: 561‬   ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                        ‫مثال استفاده از اولويت ها‬

                        ‫‪id + id * id‬‬    ‫رشته ورودي به تجزيه‬


                 ‫.$ >. ‪$ <. Id .> + <. Id .> * <. id‬‬




                ‫زمان ديدن اولين >. از سمت چپ بين اولين ‪ id‬و +‬      ‫مرحله 1:‬

            ‫پويش به عقب ردشدن از روي = در صورت وجود برخورد با‬      ‫مرحله 2:‬
                                                       ‫اولين . <‬



‫صفحه: 661‬       ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                                        ‫مثال استفاده از اولويت ها‬

 ‫مرحله 3: دستگيره بين اولين >. و .< يعني اولين ‪ id‬سمت چپ و تبديل آن به ‪E‬‬


       ‫مرحله 4: تشخيص ساير دستگيره هاي مشابه { 3‪ } id2 , id‬و باقيمانده دنباله‬
                                                         ‫ورودي به شكل‬
                            ‫$ >. * . < + .< $‬

 ‫مرحله 5: دستگيره بعدي بين + و * و انتهاي راست آن بين * و $ يعني ‪ E * E‬و تبديل‬
                                                                 ‫به ‪E‬‬

 ‫دستگيره بعدي بين + و $ يعني ‪ E + E‬و تبديل به ‪ E‬و پايان تجزيه انتقال‬   ‫مرحله6:‬
                                               ‫كاهش – عملگر اولويت‬



‫صفحه: 761‬       ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
             ‫4-41-4 عملگر اولويت – اولويتهاي بديهي‬


 ‫1- اگر عملگر ‪ A‬اولويت بيشتر از عملگر ‪ B‬داشته باشد، روابط ‪ A . > B‬و ‪B <. A‬‬
                                                        ‫بين آنها برقرار است.‬



‫2- اگر ‪ A‬و ‪ B‬عملگرهاي با اولويت يكسان باشند، اگر هر دو شركت پذير از راست هستند:‬
                       ‫‪ B <. A , A <. B‬و پركت پذير از چپ :‪B .> A , A .> B‬‬




‫صفحه: 861‬        ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
            ‫4-41-4 عملگر اولويت – اولويتهاي بديهي‬

                            ‫3- براي تمام عملگرهاي مانند ‪ A‬روابط زير برقرار است.‬

‫‪$ <. A‬‬          ‫$ >. ‪A‬‬         ‫>. ‪A‬‬       ‫)‬        ‫>. )‬    ‫‪A‬‬      ‫.< (‬    ‫‪A‬‬
‫( .< ‪A‬‬          ‫‪id .> A‬‬        ‫‪A <. id‬‬


                                                       ‫4- روابط زير هميشه برقرارند:‬

‫)=(‬         ‫(‬     ‫.<‬    ‫(‬         ‫(‬      ‫‪<. id‬‬
‫( .< $‬      ‫>. ‪id‬‬       ‫$‬        ‫>. ‪id‬‬        ‫)‬
‫‪$ <. id‬‬      ‫)‬     ‫$ >.‬            ‫)‬     ‫) >.‬



‫صفحه: 961‬        ‫اصول طراحي کامپايلرها‬            ‫گروه کامپيوتر‬
                        ‫مثال عملگر اولويت- جدول اولويت‬


  ‫1 - ‪ ( ‬توان ) باالترين اولويت و شركت پذير از‬
                                           ‫راست‬

‫2- * و / باالترين اولويت بعدي و شركت پذير از چپ‬        ‫فرضيات‬



  ‫3- + و – پايين ترين اولويت و شركت پذير از چپ‬




‫صفحه: 071‬     ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                          ‫مثال عملگر اولويت - جدول اولويت‬

      ‫$ ) ( ‪+ - * /  id‬‬
 ‫+‬    ‫>. >. .< .< .< .< .< >. >.‬
 ‫-‬    ‫>. >. .< .< .< .< .< >. >.‬
 ‫*‬    ‫>. >. .< .< .< >. >. >. >.‬                         ‫جدول اولويت ها‬
 ‫/‬    ‫>. >. .< .< .< >. >. >. >.‬
 ‫‪‬‬    ‫>.‬    ‫>.‬     ‫>.‬   ‫>.‬    ‫>. >. .< .< .<‬
 ‫‪Id‬‬   ‫>.‬    ‫>.‬     ‫>.‬   ‫>.‬    ‫>.‬       ‫>. >.‬
 ‫(‬    ‫.<‬    ‫.<‬     ‫.<‬   ‫.<‬    ‫= .< .< .<‬
 ‫)‬    ‫>.‬    ‫>.‬     ‫>.‬   ‫>.‬    ‫>.‬       ‫>. >.‬
 ‫$‬    ‫.<‬    ‫.<‬     ‫.<‬   ‫.<‬    ‫.< .< .<‬

‫صفحه: 171‬        ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                ‫4-41-5 عملگر اولويت - توابع اولويت‬

                        ‫دو تابع ‪ f‬و ‪ g‬براي كدگذاري جدول اولويت براي‬
                                                             ‫پارسر‬
            ‫‪a‬‬    ‫1- ) ‪ f( a ) <. g ( b‬هر گاه ‪<. b‬‬



              ‫2- ) ‪ f( a ) = g ( b‬هر گاه ‪a = b‬‬



             ‫3- ) ‪ f( a ) .> g ( b‬هر گاه ‪a .> b‬‬




‫صفحه: 271‬   ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                           ‫مثال عملگر اولويت - توابع اولويت‬


            ‫+‬    ‫-‬     ‫*‬     ‫/‬          ‫(‬        ‫)‬    ‫‪id‬‬        ‫$‬
     ‫‪f‬‬      ‫2‬    ‫2‬    ‫4‬     ‫4‬     ‫4‬     ‫0‬       ‫6‬      ‫6‬        ‫0‬   ‫جدول اولويت‬

    ‫‪g‬‬       ‫1‬    ‫1‬    ‫3‬     ‫3‬     ‫5‬     ‫5‬       ‫0‬      ‫5‬        ‫0‬



                      ‫‪* < . Id‬‬              ‫) ‪f ( * ) < g( id‬‬

                      ‫‪id .> id‬‬              ‫) ‪f ( id ) > g ( id‬‬




‫صفحه: 371‬       ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                ‫مثال عملگر اولويت - گراف روابط اولويت‬

        ‫+‬          ‫*‬       ‫‪Id‬‬       ‫$‬
  ‫‪f‬‬         ‫2‬      ‫4‬       ‫4‬        ‫0‬
  ‫‪g‬‬         ‫1‬      ‫3‬       ‫5‬        ‫0‬
                                         ‫)‪g (id‬‬         ‫)‪f (id‬‬


                                          ‫)*( ‪f‬‬         ‫)*( ‪g‬‬


                                          ‫)+( ‪g‬‬          ‫)+( ‪f‬‬


                                          ‫)$( ‪f‬‬         ‫)$( ‪g‬‬



‫صفحه: 471‬       ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
            ‫4-41-5 تجزيه عملگر اولويت- پوشش خطا‬

 ‫1- عدم وجود رابطه بين عنصر باالي پشته و‬
                            ‫عنصر ورودي‬
                                                         ‫انواع خطا‬
‫2- عدم تطابق مجموعه عناصر پيمايش شده در‬
     ‫پشته و آماده كاهش با هيچ كدام از قوانين‬
                                       ‫گرامر‬


   ‫در حالت اول: قرار گرفتن اشاره گرهايي به‬
                                                         ‫پوشش خطا‬
  ‫توابع رفع خطا و فراخواني آنها هنگام وقوع‬
                                       ‫خطا‬



‫صفحه: 571‬     ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                 ‫4- 51 تجزيه كننده هاي ‪LR‬‬

                                ‫داليل پر طرفداربودن تجزيه كننده هاي ‪LR‬‬


       ‫1- قابليت تشخيص ساختارهاي زبانهاي مستقل از متن‬


      ‫2- عمومي ترين روش تجزيه انتقال كاهش غير بازگشتي‬


        ‫3- توانايي تجزيه رده گرامرهاي قابل تجزيه پيش گو‬


     ‫4- سريعترين تشخيص خطاي نحوي با پويش چپ به راست‬



‫صفحه: 671‬     ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                         ‫4-51-1 تجزيه ‪ -LR‬نقاط ضعف‬



             ‫1-كار زياد در ساخت آن براي گرامر زبان بشكل دستي‬


              ‫2- نيازمند ابزار مولد تجزيه كننده ‪ LR‬براي ايجاد‬




‫صفحه: 771‬   ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                                       ‫4-51-2 تجزيه ‪ -LR‬انواع‬

                                         ‫ساده ترين‬
                                                             ‫‪ LR‬ساده يا ‪SLR‬‬
                                   ‫كمترين توانايي‬


                                       ‫قدرتمند ترين‬
  ‫جدول تجزيه متفاوت‬                                          ‫‪ LR‬متعارف يا ‪CLR‬‬
                                          ‫گرانترين‬

                                       ‫قدرت متوسط‬               ‫‪ LR‬پيش نگر‬
                                                                 ‫يا ‪LALR‬‬
                                       ‫هزينه متوسط‬
   ‫كار كم براي ايجاد و قابليت تجزيه اكثر گرامرها‬

‫صفحه: 871‬      ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                              ‫4-51-3 تجزيه ‪ - LR‬اجزاء‬

                  ‫1‪a‬‬     ‫…‬          ‫‪ai‬‬   ‫‪b‬‬      ‫…‬        ‫‪an‬‬
  ‫‪a‬‬
   ‫.‬                                                      ‫خروجي‬
   ‫.‬                        ‫برنامه تجزيه‬
   ‫.‬
  ‫‪S‬‬
                       ‫‪Action‬‬            ‫‪goto‬‬


  ‫$‬


‫صفحه: 971‬   ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                          ‫4-51-4 تصميم گيري تجزيه ‪LR‬‬
                ‫نشانه ورودي ‪a‬‬

                                          ‫تصميم گيري الگوريتم در هر لحظه‬
            ‫عنصر باالي پشته )‪(S‬‬


‫رشته اي به شكل‪ s0X1s1X2s2….Xmsm‬كه ‪ sm‬در‬
                       ‫باالي پشته قرار دارد.‬                   ‫عنصر پشته‬




                                               ‫يك نماد گرامر‬
                      ‫يك حالت تجزيه‬


‫صفحه: 081‬      ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                           ‫4-51-5 تجزيه ‪ – LR‬جدول تجزيه‬
‫تابع انتقالي ‪ ( goto‬دريافت يك حالت و نماد و توليد‬
                                     ‫حالت جديد)‬
                                                                    ‫اجزاي جدول تجزيه‬

                            ‫تابع عملكرد ‪action‬‬



       ‫]‪action [sm , ai‬‬
                                                ‫‪action‬‬          ‫‪goto‬‬
                                           ‫‪a1 a2 … ai‬‬
                                       ‫‪m‬‬



                                           ‫جدول تجزيه‬

‫صفحه: 181‬         ‫اصول طراحي کامپايلرها‬             ‫گروه کامپيوتر‬
                        ‫4-51-5 تجزيه ‪ – LR‬جدول تجزيه‬


            ‫مقادير مختلف موجود جدول براي ]‪action [ sm ,ai‬‬



    ‫‪error‬‬            ‫‪accept‬‬               ‫‪rn=reduce‬‬                  ‫‪sn = shift‬‬



 ‫خطاي نحوي‬        ‫پايان موفق تجزيه‬      ‫انجام عمل كاهش با‬      ‫‪ a‬روي پشته قرار داده‬
                                          ‫دستور ‪ n‬ام پشته‬      ‫و بعد ‪ n‬روي پشته مي‬
                                                                                 ‫رود‬



‫صفحه: 281‬       ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                      ‫4-51-6 تجزيه ‪ – LR‬روال تجزيه‬

‫1- قرار دادن رشته ورودي ‪ w‬به همراه عالمت $ در انتهاي آن در ميانگير‬
                                                            ‫ورودي‬

                            ‫2- گذاردن 0‪ s‬در پشته به عنوان اوليه حالت‬

                            ‫3- خواندن وارده جدول تجزيه براي ]$ , 0‪[s‬‬


                             ‫4- اجراي عمل در نظر گرفته شده در جدول‬
                                      ‫]‪[ shift , reduce, accept , error‬‬



‫صفحه: 381‬     ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                          ‫4-51-6 تجزيه ‪ – LR‬روال تجزيه‬
                                 ‫5- اگر پپكربندي پشته در يك لحظه بصورت:‬
‫$ ‪S0 X1 s1 X2 s2….Xm sm , ai ai+1 …. an‬‬



 ‫6- با خواندن ‪ a‬نماد ورودي جاري و ‪ s‬حالت باالي پشته مراجعه به جدول و‬
                                                     ‫انجام يك مورد :‬
‫‪Shift , reduce‬‬


                        ‫7- تبديل رشته روي پشته پس از ‪ Shift s‬بصورت :‬
‫$ ‪S0 X1 s1 X2 s2…Xm sm ai s, ai+1…an‬‬



 ‫صفحه: 481‬       ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                      ‫4-51-6 تجزيه ‪ – LR‬روال تجزيه‬

                 ‫8- تبديل رشته روي پشته پس از ‪ reduce A‬بصورت:‬
‫$ ‪S0 X1 s1 X2 s2… Xm-r sm-r A s , ai ai+1… an‬‬




                  ‫9- اعالم پايان موفق تجزيه با ديدن ‪ accept‬در جدول‬


                        ‫01- فراخواني رويه پوشش خطا با ديدن ‪error‬‬




‫صفحه: 581‬    ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                                                         LR ‫مثال تجزيه‬
1EE+T                              action                         goto
2ET                     id   +     *     (     )         $    E    T     F
3TT*F              0    s5                s4                  1     2    3
4TF                1          s6                        acc

5 F  (E)           2          r2   s7           r2       r2
6 F  id            3          r4    r4          r4       r4
                    4    s5                s4                  8     2        3

                    5          r6    r6          r6       r6
                    6    s5                s4                        9        3

                    7    s5                s4                                 10
                    8          s6               s11

                    9          r1   s7              r1    r1
                    10         r3    r3             r3    r3
                    11         r5    r5             r5    r5



186 :‫صفحه‬   ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                                                               LR ‫مثال تجزيه‬
                                                                        id * id + id ‫تجزيه‬
             ‫پشته‬                         ‫ورودي‬                        ‫عمل جدول‬
     (1) 0                                   id * id + id $       s5
     (2) 0 id 5                                   *id + id $      r5
     (3) 0 F 3                                    *id + id $      r3
     (4) 0 T 2                                    *id + id $      s7
     (5) 0 T 2 * 7                                *id + id $      s5
     (6) 0 T 2 * 7 id 5                              + id $       r5
     (7) 0 T 2 * 7 F 10                              + id $       r2
     (8) 0 T 2                                       + id $       r1
     (9) 0 E 1                                       + id $       s6
     (10) 0 E 1 + 6                                    id $       s5
     (11) 0 E 1 + 6 id 5                                  $       r5
     (12) 0 E 1 + 6 F 3                                   $       r3
     (13) 0 E 1 + 6 T 9                                   $       r9
     (14) 0 E 1                                           $       acc


187 :‫صفحه‬         ‫اصول طراحي کامپايلرها‬           ‫گروه کامپيوتر‬
                          ‫4-51-7 تفاوت گرامر ‪ LL‬و ‪LR‬‬

                                                              ‫گرامر )‪LL(K‬‬

        ‫توانايي تشخيص وقوع سمت راست يك رشته با ديدن تمام آنچه كه‬
         ‫از آن سمت راست مشتق شده ، با استفاده از ‪ K‬نماد پيش نگر‬



                                                               ‫گرامر )‪LR(K‬‬


            ‫توانايي تشخيص وقوع سمت راست تنها با ديدن اولين ‪ K‬نماد از‬
                        ‫آنچه توسط سمت راست آن مشتق شده‬



‫صفحه: 881‬       ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                                            ‫4-61 تجزيه ‪SLR‬‬

   ‫يك قلم براي ‪ LR‬قانوني از گرامر با يك نقطه در‬        ‫تعريف يك قلم‬
             ‫مكاني در سمت راست آن‬



                                             ‫مثال اقالم مختلف قانون‬
    ‫‪A  XYZ‬‬                   ‫‪A  . XYZ‬‬
                              ‫‪A  X .YZ‬‬
                              ‫‪A  XY .Z‬‬
                              ‫.‪A  XYZ‬‬


‫صفحه: 981‬    ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                      ‫4-61 تجزيه ‪ SLR‬تقسيم بندي اقالم‬


    ‫شامل قلم اوليه ‪ S`  S‬و تمام اقالمي كه‬               ‫اقالم هسته‬
              ‫نقطه آنها در انتهاي چپ نيست.‬



            ‫اقالمي كه نقطه در انتهاي چپ است.‬           ‫اقالم غير هسته‬




‫صفحه: 091‬      ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                           ‫4-61-1 تجزيه ‪-SLR‬ايجاد قلم‬

 ‫‪S  AaAb‬‬
 ‫‪S  BbBa‬‬                      ‫مرحله1: تعيين يك نقطه شروع براي گرامر‬
 ‫‪A‬‬
 ‫‪B‬‬                          ‫‪S` S‬‬
                              ‫‪S  AaAb‬‬
                              ‫‪S  BbBa‬‬
                              ‫‪A‬‬
                              ‫‪B‬‬
‫‪S` . S‬‬
‫‪S  .AaAb‬‬
‫‪S  .BbBa‬‬                      ‫مرحله2: گذاردن نقطه در اولين مكان سمت‬
‫.‪A‬‬                                                     ‫راست قانونها‬
‫.‪B‬‬



‫صفحه: 191‬   ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                             ‫4-61-1 تجزيه ‪-SLR‬ايجاد قلم‬
            ‫مرحله3: گذاردن نقطه در مكانهاي بعدي در سمت راست قانونها‬


                           ‫‪S  Aa .Ab‬‬
    ‫. ‪S` S‬‬                                      ‫‪S  AaA .b‬‬
                           ‫‪S  Bb .Ba‬‬
    ‫‪S  A .aAb‬‬                                   ‫‪S  BbB .a‬‬
                           ‫.‪A‬‬
    ‫‪S  B .bBa‬‬
                           ‫.‪B‬‬



                            ‫. ‪S  AaAb‬‬
                            ‫. ‪S  BbBa‬‬




‫صفحه: 291‬     ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                       ‫4-61-2 تجزيه ‪ - SLR‬گروه اقالم‬


      ‫گروه اقالم )0(‪ LR‬يا گروه )0(‪ LR‬متعارف فراهم كننده مبناي‬
                     ‫ساخت تجزيه كننده هاي ‪SLR‬‬




            ‫ساخت به وسيله دو تابع ‪ closure‬و ‪ goto‬به‬
                       ‫همراه گرامر افزوده‬




‫صفحه: 391‬    ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                            ‫4-61-2 تجزيه ‪ - SLR‬گروه اقالم‬



‫1- اضافه شدن هر قلم موجود در مجموعه اقالم ‪ I‬به مجموعه ‪closure‬‬


                                                                ‫تابع ‪closure‬‬

‫2- اضافه شدن قلم ‪ B  .K‬درصورت وجود‪ A  M .BN‬در‪closure‬‬
                               ‫و وجود قانون ‪ B  K‬در گرامر‬




 ‫صفحه: 491‬        ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                                ‫مثال تجزيه ‪ - SLR‬گروه اقالم‬

‫‪E` E‬‬                        ‫يك گروه قلم داده شده } ]‪I ={ [E`  .E‬‬
‫‪EE+T\T‬‬
‫‪TT*F\T‬‬
‫‪F  (E) \ id‬‬                    ‫‪E`  .E‬‬
                                ‫‪E  .E + T‬‬
                                ‫‪E  .T‬‬
      ‫= )‪Closure (I‬‬
                                ‫‪T  .T * F‬‬
                                ‫‪T  .F‬‬
                                ‫)‪F  .(E‬‬
                                ‫‪F  id‬‬



‫صفحه: 591‬      ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                       ‫4-61-2 تجزيه ‪ - SLR‬اقالم معتبر‬


   ‫يك قلم به صورت 2‪ A  B1.B‬براي پيشوند قابل وقوع 1‪ MB‬معتبر است اگر:‬




                          ‫*‬
      ‫اشتقاقي به صورت ‪ S`  M A W * M B1B2 W‬وجود داشته باشد.‬




‫صفحه: 691‬     ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                                   ‫مثال تجزيه ‪ - SLR‬اقالم معتبر‬
 ‫‪E` E‬‬
 ‫‪EE+T\T‬‬
 ‫‪TT*F\T‬‬                                             ‫1‬
 ‫‪F  (E) \ id‬‬
                            ‫يك پيشوند قابل وقوع‬                ‫*‪E+T‬‬

                        ‫4‬
                                            ‫كه پس از خواندن آن رفتن به حالت 7‪I‬‬

                                 ‫‪T  T * .F‬‬          ‫2‬

‫اقالم معتبر براي‬       ‫3‬     ‫)‪I7: F  .(E‬‬
                                 ‫‪F  .id‬‬




 ‫صفحه: 791‬         ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                          ‫4-61-2 تجزيه ‪ - SLR‬گروه اقالم‬


 ‫مجموعه ‪ closure‬بر روي مجموعه ]‪ [A  Q X K‬با‬
         ‫شرط وجود ]‪ A  [ Q . X K‬در ‪. I‬‬

                         ‫يا‬                                  ‫تابع‬
                                                         ‫) ‪goto(I , X‬‬
‫مجموعه اي از اقالم معتبر براي پيشوند قابل وقوع ‪ R X‬با‬
       ‫وجود مجموعه اقالم معتبر براي ‪ R‬در ‪. I‬‬
                                                         ‫نماد مجموعه‬
                                                          ‫گرامر اقالم‬




 ‫صفحه: 891‬      ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                                ‫مثال تجزيه ‪ - SLR‬گروه اقالم‬

‫‪E` E‬‬                  ‫گروه قلم داده شده } ]‪I ={ [E`  E.] , [ E`  E. + T‬‬
‫‪EE+T\T‬‬
‫‪TT*F\T‬‬
‫‪F  (E) \ id‬‬

                               ‫‪EE+.T‬‬
                               ‫‪T  .T * F‬‬
      ‫= )+ , ‪goto (I‬‬           ‫‪T  .F‬‬
                               ‫)‪F  .(E‬‬
                               ‫‪F  .id‬‬




‫صفحه: 991‬      ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
     ‫4-61-2 تجزيه ‪ - SLR‬ايجادگروه اقالم)0(‪LR‬‬


       ‫1- گذاردن }] ‪ closure { [ S`  .S‬در مجموعه گروه ‪C‬‬


     ‫2- براي هر مجموعه اقالم ‪ I‬در ‪ C‬و هر نماد مانند‪ X‬انجام بده:‬


   ‫2- 1- اگر )‪ goto ( I , X‬تهي نيست و در ‪ C‬نيست انجام بده:‬


     ‫2-1-1- )‪ goto ( I , X‬را به ‪ C‬اضافه كن.‬
                                                  ‫عقبگرد، تا زماني كه هيچ‬
                                                  ‫مجموعه باي اضافه شدن‬
                                                                     ‫نمانده‬

‫صفحه: 002‬    ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                            ‫ - ايجادگروه اقالم‬SLR ‫مثال تجزيه‬
      E`  .E
                                  E  T.
                            I2:
      E  .E + T                                                 E` E
                                  T  T. * F
                                                                 EE+T\T
      E  .T
I0:                                                              TT*F\T
                            I3:   T  F.
      T  .T * F                                                 F  (E) \ id

      T  .F                      F  (.E)
      F  .(E)                    E  .E + T
      F  .id                     E  .T
                            I4:                                I5:   F  id.
                                  T  .T * F
      E`  E.                     T  .F
I1:
      E  E. + T                  F  .(E)

                                  F  .id

 201 :‫صفحه‬         ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                          ‫ - ايجادگروه اقالم‬SLR ‫مثال تجزيه‬
    E  E + .T
                                                     E` E
I6: T  .T * F      I8:
                          F  (E.)
                                                     EE+T\T
    T  .F                E  E. + T                 TT*F\T
    F  .(E)                                         F  (E) \ id

    F  .id
                    I9:   E  E + T.

                          T  T. * F
                                              I11:    F  (E).

    T  T * .F
I7: F  .(E)        I10: T  T * F.

    F  .id



 202 :‫صفحه‬       ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                        ‫ - ايجادگروه اقالم‬SLR ‫مثال تجزيه‬
S` S                        I3: S  R.          I7: L  *R.
S  L=R \ R
L  * R \ id
RL                          I4: L  *.R         I8: R  L.


I0: S`  .S
                             I5: L  id.         I9: S  L=R.
I1: S`  S.


I2: R  L.=R                I6: S  L=.R
   R  L.


203 :‫صفحه‬      ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
              ‫4-61-2 تجزيه ‪ - SLR‬ايجاد جدول تجزيه‬
‫1- ايجاد گروه مجموعه هاي اقالم براي گرامر افزوده `‪ ( G‬با يك نقطه شروع مانند `‪) S‬‬
                            ‫بصورت { ‪C = { I0 , I1 ,…In‬‬


‫2- ساختن حالت ‪ i‬از ‪ ( Ii‬مانند 2‪ ،)I‬تعيين ‪ 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‬‬


‫صفحه: 402‬       ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
             ‫4-61-2 تجزيه ‪ - SLR‬ايجاد جدول تجزيه‬

  ‫3 - ايجاد تغيير حالتهاي ‪ goto‬براي حالت ‪ i‬و براي تمام غير پايانه هاي ‪ A‬با استفاده‬
              ‫از قانون : اگر ‪ goto ( Ii , A ) =Ij‬آنگاه ‪goto ( I , A ) = j‬‬



    ‫4– گذاردن ‪ error‬براي تمام ورودي هاي تعريف نشده با قوانين 2 و 3 الگوريتم‬




     ‫5 - ايجاد حالت اوليه تجزيه كننده با استفاده از مجموعه اقالم حاوي ]‪[S`  .S‬‬




‫صفحه: 502‬       ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                        ‫ - ايجاد جدول تجزيه‬SLR ‫مثال تجزيه‬
                              E` .E
 E` E
                              E  .E + T                                  1 ‫مرحله‬
 EE+T\T
 TT*F\T                I0:   E  .T                  no action
 F  (E) \ id
                              T  .T * F

                              T  .F
                                                 action [ 0 , ( ] = shift 4
                              F  .(E)
                                                 action [ 0 , id] = shift 5
                              F  .id



      E` E.             action [ 1, $ ] = accept                             2 ‫مرحله‬
I1:
      E  E. + T         action [ 1 , + ] = shift 6



 206 :‫صفحه‬         ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                      ‫مثال تجزيه ‪ - SLR‬ايجاد جدول تجزيه‬

                                   ‫} ) ,+ , $ { = )‪Follow (E‬‬           ‫مرحله 3‬




                         ‫‪action [ 2 , $ ] = action [ 2 , + ]=action‬‬
         ‫.‪E  T‬‬          ‫‪[ 2 , ) ] = reduce E T‬‬
   ‫:2‪I‬‬
         ‫‪T  T. * F‬‬      ‫7 ‪action [ 2 , * ] = shift‬‬
                                                                               ‫.‬
                                                                               ‫.‬
                                                 ‫ادامه مراحل مطابق نمونه ها.‬
                                                                               ‫.‬



‫صفحه: 702‬     ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                           ‫4-71 تجزيه ‪ -CLR‬تعريف قلم‬

                                                      ‫‪[A‬‬    ‫]‪Q.K , a‬‬

 ‫شكل عمومي يك قلم كه ‪ A  QK‬يك قانون در‬
 ‫گرامر و ‪ a‬يك پايانه يا عالمت انتهاي سمت راست‬
                           ‫رشته ورودي )$( .‬


                                                           ‫عملكرد‬

  ‫اعالم كاهش با ‪ Q‬در زمان مشاهده ‪ a‬به عنوان‬
                           ‫نماد ورودي بعدي‬


‫صفحه: 802‬    ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                    ‫4-71 تجزيه ‪-CLR‬پيشوند قابل وقوع‬

            ‫شرايط قلم معتبر ]‪ [A  Q.K , a‬براي يك پيشوند قابل وقوع ‪y‬‬


                            ‫*‬     ‫*‬
                      ‫1- وجود اشتقاق ‪ S  &AW  &QKW‬كه:‬


                             ‫‪ y = &Q‬و‬

   ‫يا ‪ a‬اولين نماد ‪ W‬يا ‪ W‬برابر تهي و ‪a‬‬
                               ‫برابر $‬




‫صفحه: 902‬       ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
    ‫4-71 تجزيه ‪ -CLR‬ايجاد مجموعه اقالم)1(‪LR‬‬
                                                              ‫محاسبه ‪closure‬‬


         ‫1- براي هر قلم مثل ]‪ [A  Q.BK , a‬در مجموعه ‪ I‬انجام بده :‬



   ‫براي قانونهاي مانند ‪ B  y‬در گرامر و هر پايانه مانند ‪ b‬در )‪:First (K‬‬



            ‫اگر قلم ]‪ [B  .y , b‬در ‪ I‬نيست آنرا اضافه كن‬


                                                              ‫برگشت به مرحله 1‬
                                                               ‫اگر قلمي باقيمانده‬

‫صفحه: 012‬      ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
               ‫4-71 تجزيه ‪ -CLR‬ايجاد مجموعه اقالم‬

                                                           ‫محاسبه ‪goto‬‬


‫‪ J‬را مساوي مجموعه قلمهاي ]‪ [A  QX.K , a‬كه در ‪ I‬موجودند، در نظر بگير‬




                   ‫)‪ closure ( J‬را برگردان.‬




‫صفحه: 112‬      ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
               ‫4-71 تجزيه ‪ -CLR‬ايجاد مجموعه اقالم‬

                                                                ‫محاسبه )`‪item (G‬‬


    ‫} )} $ , ‪ C= { closure ( { S`  .S‬قرار ده و تكرار كن :‬


      ‫براي هر مجموعه از اقالم ‪ I‬در ‪ C‬و هر نماد گرامر مانند ‪:X‬‬


       ‫اگر )‪ goto ( I , X‬تهي نبوده و در ‪ C‬نيست انجام بده:‬

                 ‫)‪ goto ( I , X‬را به ‪ C‬اضافه كن.‬
                                                                        ‫برگشت‬
                                                                       ‫اگر قلمي‬
                                                                       ‫باقيمانده‬

‫صفحه: 212‬      ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                   ‫- ايجاد مجموعه اقالم‬CLR ‫مثال تجزيه‬
 S` S
 S  CC
 C  cC \d
                                 S  C.C , $
                            I2
                                 C  .cC , $
     S` .S , $                                               I4   C  d. , c \ d
                                 C  .d , $
I0   S  .CC , $
     C  .cC , c \ d

     C  .d , c \ d                                           I5   S  CC. , $
                                 C  c.C , c \ d
                           I3    C  .cC , c \ d

I1   S`  S. , $                 C  .d , c \ d



 213 :‫صفحه‬     ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
                    ‫مثال تجزيه ‪ -CLR‬ايجاد مجموعه اقالم‬

       ‫$ , ‪C  c.C‬‬
  ‫6‪I‬‬   ‫$ , ‪C  .cC‬‬                    ‫9‪I‬‬   ‫$ , .‪C  cC‬‬

       ‫$ , ‪C  .d‬‬


  ‫7‪I‬‬   ‫$ , .‪C  d‬‬



                                      ‫خاتمه كار بدليل نتيجه ندادن ساير اقالم.‬
 ‫8‪I‬‬    ‫‪C  cC. , c \ d‬‬




‫صفحه: 412‬     ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                ‫مثال تجزيه ‪ -CLR‬ايجاد مجموعه اقالم‬
            ‫‪S‬‬
      ‫0‪I‬‬               ‫1‪I‬‬                               ‫گراف ‪ goto‬براي مثال‬

            ‫‪C‬‬                       ‫‪C‬‬
                       ‫2‪I‬‬                     ‫5‪I‬‬

                                          ‫‪c‬‬
                                    ‫‪c‬‬                   ‫‪C‬‬
                                              ‫6‪I‬‬                ‫9‪I‬‬
                                                   ‫‪d‬‬
                                    ‫‪d‬‬
                                              ‫7‪I‬‬
                     ‫‪c‬‬
            ‫‪c‬‬                       ‫‪C‬‬
                       ‫3‪I‬‬                     ‫8‪I‬‬
                            ‫‪d‬‬
            ‫‪d‬‬
                       ‫4‪I‬‬

‫صفحه: 512‬   ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
                ‫4-71 تجزيه ‪ -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‬‬



    ‫‪ action [ I , a ] = reduce A‬درصورت وجود ]‪[A  Q. , a‬‬            ‫ب- ‪a‬‬
                            ‫در ‪ Ii‬و `‪A = S‬‬



‫صفحه: 612‬      ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                ‫4-71 تجزيه ‪ -CLR‬ساخت جدول تجزيه‬

        ‫پ- ‪ action [ i , $]= accept‬در صورت وجود ]$ , .‪ [S`  S‬در ‪Ii‬‬



                   ‫3- ‪ goto ( i , a) = j‬اگر ‪goto ( Ii , A ) = Ij‬‬



   ‫4- قرار گرفتن ‪ error‬براي تمام ورودي هاي تعريف نشده با قوانين 2 و3 الگوريتم‬



            ‫قرار دادن حالت اوليه تجزيه كننده مساوي حالت بدست آمده از‬
                           ‫مجموعه حاوي ]$ , ‪[S`  .S‬‬



‫صفحه: 712‬      ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                 ‫مثال تجزيه ‪ -CLR‬ساخت جدول تجزيه‬
                                      ‫‪action‬‬                ‫‪goto‬‬
‫‪1 S` S‬‬                      ‫‪c‬‬          ‫‪d‬‬             ‫$‬     ‫‪S‬‬   ‫‪C‬‬
‫‪2 S  CC‬‬              ‫0‬       ‫3‪s‬‬         ‫4‪s‬‬                 ‫1‬      ‫2‬
‫‪3 C  cC \d‬‬           ‫1‬                              ‫‪acc‬‬
                      ‫2‬       ‫6‪s‬‬         ‫7‪s‬‬                        ‫5‬
                      ‫3‬       ‫3‪s‬‬         ‫4‪s‬‬                        ‫8‬
                      ‫4‬       ‫3‪r‬‬         ‫3‪r‬‬

                      ‫5‬                                ‫1‪r‬‬
                      ‫6‬       ‫6‪s‬‬         ‫7‪s‬‬                        ‫9‬

                      ‫7‬                                ‫3‪r‬‬

                      ‫8‬       ‫2‪r‬‬         ‫2‪r‬‬

                      ‫9‬                                ‫2‪r‬‬




‫صفحه: 812‬     ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
            ‫4-81 تجزيه ‪ -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‬‬




‫صفحه: 912‬      ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
             ‫4-81 تجزيه ‪ -LALR‬ساخت جدول تجزيه‬

   ‫ب- ‪ action [ I , a ] = reduce A  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‬‬
                                  ‫مشابه هستند.‬


‫صفحه: 022‬       ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
            ‫4-81 تجزيه ‪ -LALR‬ساخت جدول تجزيه‬


      ‫ب اگر ‪ K‬اجتماع تمام مجموعه اقالم ( ‪ ) I0 I1…Ik‬باشد كه دراي قلمهاي هسته‬
                   ‫مانند )‪ goto(I1, X‬هستند، ‪goto (J,X)=X‬‬




‫صفحه: 122‬      ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                  ‫مثال تجزيه ‪ -LALR‬ساخت جدول تجزيه‬

‫‪1 S` S‬‬
‫‪2 S  CC‬‬                           ‫ادغام مجموعه هاي اقالم و جايگزين شدن با‬
‫‪3 C  cC \d‬‬
                                                                ‫اجتماعشان‬


        ‫6‪I3 , I‬‬                     ‫7‪I4 , I‬‬                   ‫9‪I8 , I‬‬



 ‫$ \ ‪C  c.C , c \ d‬‬           ‫$ \ ‪C  d. , c\ d‬‬        ‫$ \ ‪C  cC. , c \ d‬‬

 ‫$ \ ‪C  .cC, c \ d‬‬
 ‫$ \ ‪C  .d , c \ d‬‬



‫صفحه: 222‬         ‫اصول طراحي کامپايلرها‬       ‫گروه کامپيوتر‬
            ‫مثال تجزيه ‪ -LALR‬ساخت جدول تجزيه‬

                           ‫‪action‬‬               ‫‪goto‬‬
                    ‫‪c‬‬          ‫‪d‬‬       ‫$‬        ‫‪S‬‬    ‫‪C‬‬

            ‫0‬      ‫63‪s‬‬         ‫74‪s‬‬              ‫1‬    ‫2‬
            ‫1‬                          ‫‪acc‬‬
            ‫2‬      ‫63‪s‬‬         ‫74‪s‬‬                   ‫5‬
            ‫63‬     ‫63‪s‬‬         ‫74‪s‬‬                   ‫98‬
            ‫74‬      ‫3‪r‬‬         ‫3‪r‬‬      ‫3‪r‬‬
            ‫5‬                          ‫1‪r‬‬
            ‫98‬      ‫2‪r‬‬          ‫2‪r‬‬     ‫2‪r‬‬




‫صفحه: 322‬   ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
            ‫مثال پوشش خطا در تجزيه ‪ LR‬و ‪LALR‬‬

                                                ‫برخورد با خطا در تجزيه ‪LR‬‬
     ‫4‪0c3c3d‬‬
                                                      ‫ورودي داراي خطاي $‪ccd‬‬
                                 ‫‪action‬‬        ‫‪goto‬‬
        ‫پشته‬                    ‫‪[ 4, $ ]= e‬‬




                                                              ‫آشكارسازي خطا‬

                       ‫تشخيص خطا در يك مرحله‬


‫صفحه: 422‬      ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
              ‫مثال پوشش خطا در تجزيه ‪ LR‬و ‪LALR‬‬

    ‫74 ‪0 c 36 c 36 d‬‬                         ‫برخورد با خطا در تجزيه ‪LALR‬‬

                   ‫‪action‬‬       ‫‪goto‬‬               ‫ورودي داراي خطاي $‪ccd‬‬
       ‫پشته‬       ‫3‪[47,$]= r‬‬
                  ‫‪Cd‬‬                         ‫98 ‪0 c 36 c 36 C‬‬
                   ‫2‪[89,$]=r‬‬
                   ‫.‪C  cC‬‬

                                                 ‫98 ‪0 c 36 C‬‬

‫آشكارسازي خطا‬             ‫2‪0C‬‬           ‫.…‬



                   ‫تشخيص خطا پس از چند كاهش‬

  ‫صفحه: 522‬     ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
   ‫4-81 تجزيه ‪ -LALR‬ساخت جدول تجزيه بهينه‬

                               ‫چند اصالح در الگوريتم ساخت جدول تجزيه‬


            ‫1- نشان دادن مجموعه اي از اقالم ‪ I‬با هسته آن‬


      ‫2- بدست آوردن بخش تابع ‪ action‬تنها بوسيله هسته‬


   ‫3- نحوه محاسبه تغيير حالتهاي ‪ goto‬با استفاده از هسته‬



‫صفحه: 622‬    ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
             ‫4-81 تجزيه ‪ -LALR‬تعيين پيش نگرها‬


      ‫1- براي هر قلم مانند ‪ B  y.V‬در مجموعه هسته يا ‪ K‬انجام بده:‬


                                     ‫2-)}]# , ‪J` := closure ({[B  y.v‬‬


                      ‫#=‪a‬‬    ‫3- اگر ]‪ [A  M.XN , a‬در`‪ J‬نبوده و‬

       ‫4- توليد نماد پيش نگر ‪ a‬براي قلم ‪ A  MX.N‬در )‪goto ( I , X‬‬




‫صفحه: 722‬    ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
            ‫4-81 تجزيه ‪ -LALR‬تعيين پيش نگرها‬


         ‫5 -اگر ]# , ‪ [A  M.XN‬در مجموعه `‪ J‬نيست، پيش نگرها‬
      ‫از‪ B  y.v‬در مجموعه ‪ I‬به ‪ A  MX.N‬در )‪ goto ( I , X‬انتشار‬
                                ‫مي يابند.‬




‫صفحه: 822‬   ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
      ‫4-81 ‪ -LALR‬محاسبه هسته هاي گروه اقالم‬

             ‫1- ساختن هسته اقالم ‪ LR‬بخش تجزيه ‪)LR‬‬

        ‫2-اجراي الگوريتم تعيين پيش نگر بر روي هسته هر‬
               ‫مجموعه از اقالم ‪ LR‬و نماد گرامر‪X‬‬


        ‫3- تشكيل و مقداردهي جدول معين كننده پيش نگرها‬
            ‫كه براي هر قلم هسته در هر مجموعه اقالم‬


            ‫4- تكرار چند گذر بر روي هر مجموعه اقالم‬



‫صفحه: 922‬    ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
      ‫4-81 ‪ -LALR‬محاسبه هسته هاي گروه اقالم‬

        ‫5- مراجعه به آن دسته اقالم هسته كه ‪ i‬پيش نگرهاي خود‬
              ‫را منتشر مي سازد، هنگام مشاهده هر قلم.‬


        ‫6- استفاده از اطالعات ثبت شده توسط مرحله 2 و اضافه‬
        ‫نمودن مجموعه جاري پيش نگرها براي ‪ i‬به پيش نگرهايي‬
                              ‫مرحله قبل‬


                          ‫7- تكرار مرحله 4-6‬



‫صفحه: 032‬    ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
          ‫مثال ‪ -LALR‬محاسبه هسته هاي گروه اقالم‬

‫‪S` S‬‬
                                       ‫مرحله 1 : بدست آوردن اقالم ‪LR‬‬
‫‪S  L=R \ R‬‬
                      ‫.‪I3: S  R‬‬
‫‪L  * R \ id‬‬
                                           ‫:7‪I‬‬    ‫.‪L  *R‬‬
‫‪RL‬‬
                     ‫‪I4: L  *.R‬‬
                                           ‫:8‪I‬‬    ‫.‪R  L‬‬
‫‪I0: S`  .S‬‬

‫.‪I1: S`  S‬‬          ‫.‪I5: L  id‬‬
                                           ‫:9‪I‬‬    ‫.‪S  L=R‬‬
‫‪I2: R  L.=R‬‬
                     ‫‪I6: S  L=.R‬‬
    ‫.‪R  L‬‬


‫صفحه: 132‬      ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
           ‫مثال ‪ -LALR‬محاسبه هسته هاي گروه اقالم‬

                                   ‫مرحله 2 : اجراي الگوريتم محاسبه پيش‬
                                                                 ‫نگرها‬

                                     ‫# , ‪S .S‬‬
                                     ‫# , ‪S  .L=R‬‬
                                     ‫# , ‪S  .R‬‬
‫)}]# , ‪Closure ( {[S`  .S‬‬           ‫= \ # , ‪L  .*R‬‬
                                     ‫= \ # , ‪L  .id‬‬
                                     ‫# , ‪R  .L‬‬




 ‫صفحه: 232‬       ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
            ‫مثال ‪ -LALR‬محاسبه هسته هاي گروه اقالم‬
                            ‫مرحله 3 : انتشار پيش نگرها در بين اقالم هسته‬

                ‫از‬                                        ‫به‬
      ‫:0‪I‬‬    ‫‪S`  .S‬‬                   ‫:1‪I‬‬   ‫.‪S`  S‬‬
                                       ‫:2‪I‬‬   ‫‪R  L.=R‬‬
                                             ‫.‪R  L‬‬
                                   ‫:3‪I‬‬       ‫.‪S  R‬‬
                                       ‫:4‪I‬‬   ‫‪L  *.R‬‬
                                       ‫:5‪I‬‬   ‫.‪L  id‬‬

      ‫:2‪I‬‬    ‫‪R  L.=R‬‬                  ‫‪I6: S  L=.R‬‬



‫صفحه: 332‬      ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
        ‫مثال ‪ -LALR‬محاسبه هسته هاي گروه اقالم‬
              ‫از‬                                        ‫به‬
      ‫:4‪I‬‬   ‫‪L  *.R‬‬                  ‫:4‪I‬‬   ‫‪L  *.R‬‬
                                     ‫:5‪I‬‬   ‫.‪L  id‬‬
                                     ‫:7‪I‬‬   ‫.‪L  *R‬‬
                                     ‫:8‪I‬‬   ‫.‪R  L‬‬

      ‫‪I6: S  L=.R‬‬                   ‫:4‪I‬‬   ‫‪L  *.R‬‬
                                     ‫:5‪I‬‬   ‫.‪L  id‬‬
                                     ‫:8‪I‬‬   ‫.‪R  L‬‬
                                     ‫.‪I9: S  L=R‬‬



‫صفحه: 432‬    ‫اصول طراحي کامپايلرها‬          ‫گروه کامپيوتر‬
           ‫مثال ‪ -LALR‬محاسبه هسته هاي گروه اقالم‬
                         ‫مرحله 4 : مقداردهي جدول پيش نگرها و انجام گذرها‬
                                                  ‫پيش نگرها‬
  ‫مجموعه‬    ‫قلم‬                   ‫‪INIT‬‬    ‫1‪PASS‬‬         ‫2‪PASS‬‬   ‫3‪PASS‬‬

  ‫‪I0: S`  .S‬‬                      ‫$‬       ‫$‬               ‫$‬     ‫$‬

  ‫.‪I1: S`  S‬‬                              ‫$‬               ‫$‬     ‫$‬

  ‫‪I2: R‬‬   ‫‪ L.=R‬‬                           ‫$‬               ‫$‬     ‫$‬
  ‫:2‪I‬‬   ‫.‪R  L‬‬                             ‫$‬               ‫$‬     ‫$‬
  ‫:3‪I‬‬   ‫.‪S  R‬‬                             ‫$‬               ‫$‬     ‫$‬

  ‫:4‪I‬‬   ‫‪L  *.R‬‬                     ‫=‬     ‫$=‬            ‫$=‬      ‫$=‬
  ‫:5‪I‬‬   ‫.‪L  id‬‬                     ‫=‬     ‫$=‬            ‫$=‬      ‫$=‬

  ‫:6‪I‬‬   ‫‪S  L=.R‬‬                                           ‫$‬     ‫$‬

  ‫:7‪I‬‬   ‫.‪L  *R‬‬                            ‫=‬               ‫$=‬   ‫$=‬

  ‫:8‪I‬‬   ‫.‪R  L‬‬                             ‫=‬               ‫$=‬   ‫$=‬

  ‫:9‪I‬‬   ‫.‪S  L=R‬‬                                                 ‫$‬


‫صفحه: 532‬         ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                    ‫4-81 ‪ -LALR‬فشرده سازي جدول‬


            ‫مشابه بودن سطرهاي زيادي از جدول ‪action‬‬


                    ‫فشرده سازي جدول ‪action‬‬



      ‫فشرده سازي فيلد ‪ action‬و ايجاد يك ليست حالت براي آن‬




‫صفحه: 632‬    ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                         ‫- فشرده سازي جدول‬LALR ‫مثال‬
1EE+T                              action                         goto
2ET                      id   +    *     (     )         $    E    T     F
3TT*F              0     s5               s4                  1     2    3
4TF                1          s6                        acc

5 F  (E)           2          r2   s7           r2       r2
6 F  id            3          r4    r4          r4       r4
                    4     s5               s4                  8     2        3

                    5          r6    r6          r6       r6
                    6     s5               s4                        9        3

  1 ‫مرحله‬           7     s5               s4                                 10
                    8          s6               s11

                    9          r1   s7              r1    r1
                    10         r3    r3             r3    r3
                    11         r5    r5             r5    r5



237 :‫صفحه‬   ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                              ‫مثال ‪ -LALR‬فشرده سازي جدول‬
                                                                  ‫مرحله 2‬
    ‫نماد‬       ‫عمل‬
                                ‫تبديل به‬    ‫مساوي بودن بخش ‪ action‬براي‬
    ‫‪Id‬‬         ‫5‪s‬‬
                                                  ‫حالت هاي 7,6,4,0‬
    ‫(‬          ‫4‪s‬‬
    ‫‪any‬‬        ‫‪error‬‬



        ‫نماد‬   ‫عمل‬              ‫تبديل به‬      ‫ليست مشابهي براي حالت 1‬
     ‫+‬         ‫6‪s‬‬
     ‫$‬          ‫‪acc‬‬
     ‫‪any‬‬       ‫‪error‬‬


‫صفحه: 832‬           ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                       ‫مثال ‪ -LALR‬فشرده سازي جدول‬
     ‫نماد‬   ‫عمل‬                                              ‫مرحله 3‬
                          ‫تبديل به‬
     ‫*‬      ‫7‪s‬‬
                                     ‫جايگزيني وارده هاي خطا در حالت 2‬
     ‫‪any‬‬    ‫2‪r‬‬


     ‫نماد‬   ‫عمل‬           ‫تبديل به‬   ‫جايگزيني وارده هاي خطاي حالت 3‬
     ‫‪any‬‬    ‫4‪r‬‬


                                     ‫مساوي بودن بخش ‪ action‬براي‬
                                     ‫حالت هاي 11,01,5 و ادغام آنها‬



‫صفحه: 932‬    ‫اصول طراحي کامپايلرها‬      ‫گروه کامپيوتر‬
                              ‫مثال ‪ -LALR‬فشرده سازي جدول‬
                                                                     ‫مرحله 4‬
            ‫نماد‬      ‫عمل‬

            ‫*‬         ‫6‪s‬‬              ‫تبديل به‬     ‫جايگزيني وارده هاي حالت 8‬
            ‫)‬         ‫11‪s‬‬
            ‫‪any‬‬       ‫‪error‬‬

                                      ‫تبديل به‬
            ‫نماد‬      ‫عمل‬                          ‫جايگزيني وارده هاي حالت 9‬

            ‫*‬         ‫7‪s‬‬
            ‫‪any‬‬       ‫1‪r‬‬



‫صفحه: 042‬          ‫اصول طراحي کامپايلرها‬         ‫گروه کامپيوتر‬
                           ‫4-91 وقوع خطا در تجزيه ‪LR‬‬

            ‫تشخيص خطا تنها با مراجعه به جدول ‪action‬‬


   ‫اعالم خطا به محض نيافتن ادامه مناسب براي ورودي در حال پويش‬


                      ‫عدم كاهش دنباله روي پشته‬


               ‫عدم ورود نماد ايجاد كننده خطا به پشته‬



‫صفحه: 142‬    ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                           ‫4-02 پويش خطا در تجزيه ‪LR‬‬

                                              ‫روش ‪panic mode‬‬



       ‫1- پويش پشته به پايين تا يافتن حالت ‪ s‬با ‪ goto‬با پايانه خاص ‪A‬‬


‫2- صرف نظر از يك يا چند نماد ورودي تا يافتن نماد دقيقا مناسب براي ‪A‬‬

                   ‫3- انتقال حالت ]‪ goto [s , A‬به پشته و ادامه تجزيه‬




‫صفحه: 242‬     ‫اصول طراحي کامپايلرها‬     ‫گروه کامپيوتر‬
                         ‫4-02 پويش خطا در تجزيه ‪LR‬‬

                                          ‫روش ‪Phrase level‬‬



                     ‫1- آزمايش هر وارده خطا در جدول تجزيه‬

                   ‫2- تصميم گيري در مرورد منشاء بروز خطا‬

                       ‫3- ايجاد رويه پوششي مناسب براي خطا‬




‫صفحه: 342‬   ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                      ‫4-12 توليد كننده تجزيه كننده - ‪Yacc‬‬
                                               ‫روش ايجاد مترجم توسط ‪Yacc‬‬

      ‫مشخصه‬
‫:‪translate.y‬‬                    ‫‪y.tab.c‬‬             ‫1- آماده شدن پرونده اي حاوي‬
               ‫كامپايلر ‪Yacc‬‬
                                                     ‫مشخصه مترجم براي ‪Yacc‬‬

                                                       ‫2- تبديل محتواي پرونده به‬
    ‫‪y.tab.c‬‬
                ‫كامپايلر ‪C‬‬
                               ‫‪a.out‬‬                            ‫برنامه در زبان ‪C‬‬

                                                   ‫3- كامپايل برنامه توليدي همراه‬
     ‫ورودي‬                          ‫خروجي‬               ‫كتابخانه برنامه تجزيه ‪LR‬‬
                  ‫‪a.out‬‬
                               ‫(تجزيه كننده)‬
                                                   ‫4- خروجي: برنامه تجزيه كننده‬



  ‫صفحه: 442‬       ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬
                             ‫4-12-1 ‪ - Yacc‬اجزاي برنامه‬
               ‫اعالن ها‬

             ‫قوانين ترجمه‬              ‫بخش هاي برنامه مبدا ‪Yacc‬‬

            ‫روالهاي حامي ‪c‬‬

               ‫اعالن ها‬
                 ‫%%‬
             ‫قوانين ترجمه‬              ‫ترتيب در متن برنامه مبدا ‪Yacc‬‬
                 ‫%%‬
        ‫روالهاي حامي‪c‬‬

‫صفحه: 542‬      ‫اصول طراحي کامپايلرها‬   ‫گروه کامپيوتر‬
                                    ‫4-12-1 ‪ - Yacc‬اعالن‬

    ‫اعالن هاي معمول در ‪ c‬و‬
‫محصور بين {% , }% اعالن‬
                 ‫لغات موقت‬
                                             ‫بخش اعالن برنامه‬


      ‫اعالن نشانه هاي گرامر‬




‫صفحه: 642‬   ‫اصول طراحي کامپايلرها‬    ‫گروه کامپيوتر‬
                                 ‫4-12-2 ‪ - Yacc‬قوانين ترجمه‬

                                     ‫بخش قوانين ترجمه بالفاصله پس از %%‬



                                                ‫عمل معنايي‬      ‫مولد يا قانون‬

‫> سمت چپ <‬       ‫}عمل معنايي 1{ > انتخاب 1< :‬
             ‫} عمل معنايي 2{ > انتخاب 2< :‬
             ‫}عمل معنايي 3 { > انتخاب 3< :‬
             ‫.‬
             ‫.‬
             ‫.‬




‫صفحه: 742‬          ‫اصول طراحي کامپايلرها‬        ‫گروه کامپيوتر‬

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:23
posted:2/19/2012
language:Persian
pages:247