دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۱۶
  • اردیبهشت

جلسه ۰۷-۰۲ : بررسی تحلیل گر نحوی (Syntax analyser) – طراحی کامپایلر

  • دسته‌بندی‌ها :
جلسه ۰۷-۰۲ : بررسی تحلیل گر نحوی (Syntax analyser) –  طراحی کامپایلر
    • جزئیات
    • نوع محتواآموزشی

      سلام و وقت بخیر خدمت همراهان وب سایت آموزشی پی وی لرن. با دوره کامل آموزش طراحی کامپایلر در خدمت شما عزیزان خواهیم بود. در این بخش به بررسی تحلیلگر نحوی (Syntax analyser) می پردازیم. با ادامه ی آموزش ها همراه باشید. با ما همراه باشید.

      بررسی تحلیلگر نحوی (Syntax analyser)

      درخت تجزیه (Parse)

      یک درخت تجزیه یک تصویر گرافیکی از یک اشتقاق است. به راحتی می توان دریافت که رشته ها از نماد آغازین چگونه به دست می آیند. نماد آغازین به ریشه درخت تجزیه تبدیل می شود. حال این موضوع را با نمونه ای مورد بررسی قرار دهیم.

      اشتقاق  چپ ترین a + b * c را در نظر می گیریم.

      اشتقاق چپ‌ ترین آن به صورت زیر است:

      مثال : 

      مرحله ۱:

      E → E * EParse Tree Construction

      مرحله ۲:

      E → E + E * EParse Tree Construction

      مرحله ۳:

      E → id + E * EParse Tree Construction

      مرحله ۴:

      E → id + id * EParse Tree Construction

      مرحله ۵:

      E → id + id * idParse Tree Construction

      در یک درخت تجزیه:

      • تمام گره های برگ ، پایانی هستند.
      • تمام گره های داخلی غیر پایانی هستند.
      • پیمایش میان‌ ترتیبی رشته ورودی اولیه را می دهد.

      یک درخت تجزیه شرکت پذیری و تقدم عملگر ها را به تصویر می کشد. در ابتدا عمیق ترین زیر درخت پیمایش می شود ، بنابراین عملگر موجود در آن زیر درخت نسبت به عملگری که در گره های والد است تقدم می یابد.

      Ambiguity – ابهام

      گفته می شود گرامر G، اگر بیش از یک درخت تجزیه (چپ ترین یا راست ترین انشقاق) برای حداقل یک رشته داشته باشد مبهم است.

      مثال

      مثال : 

      گرامر بالا برای رشته id + id – id ، دو درخت تجزیه ایجاد می کند:

       

      بررسی تحلیل گر نحوی (Syntax analyser)

      بررسی تحلیلگر نحوی (Syntax analyser)

      گفته می شود این زبان توسط گرامری مبهم  تولید شده که دارای ابهامی ذاتی است. ابهام در گرامر برای ساخت کامپایلر خوب نیست. هیچ روشی نمی تواند ابهام را به طور خودکار تشخیص دهد و از بین ببرد ، اما می توان آن را با نوشتن مجدد کل گرامر به صورت بدون ابهام ، یا با تنظیم و پیروی از محدودیت های تقدم و شرکت‌ پذیری (associativity) برطرف نمود.

      شرکت‌ پذیری (associativity)

      اگر یک عملوند از دو طرف دارای عملگر باشد ، این که آن عملوند از عملگر کدام سمت خود استفاده کند بستگی به شرکت‌ پذیری عملگرها دارد. اگر این عملیات به صورت شرکت‌ پذیری از چپ باشد ، عملوند توسط عملگر سمت چپ عمل می کند و یا اگر عملیات به صورت شرکت‌ پذیری از راست باشد ، عملگر سمت راست آن عملوند را انتخاب می کند.

      مثال

      عملیاتی مانند جمع کردن، ضرب ، تفریق و تقسیم به صورت شرکت‌ پذیر از چپ هستند. اگر این عبارت شامل موارد زیر باشد:

      مثال : 

      که به صورت زیر ارزیابی خواهد شد:

      مثال : 

      به عنوان مثال ، id + id) + id)

      عملیاتی مانند به توان شرکت‌ پذیر از راست هستند ، یعنی ترتیب ارزیابی در همان عبارت به صورت زیر خواهد بود:

      مثال : 

      به عنوان مثال ، (id ^ (id ^ id

      تقدم (Precedence)

      اگر دو عملگر مختلف با یک عملوند مشترک وجود داشته باشد ، تقدم عملگر ها تصمیم می گیرد که کدام یک از این عملوند را بگیرد. یعنی ۲ + ۳ * ۴ می تواند دارای دو درخت مختلف تجزیه باشد که یکی مربوط به (۲ + ۳) * ۴ و دیگری مربوط به ۲+ (۳ * ۴) است. با تعیین اولویت در بین اپراتورها ، می توان این مشکل را به راحتی برطرف کرد. مانند مثال قبلی ، از نظر ریاضی * (ضرب) بر + (جمع) اولویت دارد ، بنابراین عبارت ۲ + ۳ * ۴ همیشه این گونه تعبیر خواهد شد:

      مثال : 

      این روش ها احتمال ابهام در یک زبان یا دستور زبان آن را کاهش می دهد.

      کلام پایانی

      در این بخش از آموزش طراحی کامپایلر و مبحث بررسی تحلیل گر نحوی (Syntax analyser) به صحبت در مورد درخت تجزیه (Parse) ، ابهام یا Ambiguity و موراد دیگر پرداختیم. در جلسه ی آینده نیز مبحث بررسی تحلیل گر نحوی (Syntax analyser) را با موضوعات جدیدی ادامه خواهیم داد. با ما همراه باشید.

      QR:  جلسه ۰۷-۰۲ : بررسی تحلیل گر نحوی (Syntax analyser) –  طراحی کامپایلر
      به اشتراک بگذارید